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


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

c++/1923: Internal compiler error in extract_insn



>Number:         1923
>Category:       c++
>Synopsis:       Internal compiler error in extract_insn
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 09 09:36:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     markd@cse.ucsc.edu
>Release:        2.96 20000731
>Organization:
>Environment:
Red Hat Linux 7.0
>Description:
g++  -frtti   -c BUG.cc
../../../src/framework/dp-structs/ProbMatrixAllocator.h: In method `void
ProbMatrixAllocatorTmpl<PROBARRAY>::allocArrays (int, ProbArray **) [with PROBARRAY = ProbArray]':
/usr/include/g++-3/stl_alloc.h:161:   instantiated from here
../../../src/framework/dp-structs/ProbMatrixAllocator.h:85: Unrecognizable insn:
(insn 160 380 162 (set (reg:DI 68)
        (mem/s/u (symbol_ref:SI ("_4Prob.ZERO")) 0)) -1 (nil)
    (nil))
../../../src/framework/dp-structs/ProbMatrixAllocator.h:85: Internal compiler error in extract_insn, \
at
recog.c:2106
Please submit a full bug report.
>How-To-Repeat:
g++  -frtti   -c BUG.cc
>Fix:

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

IyAxICJQcm9iTWF0cml4LmNjIgojIDE3ICJQcm9iTWF0cml4LmNjIgojIDE5ICJQcm9iTWF0cml4
LmgiIDEKIyAxNiAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMQojIDI4ICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMjggIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVybiBk
b3VibGUgYWNvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAo
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luICggZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZG91YmxlIGF0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2F0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKCBkb3Vi
bGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yICggZG91
YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKCBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpbiAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRv
dWJsZSBjb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoICgg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKCBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBkb3VibGUgdGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
dGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoICggZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fYXNpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
YXRhbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oICggZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKCBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyAx
MDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAg
KCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
ZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbGRleHAgKCBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19sZGV4cCAoIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGxvZyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKCBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKCBkb3VibGUgX194LCBkb3VibGUgKl9faXB0
cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmICggZG91YmxlIF9feCwgZG91YmxlICpf
X2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgbG9nMXAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2xvZzFwICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diICggZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diICggZG91YmxlIF9feCkgdGhy
b3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91
YmxlIHBvdyAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fcG93ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBzcXJ0ICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0ICggZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKCBkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90ICggZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKCBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19jZWlsICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJz
ICggZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fZmFicyAoIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yICggZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19mbG9vciAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgZm1vZCAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZm1vZCAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4g
KGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGRvdWJsZSBkcmVtICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19kcmVtICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpZ25pZmljYW5kICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIGNvcHlzaWduICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKCBkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRv
dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19qMCAoIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKCBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAo
aW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwICggZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3kwICggZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5
MSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKCBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmICggZG91YmxlKSB0aHJvdyAoKTsK
ZXh0ZXJuIGRvdWJsZSBlcmZjICggZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Vy
ZmMgKCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKCBkb3VibGUpIHRocm93ICgpOwojIDI0NiAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoIGRvdWJsZSwgaW50ICpfX3NpZ25n
YW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50ICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKCBk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoIGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiICggZG91YmxlIF9feCwgZG91
YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKCBkb3VibGUgX194
LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoIGRvdWJsZSBfX3gs
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKIyA2NCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwpleHRlcm4gZmxvYXQgYWNvc2YgKCBm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19hc2luZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKCBmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19jb3NmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3RhbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGNvc2hmICggZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IHNpbmhmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKCBm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmICggZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgYWNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv
c2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKCBmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2F0YW5oZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmICggZmxvYXQgX194KSB0
aHJvdyAoKTsKCiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
ZmxvYXQgZnJleHBmICggZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19mcmV4cGYgKCBmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoIGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2xvZ2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cx
MGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKCBmbG9hdCBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9f
aXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmICggZmxvYXQgX194LCBmbG9hdCAq
X19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGxvZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xv
ZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmICggZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKCBmbG9hdCBfX3gpIHRocm93ICgp
OwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IHBv
d2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2Yg
KCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKCBmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19jYnJ0ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9h
dCBjZWlsZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmICggZmxv
YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKCBmbG9hdCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKCBm
bG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
ZmxvYXQgZmxvb3JmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3Jm
ICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKCBmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmICggZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZs
b2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5hbmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mICggZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoIGZsb2F0IF9feCwg
ZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoIGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f
Y29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4
dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmICggZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBqMWYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoIGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKCBm
bG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IHkxZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmICggZmxv
YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg
ZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoIGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19lcmZjZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKCBmbG9hdCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CiMgMjQ2
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZ2FtbWFmICgg
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKCBmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoIGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgbmV4dGFmdGVyZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKCBmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CmV4dGVybiBmbG9hdCByZW1haW5kZXJmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmICggZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoIGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKCBmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf
X2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzCiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAxIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKCBsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sICggbG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsICggbG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBjb3NsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fY29zbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
c2lubCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sICgg
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsICggbG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgoj
IDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91Ymxl
IGZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKCBsb25nIGRvdWJsZSBf
X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBs
ICggbG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2wgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sb2dsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nMTBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fbG9nMTBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbW9kZmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAoIGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsICggbG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxs
cy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsICggbG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBz
cXJ0bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Nx
cnRsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5
cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9faHlwb3RsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKCBsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAoIGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZhYnNsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsICggbG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAoIGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
X19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2lu
ZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBp
bmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19pbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAoIGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZHJlbWwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAoIGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg
MjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5s
IChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAoIGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsICggbG9uZyBkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsICggbG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgeTBsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X195MGwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKCBs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAoIGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBlcmZjbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZXJmY2wgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv
dWJsZSBsZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAoIGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsICggbG9uZyBkb3VibGUpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yICggbG9uZyBkb3VibGUs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxf
ciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgcmludGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yaW50bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIG5leHRhZnRlcmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVt
YWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAoIGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2NhbGJsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKCBsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBp
bnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0
eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJ
WF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9O
X1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3Qg
X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi
bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjkw
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo
YXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0LmgiIDEgMwp1bmlvbiBfX2NvbnZlcnRfbG9uZ19k
b3VibGUgewogIHVuc2lnbmVkIF9fY29udmVydF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91
YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9OwojIDI5MCAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KCgojIDE2ICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIiAyCgojIDU4ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNo
YXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9p
ZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rp
b24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpf
X2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCn0KCiMgMTcgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiIDIK
CiMgMjcgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKI3ByYWdtYSBpbnRlcmZh
Y2UKIyAyNyAiL3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDMKCgoKCgojIDI4ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDI4ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgoKCgoKCmV4dGVybiAiQyIgewoKIyAz
MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxOTkgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25n
IGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVm
IHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0
eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25n
IGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVk
ZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBf
X3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50
IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9f
b2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5
cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9f
ZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1l
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBf
X3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBp
bnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9f
dGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgoKIyAxMDkg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAg
ICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsK
CgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsK
CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0
X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rf
c2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBl
ZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoK
CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAg
aW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh
dHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz
Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g
X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl
X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk
cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz
Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK
ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp
bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4
YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDE0MCAiL3Vzci9pbmNs
dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhy
ZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMTAgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKIyAzMTIgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI1ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg
MwoKCiMgNjQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRd
OwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9z
OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDUgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgNDYgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoK
CgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09O
Vl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09O
Vl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBM
RVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVS
TkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dD
T05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3Ry
dWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1
Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3Ry
dWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoq
LCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19m
Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQg
Y2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBj
aGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25z
dCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICop
OwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJh
bnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsK
ICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsK
ICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252
X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwog
IF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBfX2NvbnN0IGNo
YXIgKl9fZnJvbV9uYW1lOwogIF9fY29uc3QgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj
dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0
IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl
ZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgog
IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19v
dXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVy
OwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9f
bWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu
czsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7
CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSBfX2RhdGFbMF07Cn0gKl9fZ2NvbnZfdDsKCiMgNDUgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2lu
Zm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29u
dl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKIyAzMSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDIgMwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDQzICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCnR5
cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9f
anVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CgoKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190
OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAg
c3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ss
CiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2Nv
bnYKfTsKCiMgMjYzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewog
IGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9l
bmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFy
KiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9i
YXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIg
Kl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5v
OwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNo
b3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3No
b3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNyAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lk
ICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50
KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsK
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVj
dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w
bHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVk
ZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBz
aXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo
dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2Zu
ICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBp
bnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCiMgMzk1ICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4g
d2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg
X193dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93
IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwoKIyA0MjggIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRl
cm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2Nf
bG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zs
b2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmls
ZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lP
X0ZJTEUgKikgdGhyb3cgKCk7CgojIDQ1OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu
IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y
ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y
ZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19y
ZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lP
X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0
biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRf
dCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7
CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50
KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKCiMgNTE0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgMzcgIi91c3Iv
aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCn0KCgoKIyAxMTAgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKdHlwZWRlZiBf
X2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVm
LmgiIDIgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKZXh0ZXJuICJD
KysiIHsKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKCgoK
Cgp0eXBlZGVmIF9fb2ZmNjRfdCBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90IHN0cmVhbXBv
czsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBf
aW9zX2ZpZWxkcwp7CiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwog
ICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCBfZmlsbDsK
ICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQg
X3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOwp9OwoKIyAxMjYgIi91c3IvaW5jbHVkZS9n
KystMy9zdHJlYW1idWYuaCIgMwpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlv
cyYgb3BlcmF0b3I9KGlvcyYpOwogIGlvcyAoY29uc3QgaW9zJik7CiAgcHVibGljOgogICAgdHlw
ZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5
cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3Qgc3RyZWFtc2l6ZTsKICAg
IGVudW0gaW9fc3RhdGUgewogICAgICAgIGdvb2RiaXQgPSAwLAogICAgICAgIGVvZmJpdCA9IDEs
CiAgICAgICAgZmFpbGJpdCA9IDIsCiAgICAgICAgYmFkYml0ID0gNCB9OwogICAgZW51bSBvcGVu
X21vZGUgewogICAgICAgIGluID0gMSwKICAgICAgICBvdXQgPSAyLAogICAgICAgIGF0ZSA9IDQs
CiAgICAgICAgYXBwID0gOCwKICAgICAgICB0cnVuYyA9IDE2LAogICAgICAgIG5vY3JlYXRlID0g
MzIsCiAgICAgICAgbm9yZXBsYWNlID0gNjQsCiAgICAgICAgYmluID0gMTI4LAogICAgICAgIGJp
bmFyeSA9IDEyOCB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlw
ZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CgogICAgZW51bSB7IHNraXB3cz0wMSwKICAgICAg
ICAgICBsZWZ0PTAyLCByaWdodD0wNCwgaW50ZXJuYWw9MDEwLAogICAgICAgICAgIGRlYz0wMjAs
IG9jdD0wNDAsIGhleD0wMTAwLAogICAgICAgICAgIHNob3diYXNlPTAyMDAsIHNob3dwb2ludD0w
NDAwLAogICAgICAgICAgIHVwcGVyY2FzZT0wMTAwMCwgc2hvd3Bvcz0wMjAwMCwKICAgICAgICAg
ICBzY2llbnRpZmljPTA0MDAwLCBmaXhlZD0wMTAwMDAsCiAgICAgICAgICAgdW5pdGJ1Zj0wMjAw
MDAsIHN0ZGlvPTA0MDAwMAoKCgogICAgICAgICAgIH07CiAgICBlbnVtIHsKICAgICAgICBiYXNl
ZmllbGQ9ZGVjK29jdCtoZXgsCiAgICAgICAgZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQs
CiAgICAgICAgYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzkg
Ii91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwogICAgb3N0cmVhbSogdGllKCkgY29u
c3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3Ry
ZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoKCiAgICB3Y2hhcl90IGZp
bGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCBmaWxsKHdjaGFyX3QgbmV3
ZikKICAgICAgICB7d2NoYXJfdCBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9s
ZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZt
dGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRfdmFs
ID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQogICAgaW50IHBy
ZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGludCBwcmVjaXNpb24o
aW50IG5ld3ApIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3By
ZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwogICAgICAgIHJldHVybiBvbGRwOyB9CiAg
ICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewogICAgICAgIGZtdGZsYWdzIG9sZGJpdHMg
PSBfZmxhZ3M7CiAgICAgICAgX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZt
dGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7CiAgICAgICAgZm10Zmxh
Z3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwg
KHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZs
YWdzIG1hc2spIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwogICAgICAgIF9m
bGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lk
dGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19mYWls
dXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewogICAg
ICAgIF9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKICAgICAgICBpZiAo
X3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlv
c3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFn
KSB7IF9zdGF0ZSB8PSBmbGFnOwogICAgICAgIGlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Ro
cm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0g
MDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9
CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6
OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpi
YWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQog
ICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2
b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9
CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQog
ICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CiAgICAgICAgX2V4Y2VwdGlvbnMg
PSBlbmFibGU7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy
ZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0K
ICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9v
bGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAg
IHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5j
X3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdz
IGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGlu
dCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNvbnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAg
IGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCiMgMjUxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFt
YnVmLmgiIDMKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQog
ICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0
cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUg
dm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRl
ZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKIyAyNzYgIi91c3IvaW5jbHVkZS9nKystMy9zdHJl
YW1idWYuaCIgMwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAg
ZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7
IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpz
Yik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gMTsgfQog
ICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qg
c3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBm
cmllbmQgY2xhc3MgaXN0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5k
IGNsYXNzIHN0cmVhbW1hcmtlcjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4g
Kihjb25zdCB2b2lkKiopKChfSU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAg
c3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxsOwogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJl
dHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsK
ICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9J
T19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJl
dHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAmIDB4MTAwID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBj
aGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBi
YXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgPyBfSU9fc2F2ZV9iYXNlIDogX0lP
X3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNl
OyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGlu
dCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAg
IHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50
IHhmbGFncygpIHsgcmV0dXJuIF9mbGFnczsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBm
bCA9IF9mbGFnczsgX2ZsYWdzID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGlu
dCBmKSB7IF9mbGFncyB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2sp
CiAgICAgIHsgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZv
aWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICYgMHgxMDAgPyAoX0lPX3NhdmVfYmFzZSs9
bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVf
cHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAg
ICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lP
X3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIs
IGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgJiAweDEwMCkgX0lPX2ZyZWVf
YmFja3VwX2FyZWEodGhpcyk7CiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRy
ID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4g
X3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAw
OyB9CgogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jh
c2UgOiBfSU9fcmVhZF9iYXNlOyB9CgogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNr
dXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQoKICAgIGNoYXIgKkJiYXNlKCkg
eyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQog
ICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQoKICAgIGNoYXIgKmVC
cHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7
IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAq
ZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsg
cmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg
eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEo
KTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJu
IF9mbGFncyAmIDB4ODAwOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CgogICAgc3Ry
ZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgp
OwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOwogICAgdmlydHVhbCB+
c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkpOwogICAg
dmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOwogICAgdmly
dHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRu
KGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2Zm
KHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZp
cnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6Omlu
fGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtf
ZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVr
b2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFt
cG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9f
c2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBv
cyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwog
ICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1
YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vl
a21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFj
a2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0
dXJuIF9mbGFncyAmIDIgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJu
IF9mbGFncyAmIDB4MjAwID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKICAg
ICAgICB7IGlmIChpKSBfZmxhZ3MgfD0gMjsgZWxzZSBfZmxhZ3MgJj0gfjI7IH0KICAgIHZvaWQg
bGluZWJ1ZmZlcmVkKGludCBpKQogICAgICAgIHsgaWYgKGkpIF9mbGFncyB8PSAweDIwMDsgZWxz
ZSBfZmxhZ3MgJj0gfjB4MjAwOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7CiAgICAgICAgaWYgKGJh
c2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwogICAgICAgIGVsc2UgcmV0dXJuIGRvYWxs
b2NhdGUoKTsgfQoKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsKSBk
b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg
eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp
bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh
bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o
cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq
IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp
bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o
aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBzaXplX3QgbiwgY2hhciBkZWxpbSwg
aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0
YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9
CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKHRoaXMpLT5fSU9fcmVhZF9wdHIgPj0gKHRoaXMp
LT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKHRoaXMpID09ICgtMSkgPyAoLTEpIDogKih1
bnNpZ25lZCBjaGFyICopICh0aGlzKS0+X0lPX3JlYWRfcHRyKTsgfQogICAgaW50IHNuZXh0Yygp
IHsKICAgICAgICBpZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxv
dyh0aGlzKSA9PSAoLTEpKQogICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgZWxzZSByZXR1
cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lP
X3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2Fu
KGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVs
bCk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hh
ciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z
dCAqZm10MCAuLi4pOwoKCgoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBi
dWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNv
bnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0
cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmly
dHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOwoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOwog
ICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKCgoKY2xhc3MgZmlsZWJ1ZiA6IHB1
YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoK
ICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7CiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVm
KGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+
ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVu
KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9w
ZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAw
NjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZs
b3coaW50IGMgPSAoLTEpKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVu
byA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5v
IDogKC0xKTsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2Nh
dGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIs
IGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1
ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMs
IHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3RlY3RlZDoKCiAgICBpbnQgaXNfcmVh
ZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0cigp
IHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/IGdwdHIoKSA6IHBwdHIoKTsgfQoKICAgIGNoYXIqIGZp
bGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNf
cmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz
eXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0
KHZvaWQqKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lk
IGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKICAgICAgICAgICAg
ICAgIF9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25z
PTA7CiAgICAgICAgICAgICAgICBfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsg
X2ZpbGw9JyAnOwoKICAgICAgICAgICAgICAgIF9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsK
CgoKICAgICAgICAgICAgICAgIF9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBp
b3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3Rv
KTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKCgogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h
cnJheXMpOwp9Cn0KIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKZXh0
ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgq
X19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0
eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3
cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4
dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhv
c3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewoKICAg
IHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0o
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD1fX251bGwpOwogICAgaW50IG9wZngoKSB7CiAg
ICAgICAgaWYgKCFnb29kKCkpIHJldHVybiAwOwogICAgICAgIGVsc2UgeyBpZiAoX3RpZSkgX3Rp
ZS0+Zmx1c2goKTs7IHJldHVybiAxO30gfQogICAgdm9pZCBvc2Z4KCkgezsKICAgICAgICAgICAg
ICAgICAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0YnVmfGlvczo6c3RkaW8pKQogICAgICAgICAg
ICAgICAgICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVh
bSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoK
ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3Ry
ZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsg
cmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25z
dCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29u
c3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0
cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBj
aGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwg
X19nbnVjX3ZhX2xpc3QgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykg
PDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJl
dHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
Y2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMp
CiAgICAgICAgeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKICAgICAgICB7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZv
aWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVuc2lv
bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25fXyBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNp
Z25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBv
cGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91
YmxlKW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKTsKCgoKICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhp
cyk7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhp
cyk7IHJldHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoK
Cgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7Cgpwcm90ZWN0ZWQ6CiAg
ICBzaXplX3QgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3Ry
ZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KnRpZWQ9X19udWxsKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBs
ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0
KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0m
IGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3Ry
ZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc
bicpCiAgICAgICAgeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9
CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9
ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAg
ICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7
IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVh
bSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4g
cmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRy
LCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAg
IGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJl
YWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFy
IGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0g
J1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsKICAgICAgICBpZiAoIWdvb2QoKSkg
eyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKOwogICAgICAg
ICAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkp
IF90aWUtPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNr
aXB3cykpIHJldHVybiBfc2tpcF93cygpOwogICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICAg
ICB9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7CiAgICAgICAgaWYgKCFnb29kKCkpIHsgc2V0KGlv
czo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CiAgICAgICAgZWxzZSB7CjsKICAgICAgICAgIGlmIChf
dGllKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykg
cmV0dXJuIF9za2lwX3dzKCk7CiAgICAgICAgICBlbHNlIHJldHVybiAxOwogICAgICAgIH0KICAg
IH0KICAgIGludCBpcGZ4MSgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWls
Yml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKOwogICAgICAgICAgaWYgKF90aWUgJiYg
cmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgcmV0dXJu
IDE7CiAgICAgICAgfQogICAgfQogICAgdm9pZCBpc2Z4KCkgezsgfQogICAgaW50IGdldCgpIHsg
aWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKTsKICAgICAgICAgICAgICAgIGVsc2UgeyBpbnQgY2gg
PSBfc3RyYnVmLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKC0x
KSkgc2V0KGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICAgICBpc2Z4KCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICAgICAgICAgICB9IH0KICAg
IGludCBwZWVrKCk7CiAgICBzaXplX3QgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAg
aXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkpOwogICAgaW50IHN5bmMg
KCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3Ry
ZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBw
dXRiYWNrKGNoYXIgY2gpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNr
YyhjaCkgPT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwogICAgICAgIHJldHVybiAqdGhpczt9
CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1
bmdldGMoKSA9PSAoLTEpKSBjbGVhcihpb3M6OmJhZGJpdCk7CiAgICAgICAgcmV0dXJuICp0aGlz
O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt
JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKCgoKCgog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu
c2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIq
KXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30K
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+
PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+
Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNp
Z25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9f
bWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVi
bGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsg
fQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPV9fbnVsbCk7Cn07Cgpj
bGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAg
X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpj
bGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAg
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpl
eHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0
aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoK
Cgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYg
dW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFt
X2luaXQgeyB9IDsKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBp
b3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChp
b3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl
dHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6
OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0KCiMgMTggIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiIDIKCiMgMjcgIi91c3IvaW5jbHVkZS9nKystMy9pb21h
bmlwLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDI3ICIvdXNyL2luY2x1ZGUvZysrLTMvaW9t
YW5pcC5oIiAzCgoKCgoKCmV4dGVybiAiQysrIiB7CiMgNDIgIi91c3IvaW5jbHVkZS9nKystMy9p
b21hbmlwLmgiIDMKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNtYW5pcDsKCnRlbXBsYXRlPGNs
YXNzIFRQPiBjbGFzcyBzYXBwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwpwdWJsaWM6CiAg
ICBzYXBwKGlvcyYgKCpmKShpb3MmLCBUUCkpIDogX2YoZikge30KCiAgICBzbWFuaXA8VFA+IG9w
ZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1cm4gc21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRl
bXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBj
b25zdCBzbWFuaXA8VFA+JiBtKTsKdGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoKdGVtcGxhdGUgPGNs
YXNzIFRQPiBjbGFzcyBzbWFuaXAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CiAgICBUUCBf
YTsKcHVibGljOgogICAgc21hbmlwKGlvcyYgKCpmKShpb3MmLCBUUCksIFRQIGEpIDogX2YoZiks
IF9hKGEpIHt9CgogICAgZnJpZW5kCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4oaXN0cmVh
bSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKfTsKCgpfX2V4dGVu
c2lvbl9fIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50PjsKX19leHRlbnNpb25fXyBl
eHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGlvczo6Zm10ZmxhZ3M+OwoKCnRlbXBsYXRlPGNs
YXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBzbWFu
aXA8VFA+JiBtKQp7ICgqbS5fZikoaSwgbS5fYSk7IHJldHVybiBpOyB9Cgp0ZW1wbGF0ZTxjbGFz
cyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qgc21hbmlw
PFRQPiYgbSkKeyAoKm0uX2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9CgoKX19leHRlbnNpb25fXyBl
eHRlcm4KdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlw
PGludD4mKTsKX19leHRlbnNpb25fXyBleHRlcm4KdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+Jik7Cl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNtYW5p
cDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIGNvbnN0IHNtYW5pcDxpb3M6OmZtdGZsYWdzPiYpOwoKCgoKCgp0ZW1wbGF0
ZTxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwOwoKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIGlhcHAg
ewogICAgaXN0cmVhbSYgKCpfZikoaXN0cmVhbSYsIFRQKTsKcHVibGljOgogICAgaWFwcChpc3Ry
ZWFtJiAoKmYpKGlzdHJlYW0mLFRQKSkgOiBfZihmKSB7fQoKICAgIGltYW5pcDxUUD4gb3BlcmF0
b3IoKShUUCBhKQogICAgICAgeyByZXR1cm4gaW1hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0
IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwIHsKICAgIGlz
dHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgaW1hbmlw
KGlzdHJlYW0mICgqZikoaXN0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KCiAjĀ:BmllbmQKICAgICBpLCBjb25zdCBp
bWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUUjĀ:W5W5lIGlzdHJlYaW1hbmlwPFRQPiYgbSkKeyByZXR1cm4gKCptLl9m
KSggaSwgbS5fYSk7IH0KCgo0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwOwoKdGVt
cGxhdGU8Y2xhc3MgVFA+IGNsYXNzIG9hcHAgewogICAgb3N0cmVhbSYgKCpfZikob3N0cmVhbSFRQKTsKcHVibGljOgogICAgb2FwcChvc3RyZWFtJiAoKmYpKG9zdHJlYW0mLFRQKSkgOiBfZihm
KSB7fQoKICAgIG9tYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhICAgICB7IHJldHVybiBvbWFu
aXA8VFA+KF9mLCBhKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUgb3N0cmVhbSYg
b3BlcmF0b3I8PChvc3RyZWwgY29uc3Qgb21hbmlwPFRQPiYpOwoKdGVtcGxhdGUgPGNsYXNz
IFRQPiBjbGFzcyBvbWFuaXAgewogICAgb3N0cmVhbSYgKCpfZikob3N0cmVhbSYsIFRQKTsKIjĀ:IFIF9hOwpwdWJsZWFtJiwgVFApLCBU
UCBhKSA6IF9mKGYpLCBfYShhKSB7fQoKICAgIGZyaWVuZAogICBvc3RyZWFtJiBvcGVyYXRv
cjw8IDw+KG9zdHJlYW0mIG8sIGNvbnN0IG9tYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIFRQPgppbmxpbmUgbjĀ:mVSYgb3BlcmF0bJiBtKQp7IHJldHVybiAoKm0uX2YpKG8sIG0uX2EpOyB9CiMgMTY2ICIvdXNyL2lu
ZGUvZysrLTMvaW9tYW5pcC5oIiAzCgoKCgoKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldGJhc2Ug
KGlvcyYsIGludCk7IGlubGluZSBzbWFuaXA8aW50PiBzZXNlIChpbnQgbikgeyByZXR1cm4g
c21hbmlwPGludD4gKF9faW9tYW5pcF9zZXRiYXNlLCBuKTsgfQpleHRlcm4gaW9zJiBfX2lvbWFu
aXBfc2V0ZmlsbCAoaW9zaW50KTsgaW5saW5lIHNtYW5pcDxpbnQ+IHNldGZpbGwgKGludCBu
KSB7IHJldHVybiBzbWFuaXA8aW50PiAoX19pb21hbmlwX3NldGZpbGwsIG4pOyB9CmV4dGVp
b3MmIF9faW9tYW5pcF9zZXRwcmVjaXNpb24gKGlvcyYsIGludCk7IGlubGluZSBzbWFuaXA8aW50
PiBzZXRwcmVjaXNpb24gKGludCBuKSB7IHJldHVybiBzbjĀ:XAW50PiAoX19pbIGlvcyYgX19pb21hbmlwX3NldHcgKGlvcyYsIGludCk7
IGlubGluZSBzbWFuaXAjĀ:0PzZXR3IChpbnQ5pcF9zZXR3LCBuKTsgfQoKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3Jlc2V0aW9zZmMg
KGlvcyYsIGlvczo6Zm10ZmxhZ3MpOyBpbmxpbmUgc21hbmlwPGlvczo6Zm10ZmxhZ3M+IHJlc2V0
aW9zZmxhZ3MgKGlvczo6Zm10ZmxhZ3MgbikgeyByZXR1c21hbmlwPGlvczo6Zm10ZmxhZ3M+
IChfX2lvbWFuaXBfcmVzZXRpb3NmbGFncywgbik7IH0KZXh0ZXJuIGlvcyYgX19pb21hbmlwX3Nl
dGlvc2ZsYWdzIChpb3Bpb3M6OmZtdGZsYWdzKTsgaW5saW5lIHNtYW5pcDxpb3M6OmZtdGZs
YWdzPiBzZXRpb3NmbGFncyAoaW9zOjpmbXRmbGFncyBuKSB7IHJldHVybiBzbWFuaXA8ajĀ:jpbXRmbGFncz4gIyAxOSAiLi4vLi4vLi4v
c3JjL2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMgojIDMjĀ:uLuLi8uLi9zcmM9iOwp0eXBlZGVmIFByb2IgUEdGUHJvYjsKIyA0OCAiLi4v
Li4vLi4vc3JjL2ZyY29yay91dGlsL1Byb2IuaCIKY2xhc3MgZnJvbV9kb3VibGUKewpwdWJs
aWM6CiAgZG91YmxlIHZhbDsKICBmcm9tX2RvdWJsZShjb25zdCBkb3VibGUgZCkge3ZhjĀ:IG
fQp9OwoKCgplIHZhbDsKICBmcm9tX2xv
Zyhjb25zdCBkb3VibGUgZCkge3ZhbCA9IGQ7fQp9OwMgMTAyICIuLi8uLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYi5oIgojIDI2ICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIgMQpjjĀ:cyaG9ydFByb2I7mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpjbGFzcyBQcm9iQmFzZQp7CnB1YmxKCiAg
dHlwZWRlZiBlbnVtIHtPbmU9MSwgVW5pdHkgPSBPbmUsIFplcm8gPSAwLEludmFsaWQgPSAtMX0g
Q29uc3RQcm9iOwoKcHJvdGVjdGVkOgoKICBkb3VibmFsOwojIDcyICIuLi8uLi8uLi9zcmMv
ZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIKICBzdGF0aWMgaW5saW5lIGRvdWJsZSBfbG9nVmFs
aWQodm9pZCkge3JybiAtMWUzNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2xvZ0ludmFs
aWQodm9pZCkge3JldHVybiAtMmUzNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2plcm8o
dm9pZCkge3JldHVybiAtMmUzNTt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2xvZ0Vwc2lsb24o
dm9pZCkge3JldHVybiAtNzA4O30KCgoKCiAgc3RhIGlubGluZSBkb3VibGUgX21heERpZmYo
dm9pZCkge3JldHVybiAzNy40O30KCgoKCgogIHN0YXRpYyBpbmxpbmUgZG91YmxlIF9hcHByb3hE
aWZmKHZvaWQpIHR1cm4gMWUtNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2NhbGNMb2co
ZG91YmxlIHYpCiAgewogICAgICAgIHJldHVybiAodiA8IHJldF9lcHNpbG9uKCkpIjĀ:2x1pl
cm8oKSA6Ly4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIgogIHN0YXRpYyBkb3VjĀ:gc0X2Vwc2lsb244uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5o
IgogIGludCB2YCh2b2lkKSBjb25zdCB7CiAgICAgIHJldHVybiAodmFsID4gX2xvZ1ZhbGlk
KCkpICYmICh2YWwgPT0gdmFsKTsKICB9CgoKCgoKCiAgaW50IG5vbl9wcm9iKHZvIGNvbnN0
IHtyZXR1cm4gIXZhbGlkKCkgfHwgdmFsID4gMC4wO30KCgoKCiAgaW50IGlzX3plcm8odm9pZCkg
Y29uc3Qge3JldHVybiAodmFsIDw9IF9sb2daZXkpO30KCgoKCiAgaW50IGlzX29uZSh2b2lk
KSBjb25zdCB7cmV0dXJuIHZhbD09MC4wO30KCgoKCiAgZG91YmxlIHJldF9sb2codm9pZCkgY29u
c3Qge3JldHVyYWw7fQoKCgoKICBkb3VibGUgcmV0X2RvdWJsZSh2b2lkKSBjb25zdAogICAg
e3JldHVybiAodmFsIDwgX2xvZ0Vwc2lsb24oKSkgPyAwLjAgOiBleHAodmFsKTtjĀ:KCgIHZv
aWQgc2QpICgodmFsID09IHZhbCkgPyAw
IDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIiwgMTQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTt9CgoKCgog
IHZvaWQgc2VvdWJsZSAoZG91YmxlIGYpIHt2YWwgPSBfY2FsY0xvZyhmKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2YW8gMCA6IChf
X2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDE1MCwgX19QUkVUVFlfjĀ:Q1T05fXyksIDAp0UHJvYiBjKSB7CiAgICAgIHNldF9sb2cgKGMgPT0gT25lID8gMCA6
IGMgPT0gWmjĀ:A/AgICAgICAgICsK
ICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYjĀ:CgmFsID09
IHZhUHJvYkd1dHMuaCIsIDE1OSwgX19Q
UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAKCgoKCgoKICBkb3VibGUgZW50cm9weSh2b2lk
KSBjb25zdCB7cmV0dXJuICgtKHJldF9kb3VibGUoKSAqIHZhbCkpOyB9OwoKCgoKCgogIFByb2JC
YXNlIG9wZG9yfih2b2lkKSBjb25zdCB7CiAgICAgICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4vL2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCAxNzYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAg
ICBQcm9iQmFzZSB4OwogICAgICB4LnNldFVibGUoMS4wLXJldF9kb3VibGUoKSk7CiAgICAg
ICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoIngujĀ:X2ZygpID09eC5yay91
dGlsL1Byb2JHdXRzLmgiLCAxNzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCApOwogICAgICBy
ZXR1cm4geDsKICB9CgoKCgoKCiBpbmxpbmUgUHJvYkJhc2Ugb3BlcmF0b3IqPShQcm9iQmFzZSB4
KTsKCgoKCiBpbmxpbmUgUHJvYkJhc2UgJGVyYXRvci89KGNvbnN0IFByb2JCYXNlJiB4KTsK
CgoKCiBpbmxpbmUgUHJvYkJhc2UgJiBvcGVyYXRvcis9KGNvbnN0IFByb2JCYXNlJiB4KTsKCgoK
CiBpbmxgUHJvYkJhc2UgJiBvcGVyYXRvci09KGNvbnN0IFByb2JCYXNlJiB4KTsKCgoKCiBm
cmllbmQgaW5saW5lIFByb2JCYXNlIG9wZXJhdG9yKihjb25zdCBQcm9iQmYsY29uc3QgUHJv
YkJhc2UmKTsKIGZyaWVuZCBpbmxpbmUgUHJvYkJhc2Ugb3BlcmF0b3IvKGNvbnN0IFByb2JCYXNl
Jixjb25zdCBQcm9iQmFzZSYpOwogZnJpIGlubGluZSBQcm9iQmFzZSBvcGVyYXRvcisoY29u
c3QgUHJvYkJhc2UmLGNvbnN0IFByb2JCYXNlJik7CiBmcmllbmQgaW5saW5lIFByb2JCYXNlIG9w
ZXJhdGhjb25zdCBQcm9iQmFzZSYsY29uc3QgUHJvYkJhc2UmKTsKIyAyMjAgIi4uLy4uLy4u
L3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgogZnJpZW5kIGlubSBpbnQgYXBwcm94
RXF1YWwoUHJvYkJhc2UgY29uc3QgJixQcm9iQmFzZSBjb25zdCAmKTsKCgoKCgoKIGZyaWVuZCBp
bmxpbmUgUHJvYkJhc2UgcG93KFByb2JlIGNvbnN0ICYsIGRvdWJsZSk7CgoKCgoKIGZyaWVu
ZCBpbmxpbmUgUHJvYkJhc2UgcG93KFByb2JCYXNlIGNvbnN0ICZhLCBpbnQgaSkgewogICAgIHJl
dHVyb3coYSwgKGRvdWJsZSlpKSk7CiB9OwoKCgoKCgogZnJpZW5kIGlubGluZSBkb3VibGUg
cG93X2RvdWJsZShQcm9iQmFzZSBjb25zdCAmLCBkb3VibGUpOwp9OwoKjĀ:CgbmxpbmUgZG91gICgodm9pZCkgKChhLnJldF9sb2coKSA9
PWEucmV0X2xvZygpKSA/IDAgOiAoX1NlcnRfZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRf
bG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAyNTQsIF9f
UFJFX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVybiBhLnJldF9sb2coKSAvIDAuNjkzMTQ3
MTgwNTU5OTQ1MzA5NDI7Cn0KCgoKCmlubGluZSBkb3VibGUKbG9nKFBCYXNlIGNvbnN0ICYg
YSkKCnsKICAoKHZvaWQpICgoYS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJhLnJldF9sb2coKWEucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMjY1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK
ICB1cm4gYS5yZXRfbG9nKCk7Cn0KCgoKCgppbmxpbmUgUHJvYkJhc2UKbWluKFByb2JCYXNl
IGNvbnN0ICYgYSwKICAgIFByb2JCYXNlIGNvbnN0ICYgYikKewogIC9pZCkgKChhLnJldF9s
b2coKSA9PWEucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygpID09
YS5yZXRfbG9nKCkiLCAiLi4vLi4vjĀ:c3L2ZyYW1ld29yZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKChiLnJldF9sb2coKSA9
PWjĀ:V0xvZygpKSA/ID09Yi5yZXRf
bG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1BybXRzLmgiLCAyNzgsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlmIChiLnJldF9sb2coKSA8IGEucmV0X2xvZygp
KQogICAgcmV0dXJuIGI7CiAgZWxgICAgcmV0dXJuIGE7Cn0KCgoKCmlubGluZSBQcm9iQmFz
ZQptYXgoUHJvYkJhc2UgY29uc3QgJiBhLAogICAgUHJvYkJhc2UgY29uc3QgJiBiKQp7CiAgKCh2
bSAoKGEucmV0X2xvZygpID09YS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
YS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9zZnJhbWV3b3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDI5MiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgKCh2b2lkKSAo
KGIucmV0X2xvZygpID09Yi5yZX9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYi5yZXRf
bG9nKCkgPT1iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1
jĀ:aCIDI5MywgX19QcmV0X2xvZygp
ID4gYS5yZXRfbG9nKCkpCiAgICByZXR1cm4gYjsKICBlbHNlCiAyZXR1cm4gYTsKfQoKCgpp
bmxpbmUgUHJvYkJhc2UKUHJvYkJhc2U6Om9wZXJhdG9yKj0oUHJvYkJhc2UgeCkKewogICgodm9p
ZCkgKCh2YWwgPT0gdmFsKSA/IiAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4v
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMDUsIF9fUFJFVFRZX0ZVTkNUjĀ:OXpLCAwKSkpOwovZygpKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZX9nKCkiLCAiLi4vLi4vLi4v
c3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwoKCgoKCiAgdmFsIHgudmFsOwogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9lsL1Byb2JHdXRzLmgiLCAzMTMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIFByb2JCYXNlICYKUHJvYkJhcjĀ:m9XJhdG9yLz0oYdmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ2YWwgPT0gdmFsIiwjĀ:uLuLy4uL3NyYy9BfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeC5yZXRfbGCkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9PXgu
cmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvbC9Qcm9iR3V0cy5oIiwgMzIx
LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoIXguaXNfemVybygpKSA/
IDAgOiAoX19hc3NlcnRfZmAoIiF4LmlzX3plcm8oKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDMyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CCgoKICAgIHZhbCAtPSB4LnZhbDsKICAoKHZvaWQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NjĀ:mctZXdvcmsvdXR5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gKnRoaXM7
Cn0KCgoKaW5saW5lIFBybXNlCm9wZXJhdG9yKihjb25zdCBQcm9iQmFzZSYgeGFyZywKICAg
ICAgICAgIGNvbnN0IFByb2JCYXNlJiB5KQp7CiAgUHJvYkJhc2UgeCA9eGFyZzsKICAoKHZvjĀ:
IoeC5yZXRfbG90X2ZhaWwgKCJ4LnJl
dF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL39mcmFtZXdvcmsvdXRpbC9Qcm9i
R3V0cy5oIiwgMzQwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5y
ZXRfbG9nKCkgPT15LnJlb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2co
KSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3Vo
IiwgMzQxLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICB4ICo9IHk7CiAgKCh2b2lkKSAo
KHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6I2Fzc2VydF9mYWlsICgieC5yZXRf
bG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1
dHMuaCIsIDM0MywgX19UVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlu
bGluZSBQcm9iQmFzZQpvcGVyYXRvci8oY29uc3QgUHJvYkJhc2UmIHhhcmcsCiAgICAgICBj
b25zdCBQcm9iQmFzZSYgeSkKewogIFByb2JCYXNlIHg9eGFyZzsKICAoKHZvaWQpICgoeC5yZXRf
bG9nKCkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNzX2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwg
MzUyLCBfX1BSRVRUWV5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PjĀ:mVX2xvZygpIiwgR3V0cy5oIiwgMzUzLCBf
X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICB4IC8jĀ:7CgKCh2b2lkKSAA6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14
LnJldF9sb2coKSIsIi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM1
NSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlubGlucm9i
QmFzZQpvcGVyYXRvcisoY29uc3QgUHJvYkJhc2UmIHgsCiAgICAgICAgICBjb25zdCBQcm9iQmFz
ZSYgeSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKSgucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGlsb2JHdXRzLmgiLCAzNjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19lcnRf
ZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCAzNjQsIF9fUFJFV0ZVTkNUSU9OX18pLCAwKSkpOwogIGlm
ICh4LmlzX3plcm8oKSkKICAgIHJldHVybiB5OwogIGVsc2UgaWYgKHkuaXNfemVybygpKQogICAg
cmV0dXJuIHg7CgojĀ:vdsZSB2YWwsIGRZhbCA9IHgudmFsOwogICAgZGlmID0geS52YWwgLSB4LnZhbDsKICB9IGVsc2UgewAgdmFs
ID0geS52YWw7CiAgICBkaWYgPSB4LnZhbCAtIHkudmFsOwogIH0KICAoKHZvaWQpICgoZGlmIDw9
IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZGlmIDAiLCAiLi4vLi4vLi4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCAzNzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoK
CgogIGlmICgtZGjĀ:wgJvYkJhc2U6OlyBleHAoZGlmKSk7CgoKCiAgUHJvYkJhc2UgUDsKICBQLnZhbCA9IHZhbDsKICAoKWQpICgo
UC5yZXRfbG9nKCkgPT1QLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJQLnJldF9s
b2coKSA9PVAucmV0X2xvZygpIiwgIi4uLy4uLy4yYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0
cy5oIiwgMzkwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gUDsKfQoKCmlu
bGluZSBQcm9iQjĀ:QpGVyYXRvci0oYdCBQcm9iQmFzZSYgeSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0jĀ:ZyKSA/
IDAgOiAyZXRfbG9nKCkiLCAiLi4vLi4v
Li4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXgiLCAzOTksIF9fUFJFVFRZX0ZVTkNUSU9O
X18pLCAwKSkpOwogICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAo
X19hc3NlcnRfjĀ:bCInkucmV0X2xv
L2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MDAsIF9fUFJFVFRZX0ZVTkNjĀ:OXpLCAw
KSkpOw4geDsKICB9CgogIFByb2JCYXNl
IHJldHVyblZhbHVlOwogIGlmIChhcHByb3hFcCAoeCwgeSkpIHsKICAgICAgcmV0dXJuVmFs
dWUuc2V0X2NvbnN0KFByb2JCYXNlOjpaZXJvKTsKICB9IGVsc2UgewogICAgICByZXR1cm5WYWx1
ZS52YWwgPSBiQmFzZTo6X2NhbGNMb2coZXhwKHgudmFsKSAtIGV4cCh5LnZhbCkpOwogIH0K
ICAoKHZvaWQpICgocmV0dXJuVmFsdWUucmV0X2xvZygpID09cmV0dXJuVmFsdWV0X2xvZygp
KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInJldHVyblZhbHVlLnJldF9sb2coKSA9PXJldHVyblZh
bHVlLnJldF9sb2coKSIsICIuLi8uLi8uLi9zZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIs
IDQxMSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHJldHVyblZhbHVlOwp9
CgppbmxpbmJvYkJhc2UgJgpQcm9iQmFzZTo6b3BlcmF0b3IrPShjb25zdCBQcm9iQmFzZSYg
eCkKewogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3NlcnRfZjĀ:CAnZhbCA9
PSB2L1Byb2JHdXRzLmgiLCA0MTgsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0
X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCki
LCAiLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MTksIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwoKICAqdGhpcyA9ICp0aGlzICsgeDsKICAojĀ:aWICgodmFs
ID0gPT0gdmFsIiwgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cywgNDIyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBQcm9iQmFzZSAmClByb2JCYXNlOjpvcGVy
YXRvci09jĀ:bnIFByb2JCYXNlMCA6
IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMjĀ:hb3b3JrL3V0
aWRJT05fXyksIDApKSk7CiAgKCh2b2lk
KSAoKHgucmV0X2xvZygpID09eC5yZXRfbCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5y
ZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMsIDQzMCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICp0aGlzID0gKnRo
aXMgLSB4OwogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3RfZmFpbCAoInZh
bCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MzMs
IF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwOwogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBj
bGFzcyBvc3RyZWFtICYKb3BlcmF0b3I8PChjbGFzcyBvc3RyZWFtICZvLFByb2JCYXNlIGNvbnN0
ICZwKQJldHVybiBwLnZhbGlkKCkgPyAobyA8PCBwLnJldF9kb3VibGUoKSkgOiAobyA8PCAi
Pz8iKTt9CgppbmxpbmUgaW50IG9wZXJhdG9yID09KGNvbnN0IFByb2JCYCYgeCxjb25zdCBQ
cm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6
IChfX2Fzc2VydF9mYWlsICgieC5yZXRnKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0MiwgX19QUkVUVFlfRlVOQ1RJT05fXyks
IDApKjĀ:Cgm9pZCkgKCh5L19hc3Nl
cnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyBy
ZXR1cm4geC5yZXRfbG9nKCkgPT0geSRfbG9nKCk7IH0KaW5saW5lIGludCBvcGVyYXRvciA8
PShjb25zdCBQcm9iQmFzZSAmIHgsY29uc3QgUHJvYkJhc2UgJiB5KSB7ICgodm9pZCkgKCh4LnJl
dF9sKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygp
ID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9sL1Byb2JHdXRzLmgi
LCA0NDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogKXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0
X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQzLCBf
X1BUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpIDw9IHkucmV0X2xv
ZygpOyB9CmlubGluZSBpbnQgb3BlcmF0b3IgPj0oY29uc3QgUHJvYkUgJiB4LGNvbnN0IFBy
b2JCYXNlICYgeSkgeyAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCJ4LnJlb2coKSA9PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCsgKCh2b2lkKSAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9sb2coKSIsICIuLjĀ:i8i9zcmMvZnJhbUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IHJl
dHVybiB4LnJldF9sb2coKSA+PSBjĀ:ldsb2coKTsgfQpJhc2UgJiB4LGNvbnN0IFByb2JCYXNlICYgeSkgeyAoKHZvaWQpICgoeC5yZXRf
bCkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvbC9Qcm9iR3V0cy5oIiwg
NDQ1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgKCh2b2lkKSAoKHkucmV0X2xvZygpID09
eS5yZXRfbG9nKCkpID8gMCA6ICFzc2VydF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9s
b2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0NSwgX19Q
jĀ:VFRlVOQ1RJT05fcmV0X2xvZygp
OyB9CmlubGluZSBpbnQgb3BlcmF0b3IgPihjb25zdCBQcm9iQmFmIHgsY29uc3QgUHJvYkJh
c2UgJiB5KSB7ICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0XygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpoKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIiwgNDQ2LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJu
IHgucmV0X2xvZygpID4geS5ybG9nKCk7IH0KaW5saW5lIGludCBvcGVyYXRvciAhPShjb25z
dCBQcm9iQmFzZSAmIHgsY29uc3QgUHJvYkJhc2UgJiB5KSB7ICgodm9pZCkgKCh4LnJldF9sb2cA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5y
ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91djĀ:1B2JHdXRzLmgiLOyAoKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15LnJl
dF9sb2coKSkgPyAwIDogKF9zZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xvZygp
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQ3LCBfX1BSRVV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpICE9IHkucmV0X2xvZygpOyB9
CgoKCmlubGluZSBpbnQKYXBwcm94RXF1YWwoUHJvYkJhc2Ugc3QgJiBhLCBQcm9iQmFzZSBj
b25zdCAmIGIpCgp7CiAgKCh2b2lkKSAoKGEucmV0X2xvZygpID09YS5yZXRfbG9nKCkpID8gMCA6
IChfX2Fzc2VydF9mYWlsIC5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ1NSwgX19QUkVUVFlfRlVOQ1RJT05fXIDApKSk7CiAgKCh2b2lkKSAoKGIucmV0X2xvZygpID09Yi5yZXRfbG9nKCkpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiYi5yZXRfbG9nKCkgPT1iLnJldF9sb2cjĀ:sIuLi8uLi8uLi9Q1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgaWYgKGEuaXNfemVybjĀ:CYGIuaXNfemVybICByZXR1cm4gKGEudmFsLWIudmFsKSA8IFByb2JCYXNlOjpfYXBwcm94RGlmZigp
IGVsc2UKICAgIHJldHVybiAoYi52YWwtYS52YWwpIDwgUHJvYkJhc2U6Ol9hcHByb3hEaWZmKCk7
Cn0KCgppbmxpbmUgaW50CmFwcHJveEVxdWFsIChQcm9iQmBjb25zdCAmYSwgZnJvbV9kb3Vi
bGUgY29uc3QgJmIpCnsgUHJvYkJhc2UgdG1wOwogICAgdG1wLnNldF9kb3VibGUoYi52YWwpOwog
ICAgcmV0dXJuIGFwcHJvjĀ:dWIChhLCB0bXAptX2RvdWJsZSBjb25zdCAmYiwgUHJvYkJhc2UgY29uc3QgJmEpCnsgUHJvYkJhc2UjĀ:w
ogICAgdG1wLnJveEVxdWFsIChhLHRt
cCk7Cn0KCmlubGluZSBQcm9iQmFzZQpwb3coUHJvYkJhcjĀ:293QgJmEsIGRvdaWQpICgoYS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSkg
PyAwIDogKF9fYXNzZXJhaWwgKCJhLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4uLy4u
Ly4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDg1LCBfX1BSRVRUWV9GVUlP
Tl9fKSwgMCkpKTsKICBpZiAociA+PSAwLjApCiAgeyB0bXAuc2V0X2xvZyhhLnZhbCAqIHIpOwog
ICAgICAoKHZvaWQpICgodG1wLnJldF9sb2coKSA9PXRtZXRfbG9nKCkpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgidG1wLnJldF9sb2coKSA9PXRtcC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dGByb2JHdXRzLmgiLCA0ODgsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwogICAgICByZXR1cm4gdG1wOwogIH0KCiAgdG1wLnNldF9sb2coUHJvYkJhc2U6O2dJ
bnZhbGlkKCkpOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBkb3VibGUKcG93X2RvdWJsZShQcm9i
QmFzZSBjb25zdCAmYSwgZG91YmxlIHIpCgp7CiAgKChkKSAoKGEucmV0X2xvZygpID09YS5y
ZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYS5yZXRfbG9nKCkgPT1hLnJldF9sb2co
KSIsICIuLi8uLi8uLmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDUwMCwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgZG91YmxlIHg7CiAgaWYgKHIgPj0gMC4wKSB7ICB4
ID0gKGEudmFsICogcik7CiAgICBpZiAoeCA8IFByb2JCYXNlOjpfbG9nRXBzaWxvbigpKSB7Cgog
ICAgICByZXR1cm4oUHJvYkJhc2U6OnJldF9lcHNpbGkpOwogICAgfQogICAgcmV0dXJuKGV4
cCh4KSk7CiAgfQoKICB4ID0gKGEudmFsICogcik7CiAgaWYgKHggPiAtUHJvYkJhc2U6Ol9sb2dF
cHNpbG9uKCkpIHsKICAgIHJldHVybigtUHJvYkJhc2U6OnJldF9lcHNpbG9uKCkpOwogIH0K
ICByZXR1cm4oZXhwKHgpKTsKfQojIDUzMSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9sL1By
b2JHdXRzLmgiCmNsYXNzIFByb2IgOiBwdWJsaWMgUHJvYkJhc2UgewpwdWJsaWM6CgoKCiAgc3Rh
dGljIGNvbnN0IFByb2IgWkVSTzsKCgoKCiAgc3RhdGNvbnN0IFByb2IgT05FOwoKICBpbmxp
bmUgUHJvYihjb25zdCBTaG9ydFByb2IgcCk7CiAgaW5saW5lIFByb2IoUHJvYkJhc2UgY29uc3Qg
JiBPdGhlclByb2IKICAgICgodm9pZCkgKChPdGhlclByb2IucmV0X2xvZygpID09T3RoZXJQ
cm9iLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJPdGhlclByb2IucmxvZygp
ID09T3RoZXJQcm9iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIsIDU0NSwgX19QUkVUVFlfRlVOQ1RJXyksIDApKSk7CiAgICBzZXRfbG9nIChP
dGhlclByb2IucmV0X2xvZygpKTsKICB9CiAgaW5saW5lIFByb2Iodm9pZCkge3NldF9sb2cgKFBy
b2JCYXNlOjpfbGjĀ:VygpKTt9CiAgaW3NldF9kb3VibGUgKFByb2JWYWwudmFsKTt9CiAgaW5saW5lIFByb2IoZnJvbV9sbG9nVmFs
KSB7c2V0X2xvZyAobG9nVmFsLnZhbCk7fQogIGlubGluZSBQcm9iKENvbnN0UHJvYiBjKSB7c2V0
X2NvbnN0IChjKTt9CnByaXZhdGU6CgoKICBpbmxgUHJvYiAoY29uc3QgZG91YmxlIGQpIHso
KHZvaWQpICgoMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIwIiwgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpbm9iR3V0cy5oIiwgNTU1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTt9
Cn07CiMgMTAyICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIiAyMTE2ICIu
Li8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIgojIDI2ICIuLi8uLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIgMQpjbGBQcm9iOwpjbGFzcyBTaG9ydFByb2I7CiMg
MzkgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpjbGFzcyBTaG9ydFBy
b2JCYXNlCnsKbGljOgoKICB0eXBlZGVmIGVudW0ge09uZT0xLCBVbml0eSA9IE9uZSwgWmVy
byA9IDAsSW52YWxpZCA9IC0xfSBDb25zdFByb2I7Cgpwcm90ZWN0ZWQ6CgogIGZ0IHZhbDsK
IyA3MiAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiCiAgc3RhdGljIGlu
bGluZSBmbG9hdCBfbG9nVmFsaWQodm9pZCkgeHVybiAtMWUzNzt9CiAgc3RhdGljIGlubGlu
ZSBmbG9hdCBfbG9nSW52YWxpZCh2b2lkKSB7cmV0dXJuIC0yZTM3O30KICBzdGF0aWMgaW5saW5l
IGZsb2F0IF9aZXJvKHZvaWQpIHtyZXR1cm4gLTJlMzU7fQogIHN0YXRpYyBpbmxpbmUgZmxv
YXQgX2xvZ0Vwc2lsb24odm9pZCkge3JldHVybiAtNzA4O30KCgoKCiAgc3RhdGlubGluZSBm
bG9hdCBfbWF4RGlmZih2b2lkKSB7cmV0dXJuIDE2LjY7fQoKCgoKCiAgc3RhdGljIGlubGluZSBm
bG9hdCBfYXBwcm94RGlmZih2b2lkKSB7cmV0jĀ:IDLTc7fQogIHN0lIHYpCiAgewogICAgICAgIHJldHVybiAodiA8IHJldF9lcHNpbG9u
KCkpID8gX2plcm8oKSA6IGxvZyh2KTsKICB9CnB1YmxpYzoKIyAxMDAgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgogIHN0YXRpYyBkb3VibGUgcjĀ:2V2lsb24o
dm9pLy4uL3NyYy9mcmFtZXdvcmsvdXRp
bC9Qcm9iR3V0cy5oIgogIGludCB2YWxpZChjĀ:kKjb25zdCB7CiAYmICh2YWwgPT0gdmFsKTsKICB9CgoKCgoKCiAgaW50IG5vbl9wcm9i
KHZvaWQpInN0IHtyZXR1cm4gIXZhbGlkKCkgfHwgdmFsID4gMC4wO30KCgoKCiAgaW50IGlz
X3plcm8odm9pZCkgY29uc3Qge3JldHVybiAodmFsIDw9IF9sb2daZXJvKCkpjĀ:CgCiAgaW50
IGlwO30KCgoKCiAgZG91YmxlIHJldF9s
b2codm9pZCkgY29uc3Qge3JldHVybiB2YWoKCgoKICBkb3VibGUgcmV0X2RvdWJsZSh2b2lk
KSBjb25zdAogICAge3JldHVybiAodmFsIDwgX2xvZ0Vwc2lsb24oKSkgPyAwLjAgOiBleHAodmFs
KTt9CgoKjĀ:IHaWQgc2V0X2xvdmFs
ID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwjĀ:uLuLy4uL3Ny
YyBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTt9CgoKCgogIHZvaWQgc2V0X2RvdSAoZG91YmxlIGYpIHt2YWwgPSBfY2FsY0xvZyhm
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2
YWwpID8jĀ:6IfX2Fzc2VydF9vZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDE1MCwgX19QUkVUVFlfRlVOQ15fXyksIDApKSk7
fQoKCgoKCiAgdm9pZCBzZXRfY29uc3QgKENvbnN0UHJvYiBjKSB7CiAgICAgIHNldF9sb2cgKGMg
PT0gT25lID8gMCA6IGMgPT0gWmVybyA/jĀ:ICICAgICAgICAggICAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9m
YWlsICFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMu
aCIsIDE1OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgfQoKCgoKICBkb3VibGUg
ZW50cm9weSh2b2lkKSBjb25zdCB7cmV0dXJuICgtKHJldF9kb3VibGUoKSAqIHZhbCkpOyB9OwoK
CgoKCgogIFNob3J0UHJvYkJhc2Ugb3B0b3J+KHZvaWQpIGNvbnN0IHsKICAgICAgKCh2b2lk
KSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8u
Li8uLmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDE3NiwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgICAgIFNob3J0UHJvYkJhc2UgeDsKICAgICAgZXRfZG91YmxlKDEu
MC1yZXRfZG91YmxlKCkpOwogICAgICAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2co
KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWJ4LnJldF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMTc5LCBfX1BSRVRUWV9GVU5D
VElPjĀ:KSMCkpKTsKICAgb3J0UHJv
YkJhc2Ugb3BlcmF0b3IqPShTaG9ydFByb2JCYXNlIHgpOwoKCgoKIGluZSBTaG9ydFByb2JC
YXNlICYgb3BlcmF0b3IvPShjb25zdCBTaG9ydFByb2JCYXNlJiB4KTsKCgoKCiBpbmxpbmUgU2hv
cnRQcm9iQmFzZSAmIG9wZXJhdG9yKjĀ:293QgU2hvcnRQcYkJhc2UgJiBvcGVyYXRvci09KGNvbnN0IFNob3J0UHJvYkJhc2UmIHgpOwoK
CgoyaWVuZCBpbmxpbmUgU2hvcnRQcm9iQmFzZSBvcGVyYXRvciooY29uc3QgU2hvcnRQcm9i
QmFzZSYsY29uc3QgU2hvcnRQcm9iQmFzZSYpOwogZnJpZW5kIGlubGBTaG9ydFByb2JCYXNl
IG9wZXJhdG9yLyhjb25zdCBTaG9ydFByb2JCYXNlJixjb25zdCBTaG9ydFByb2JCYXNlJik7CiBm
cmllbmQgaW5saW5lIFNob3J0UHJvc2Ugb3BlcmF0b3IrKGNvbnN0IFNob3J0UHJvYkJhc2Um
LGNvbnN0IFNob3J0UHJvYkJhc2UmKTsKIGZyaWVuZCBpbmxpbmUgU2hvcnRQcm9iQmFzZSBvcGVy
YX0oY29uc3QgU2hvcnRQcm9iQmFzZSYsY29uc3QgU2hvcnRQcm9iQmFzZSYpOwojIDIyMCAi
Li4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiCmllbmQgaW5saW5lIGlu
dCBhcHByb3hFcXVhbChTaG9ydFByb2JCYXNlIGNvbnN0ICYsU2hvcnRQcm9iQmFzZSBjb25zdCAm
KTsKCgoKCgoKIGZyaWVuZCBpbmxjĀ:gUvcnRQcm9iQmFVibGUpOwoKCgoKCiBmcmllbmQgaW5saW5lIFNob3J0UHJvYkJhc2UgcG93KFNo
bHJvYkJhc2UgY29uc3QgJmEsIGludCBpKSB7CiAgICAgcmV0dXJuKHBvdyhhLCAoZG91Ymxl
KWkpKTsKIH07CgoKCgoKCiBmcmllbmQgaW5saW5lIGRvdWJsZSBwZG91YmxlKFNob3J0UHJv
YkJhc2UgY29uc3QgJiwgZG91YmxlKTsKfTsKCgoKCgoKaW5saW5lIGRvdWJsZQpsb2cyKFNob3J0
UHJvYkJhc2UgY29uc3QgJiBhKQogICgodm9pZCkgKChhLnJldF9sb2coKSA9PWEucmV0X2xv
ZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRfbG9nKCkiLCAi
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAyNTQsIF9fUFJFVFRZX0ZV
TkNUSU9OX18pLCAwKSkpOwogIHJldHVybiBhLnJldF9sb2coKSAuNjkzMTQ3MTgwNTU5OTQ1
MzA5NDI7Cn0KCgoKCmlubGluZSBkb3VibGUKbG9nKFNob3J0UHJvYkJhc2UgY29uc3QgJiBhKQoK
ewogICgodm9pZCkgKChhLnJld2coKSA9PWEucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y1dGlsL1Byb2JHdXRzLmgiLCAyNjUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJl
dHVybiBhLnJldF9sb2coKTsKfQoKCgoKCmlubGluZSBTaG9ydFjĀ:JCNlCm1pbihTaGHJvYkJhc2UgY29uc3QgJiBiKQp7CiAgKCh2b2lk
KSAoKGEucmV0X2xvZygpID09jĀ:ZXbG9nKCkpID8ggPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJd1dHMuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgKCh2b2lkKSAoKGIu
cmV0X2xvZygpID09Yi5yZXRfbG9nKCkpID8gMCA6IChfX2FzcF9mYWlsICgiYi5yZXRfbG9n
KCkgPT1iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMu
aCIsIDI3OCwgX19QUkVUVFljĀ:OQJT05fXyksIDA9nKCkpCiAgICByZXR1cm4gYjsKICBlbHNlCiAgICByZXR1cm4gYTsKfQoKCgoKaWW5lIFNob3J0UHJvYkJhc2UKbWF4KFNob3J0UHJvYkJhc2UgY29uc3QgJiBhLAogICAgU2hvcnRQ
cm9iQmFzZSBjb25zdCAmIGIpCnsKICAoKHZvaWQpICgoYS5yjĀ:bGKCkgPT1hLnJlhLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXsvdXRpbC9Qcm9iR3V0cy5oIiwgMjkyLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoYi5yZXRfbG9nKCkgPT1iLnJldF9sb2coKSkgPIDogKF9fYXNzZXJ0X2ZhaWwgKCJiLnJldF9sb2coKSA9PWIucmV0X2xvZygpIiwgIi4uLy4uLy4u
L3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMjkfX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKICBpZiAoYi5yZXRfbG9nKCkgPiBhLnJldF9sb2coKSkKICAgIHJldHVybiBiOwog
IGVsc2UKICAgIHJldHVybwp9CgoKCmlubGluZSBTaG9ydFByb2JCYXNlClNob3J0UHJvYkJh
c2U6Om9wZXJhdG9yKj0oU2hvcnRQcm9iQmFzZSB4KQp7CiAgKCh2b2lkKSAoKHZhbCA9PSB2
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDMwNSwgX19QUkVUVFVOQ1RJT05fXyksIDApKSk7CiAg
KCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWls
ICgieC5yZXRfbG9nKCkgjĀ:LndF9sb2coKSIsvYkd1dHMuaCIsIDMwNiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgoKCgo2
YWwgKz0geC52YWw7CiAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYWls
ICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhb3JrL3V0aWwvUHJvYkd1dHMuaCIs
IDMxMywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUgU2hvcnRQcm9iQmFmClNob3J0UHJvYkJhc2U6Om9wZXJhdG9yLz0oY29uc3QgU2hvcnRQ
cm9iQmFzZSYgeCkKewogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3NlcnFp
bCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgi
LCAzMjAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpICgodm9pZCkgKCh4LnJldF9sb2co
KSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5y
ZXRfbG9nKCkiLCAiLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMjEs
IF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKCgheC5pc196ZXJvKD8g
MCA6IChfX2Fzc2VydF9mYWlsICgiIXguaXNfemVybygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdv
cmsvdXRpbC9Qcm9iR3V0cy5oIiwgMzIyLCBfX1BSRVRjĀ:GVDVElPTl9fKSwgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoInZhbSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JH
dXRzLmgiLCAzMjksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVybiAqczsK
fQoKCgppbmxpbmUgU2hvcnRQcm9iQmFzZQpvcGVyYXRvciooY29uc3QgU2hvcnRQcm9iQmFzZSYg
eGFyZywKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYkUmIHkpCnsKICBTaG9ydFByb2JCYXNl
IHggPXhhcmc7CiAgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChf
X2Fzc2VydF9mYWlseC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMv
ZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM0MCwgX19QUkVUVFlfRlVOQ1RJT05sIDAp
KSk7CiAgKCh2b2lkKSAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9sbSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM0MSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
eCAqPSB5OwogICgpZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLiJjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzNDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogIHJldHVybiB4Owp9CgppbmxpbmUgU2hvcnRQQmFzZQpvcGVyYXRvci8oY29uc3QgU2hv
cnRQcm9iQmFzZSYgeGFyZywKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYkJhc2UmIHkpCnsKICBT
aG9ydFByb2JCYXjĀ:g9FyZzsKICAoKHSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9PXgucmV0X2xvZiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMzUyLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5jĀ:fbnKCkgPT15LnJJ5LnJldF9sb2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4u
L3NyYy9mcmFtZmsvdXRpbC9Qcm9iR3V0cy5oIiwgMzUzLCBfX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKICB4IC89IHk7CiAgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5ybG9nKCkp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkMuaCIsIDM1NSwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlubGluZSBTaG9ydFByb2JCYXNlCm9wZXJhdG9y
Kyhjb25zdCBTjĀ:dFb2JCYXNlJiB4
eSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAoX19hc3Nl
cnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCAzNjMsIjĀ:FJFRZX0ZVTkNUSb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoInkucmVvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91
dGlsL1Byb2JHdXRzLmgiLCAzNjQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSogIGlmICh4
LmlzX3plcm8oKSkKICAgIHJldHVybiB5OwogIGVsc2UgaWYgKHkuaXNfemVybygpKQogICAgcmV0
dXJuIHg7CgogIGRvdWJsZSB2YWwsIGRpZjsKaWYgKHgudmFsID4geS52YWwpIHsKICAgIHZh
bCA9IHgudmFsOwogICAgZGlmID0geS52YWwgLSB4LnZhbDsKICB9IGVsc2UgewogICAgdmFsID0g
eS52YWw7CiBkaWYgPSB4LnZhbCAtIHkudmFsOwogIH0KICAoKHZvaWQpICgoZGlmIDw9IDAp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZGlmIDw9IDAiLCAiLi4vLi4vLi4vcjĀ:2ZW1ld29y
ay91TkNUSU9OX18pLCAwKSkpOwoKCgog
IGlmICgtZGlmIDwgU2hvcnRQcm9iQmFzZToheERpZmYoKSkKICAgIHZhbCArPSBsb2cgKDEu
MCArIGV4cChkaWYpKTsKCgoKICBTaG9ydFByb2JCYXNlIFA7CiAgUC52YWwgPSB2YWw7CiAgKCh2
b2lkKSAoKmV0X2xvZygpID09UC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
UC5yZXRfbG9nKCkgPT1QLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhb3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDM5MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIFA7
Cn0KCgppbmxpbmUgU2hvcnRQcm9iQmFzZQVyYXRvci0oY29uc3QgU2hvcnRQcm9iQmFzZSYg
eCwKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYkJhc2UmIHkpCnsKICAoKHZvaWQpICgoeC5yZXRf
bG9nKCkgLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9iR3V0cy5oIiwg
Mzk5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogKF9fYXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0
X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDAwLCBf
X1BSRVRGVU5DVElPTl9fKSwgMCkpKTsKICBpZiAoeS5pc196ZXJvKCkpIHsKICAgICAgcmV0
dXJuIHg7CiAgfQoKICBTaG9ydFByb2JCYXNlIHJldHVyblZhbHVlOwogIGhhcHByb3hFcXVh
bCAoeCwgeSkpIHsKICAgICAgcmV0dXJuVmFsdWUuc2V0X2NvbnN0KFNob3J0UHJvYkJhc2U6Olpl
cm8pOwogIH0gZWxzZSB7CiAgICAgIHJlblZhbHVlLnZhbCA9IFNob3J0UHJvYkJhc2U6Ol9j
YWxjTG9nKGV4cCh4LnZhbCkgLSBleHAoeS52YWwpKTsKICB9CiAgKCh2b2lkKSAoKHJldHVyblZh
bHVlLnjĀ:9scoKSA9PXJldHJ0X2Zh
aWwgKCJyZXR1cm5WYWx1ZS5yZXRfbG9nKCkgPT1yZXR1cm5WYWx1ZS5yZG9nKCkiLCAiLi4v
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MTEsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwogIHJldHVybiBjĀ:1cWYWx1ZTsKfQoJCYXNlOjpvcGVyYXRvcis9KGNvbnN0IFNob3J0UHJvYkJhc2UmIHgpCnsK
ICAoKWQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFs
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oNDE4LCBfX1BSRVRU
WV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2co
KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWJ4LnJldF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDE5LCBfX1BSRVRUWV9GVU5D
VElPjĀ:KSMCkpKTsKCiAgbCA9PSB2
YWwpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgcmV0dXJuICp0aGlzOwp9CgppbjĀ:mU2hvcnRQcm9iQY29uc3QgU2hvcnRQcm9iQmFzZSYgeCkKewogICgodm9pZCkgKCh2YWwgPT0g
dmFjĀ:/IgOiAoX19hc3Nvc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MjksIF9fUFJFVFRZX0NUSU9OX18pLCAwKSkp
OwogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoIngucmV0X2xvZygpID09ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCA0MzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAq
dGjĀ:A9p0aGlzIC0geD9fYXNzZXJ0
X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NyYy9mcmFtZmsvdXRpbC9Qcm9iR3V0
cy5oIiwgNDMzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gKnRoaXM7Cn0K
CgppbmxpbmUgY2xhc3Mgb3N0cmVmCm9wZXJhdG9yPDwoY2xhc3Mgb3N0cmVhbSAmbyxTaG9y
dFByb2JCYXNlIGNvbnN0ICZwKQp7IHJldHVybiBwLnZhbGlkKCkgPyAobyA8PCBwLnJldF9kb3Vi
bSkgOiAobyA8PCAiPz8iKTt9CgppbmxpbmUgaW50IG9wZXJhdG9yID09KGNvbnN0IFNob3J0
UHJvYkJhc2UgJiB4LGNvbnN0IFNob3J0UHJvYkJhc2UgJiB5KSB7jĀ:dmZCkgKCh4LnJlhc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09
eC5yZXRfbG9nKCkiLCAiLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0
NDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15
dF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xv
ZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm90cy5oIiwgNDQyLCBfX1BS
RVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpID09IHkucmV0X2xvZygp
OyB9CmlubGluZSBpbnQgb3Blc3IgPD0oY29uc3QgU2hvcnRQcm9iQmFzZSAmIHgsY29uc3Qg
U2hvcnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpjĀ:gM6IChfX2Fzc2VoKSIsICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoInkuX2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAkpOyByZXR1cm4geC5yZXRfbG9nKCkgPD0geS5yZXRfbG9nKCk7IH0KaW5saW5lIGludCBvcGVy
YXRvciA+PShjb25zdCBTaG9ydFByb2JCYXNlICYgeCxjb25zdjĀ:G9FByb2JCYXNlILnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ4LnJldF9sb2coKSAjĀ:uc0X2xvZygpIiw9iR3V0cy5oIiwgNDQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgKCh2b2SAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieS5y
ZXRfbG9nKCkgPT15LnJldF9sb2coKSIsICIuLi8uLi8uLi9zZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIsIDQ0NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IHJldHVybiB4LnJldF9s
b2coKSA+PSB5LnJldF9sb2sgfQppbmxpbmUgaW50IG9wZXJhdG9yIDwoY29uc3QgU2hvcnRQ
cm9iQmFzZSAmIHgsY29uc3QgU2hvcnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0XZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14
LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JjĀ:0avUHJvYkd1dHMApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXku
cmV0X2xvZygpKSA/IDAgO19hc3NlcnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9n
KCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDUsIF9f
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOyByZXR1cm4geC5yZXRfbG9nKCkgPCB5LnJldF9sb2coKTsg
fQppbmxpbmUgaW50IG9wZXJhdG9yID4oY29uc3QgU2hvcn9iQmFzZSAmIHgsY29uc3QgU2hv
cnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8g
MCA6IChfX2Fzc2VydF9mjĀ:ICeC5yZXRfbG9nvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0NiwgX19QUkVUVFlfRlVOQ1Rf
XyksIDApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OyByZXR1cm4geC5yZXRjĀ:nKgPiB5LnJldF9NvbnN0IFNob3J0UHJvYkJhc2UgJiB4LGNvbnN0IFNob3J0UHJvYkJhc2UgJiB5KSgo
dm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
IngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vc3JjL2ZyYW1ld29yay91dGls
L1Byb2JHdXRzLmgiLCA0NDcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgo
eS5yZXRfbG9nKCkgPTJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9s
b2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9QcjĀ:3Vcy5oIiwgNDQ3dXJuIHgucmV0X2xvZygp
ICE9IHkucmV0X2xvZygpOyB9CgoKCmlubGluZSBpbnQjĀ:wc4RXF1YWwoU2hJhc2UgY29uc3QgJiBiKQoKewogICgodm9pZCkgKChhLnJl
dF9sb2coKSA9PWEuc2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygp
ID09YS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHLmgi
LCA0NTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKChiLnJldF9sb2co
KSA9PWIucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnFpbCAoImIucmV0X2xvZygpID09Yi5y
ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NTYs
IF9fUFJFVFRZX0ZVSU9OX18pLCAwKSkpOwogIGlmIChhLmlzX3plcm8oKSAmJiBiLmlzX3pl
cm8oKSkKICAgIHJldHVybiAxOwogIGlmIChhPj1iKQogICAgcmV0dXJuIChhLnZhbC1hbCkg
PCBTaG9ydFByb2JCYXNlOjpfYXBwcm94RGlmZigpOwogIGVsc2UKICAgIHJldHVybiAoYi52YWwt
YS52YWwpIDwgU2hvcnRQcm9iQmFzZTo6X2FwcHJvemYoKTsKfQoKCmlubGluZSBpbnQKYXBw
cm94RXF1YWwgKFNob3J0UHJvYkJhc2UgY29uc3QgJmEsIGZyb21fZG91YmxlIGNvbnN0ICZiKQp7
IFNob3J0UHJvYkJgdG1wOwogICAgdG1wLnNldF9kb3VibGUoYi52YWwpOwogICAgcmV0dXJu
IGFwcHJveEVxdWFsIChhLCB0bXApOwp9CgppbmxpbmUgaW50CmFwcHJveEVxdWFsIC9tX2Rv
dWJsZSBjb25zdCAmYiwgU2hvcnRQcm9iQmFzZSBjb25zdCAmYSkKeyBTaG9ydFByb2JCYXNlIHRt
cDsKICAgIHRtcC5zZXRfZG91YmxlKGIudmFsKTsKjĀ:IHdHVybiBhcHByQcm9iQmFzZQpwb3coU2hvcnRQcm9iQmFzZSBjb25zdCAmYSwg
ZG91YmxlIHIpCgAgU2hvcnRQcm9iQmFzZSB0bXA7CiAgKCh2b2lkKSAoKGEucmV0X2xvZygp
ID09YS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYS5yZXRfbG9nKT1hLnJl
dF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ4NSwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgKHIgPj0gMC4wKQogIHsgdG1wLnNldF9s
b2coYS52YWwgKiByKTsKICAgICAgKCh2b2lkKSAoKHRtcC5yZXRfbG9nKCkgPT10bXAucmV0X2xv
ZygpKSA/IDAgO19hc3NlcnRfZmFpbCAoInRtcC5yZXRfbG9nKCkgPT10bXAucmV0X2xvZygp
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDg4X1BSRVRU
WV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgcmV0dXJuIHRtcDsKICB9CgogIHRtcC5zZXRfbG9n
KFNob3J0UHJvYkJhc2U6Ol9sb2dJbnZhbGlkKCogIHJldHVybiB0bXA7Cn0KCmlubGluZSBk
b3VibGUKcG93X2RvdWJsZShTaG9ydFByb2JCYXNlIGNvbnN0ICZhLCBkb3VibGUgcikKCnsKICAo
KHZvaWQpICgoZXRfbG9nKCkgPT1hLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCJhLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFjĀ:vcvdXRp
bC9Qcm9fKSwgMCkpKTsKICBkb3VibGUg
eDsKICBpZiAociA+PSAwLjApIHsKICAgIHggPjĀ:S5WwgKiByKTsKIc2lsb24oKSkgewoKICAgICAgcmV0dXJuKFNob3J0UHJvYkJhc2U6
OnJldF9lcHNuKCkpOwogICAgfQogICAgcmV0dXJuKGV4cCh4KSk7CiAgfQoKICB4ID0gKGEu
dmFsICogcik7CiAgaWYgKHggPiAtU2hvcnRQcm9iQmFzZTo6X2xvZ0Vwc2lsb2kgewoKICAg
ICAgcmV0dXJuKC1TaG9ydFByb2JCYXNlOjpyZXRfZXBzaWxvbigpKTsKICB9CiAgcmV0dXJuKGV4
cCh4KSk7Cn0KIyA1MzEgIi4uLy4uLy4uL3NycmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpj
bGFzcyBTaG9ydFByb2IgOiBwdWJsaWMgU2hvcnRQcm9iQmFzZSB7CnB1YmxpYzoKCgoKICBzdGF0
aWMgY29uc3jĀ:hvRQcm9iIFpFUk5F
OwoKICBpbmxpbmUgU2hvcnRQcm9iKGNvbnN0IFByb2IgcCk7CiAgaW5saW5lIjĀ:3JHJvYihT
aG9yICAoKHZvaWQpICgoT3RoZXJQcm9i
LnJldF9sb2coKSA9PU90aGVyUHJvYi5yZXRnKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
T3RoZXJQcm9iLnJldF9sb2coKSA9PU90aGVyUHJvYi5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ldy91dGlsL1Byb2JHdXRzLmgiLCA1NDUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwogICAgc2V0X2xvZyAoT3RoZXJQcm9iLnJldF9sb2coKSk7CiAgfQogjĀ:bGZSBTaG9y
dFB6Ol9sb2daZXJvKCkpO30KICBpbmxp
bmUgU2hvcnRQcm9iKGZyb21fZG91YmxlIFJWYWwpIHtzZXRfZG91YmxlIChQcm9iVmFsLnZh
bCk7fQogIGlubGluZSBTaG9ydFByb2IoZnJvbV9sb2cgbG9nVmFsKSB7c2V0X2xvZyAobG9nVmFs
LnZhbCk7jĀ:IGbGluZSBTaG9yO30K
cHJpdmF0ZToKCgogIGlubGluZSBTaG9ydFByb2IgKGNvbnN0IGRvdWJsZSBjĀ:7K2b2lkKSAo
KD8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0
aWwvUHJvYkd1dHMuaCIsIDU1NSwgX19QUjĀ:FllVOQ1RJT05fXL2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMgoKCgoKCgoKaW5saW5lIFBy
b2I6OlBoY29uc3QgU2hvcnRQcm9iIHApIHsKICAoKHZvaWQpICgocC5yZXRfbG9nKCkgPT1w
LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJwLnJldF9sb2A9PXAucmV0X2xv
ZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiLCAxMjQsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwogIHNlb2cgKHAucmV0X2xvZygpKTsKICAoKHZvaWQpICgo
dmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4u
L3NyYyjĀ:FtdvcmsvdXRpbC8pLCAw
KSkpOwp9CmlubGluZSBTaG9ydFByb2I6OlNob3J0UHJvYihjb25zdCBQcjĀ:HAHsKICAoKHZv
PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJw
LnJldF9sb2coKSA9PXAucmV0X2xvZygjĀ:gIuLy4uLy4uL3N9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNldF9sb2cgKHAucmV0
X2xvZTsKICAoKHZvaWQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2
YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9QLmgiLCAxMzEsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwp9CgojIDE5ICJQcm9iTWF0cml4LmgiIDIKCiMgMjAg
Ii4uLy4uLy4uL3NyYy9mcmFtZXdvcmAtc3RydWN0cy9Qcm9iQXJyYXkuaCIgMQojIDU4ICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fz
c2VyYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5jĀ:fbuZSwgX19jb25gpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgpleHRlcm4gdm9pZ2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVt
LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVjĀ:nbkIGludCBfX2xgICAgICBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX1RyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBjb25zdCBjaGFyICpfjĀ:bGIGludCBfX2xpoKF9fbm9yZXR1cm5fXykpOwoKCn0KCiMgMjAgIi4uLy4uLy4uL3NyYy9mcmFt
ZXjĀ:svAtc3RydWN0cyMvZnJhbWV3
b3JrL3V0aWwvTWVtSW5mby5oIiAxCiMgMzggIi91c3IvbGliL2djYWIvaTM4Ni1yZWRoYXQt
bGludXgvMi45Ni9pbmNsdWRlL3R5cGVpbmZvIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInR5cGVp
bmZvIgojIDM4ICIvdXNyL2xpYi9jĀ:tbiL2kzODYtcmVIgMwoKCgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4
LTYvaW5jbHVkZS9leGNlcHRpb24iIDEgMwojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9u
IgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpLzIuOTYvaW5jbHVkZS9l
eGNlcHRpb24iIDMKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNl
cHRpb24gewpwdWJsaWM6CiAgZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAo
KSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRf
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgp
IHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn00eXBlZGVmIHZvaWQgKCp0
ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikg
KCk7Cgp0ZXJtaW5hdGVfaGFuZiBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7
CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBllZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVu
ZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cmkpOwpib29sIHVuY2F1Z2h0
X2V4Y2VwdGlvbiAoKTsKCn0KCn0KCiMgNDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt
bGludXgvMi45Ni9pbmNsdWRlcGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgoKCgoKCgoK
bmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyB0eXBlX2luZm8gewpwdWJsaWM6CgoKCgogIHZpcnR1YWwjĀ:R5VfaW5mbyAoKTI9IChjb25zdCB0
eXBlX2luZm8mKTsKICB0eXBlX2luZm8gKGNvbnN0IHR5cGVfayYpOwoKcHJvdGVjdGVkOgog
IGNvbnN0IGNoYXIgKl9fbmFtZTsKCnByb3RlY3RlZDoKICBleHBsaWNpdCB0eXBlX2luZm8gKGNv
bnN0IGNoYXIgKl9fbik6IF9jĀ:tZoX19uKSB7IH0N0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKICBjb25zdCBjaGFyKiBuYW1lICgpIGnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0OwogIGJvb2wgb3BlcmF0b3IhjĀ:Y2c3QgdHlwZV9pvcGVyYXRvcj09IChfX2FyZyk7IH0KCiMgMTE3ICIv
dXNyL2xpYi9nY2MtbGliL2YtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS90eXBlaW5mbyIg
Mwp9OwoKY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZYXN0KCkgeyB9CiAgdmlydHVhbCB+YmFkX2Nhc3QoKSB7IH0KfTsKCmNsYXNzIGJhZF90eXBlaWQg
OiBwdWJsaWMgZXhjZXB0aW9uIHsKIHB1YmxpYzoKICBiYWRjĀ:wZkICgpIHsgfQop9Cgp9CiMgNSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL01lbUluZm8uagoKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAz
CiMgMzcgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMSAzCgoKCiMgMzQgjĀ:
cvaW5jbHVkZS9lIDxjbGFzcyBfVHA+
CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJigsIGNvbnN0IF9UcCYgX195KSB7
CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBi
b29sIG9wZXJhdG9yPihjdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXR9
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBibjĀ:G9XJhdG9yPj0oYCiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKIyA0MCAi
L3Vzci9pbmNsdWRlL2cjĀ:zL0bF9hbGdvYmFcrKy0zL3N0bF9wYWlyLmgiIDEgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYX9U
Mj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIg
c2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgb25kOwogIHBhaXIoKSA6IGZpcnN0
KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9U
MiYgX19iKSA6IGZpcn9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6InN0
KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF9PShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9
PSBfX3kuZmlyc3QgJ194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyjĀ:MS
X1QyPiYgX19gcmV0dXJuIF9feC5maXJz
dCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3lyc3QgPCBfX3guZmlyc3QpICYmIF9f
eC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgcGFpVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBf
VDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiMgIi91
c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgNTUgIi91c3IvaW5jbHVk
ZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKc3RydF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVj
dCBfX2ZhbHNlX3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90
cmFpdHMgewogICBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVf
Zmlyc3Q7CiMgODEgIi91c3IvaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAzCiR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvjĀ:Y2c3RydWN0b3I72aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X19mYWxzZV90eXhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfXjĀ:GVHJh
aXRzPGJvdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV9lIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+cnVjdCBf
X3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZG9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyjĀ:cjICAgdHlwZWRl
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ryd3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9pZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUER5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhjĀ:ZWdWx0X2NvbnN0hc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3UgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFy
X3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHloYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZW90cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgcjĀ:nQHsKICAgdHlwZdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cmlsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGjĀ:90l2aWFsX2NvcHR5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZ3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Q0eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVycjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25n
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1fb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmFfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVljĀ:cGaXNfUE9EX3R5wZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGRyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAg
IGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvjĀ:cndG9yOwogICB0zc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3ZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxm
dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZjĀ:XBGhhc190cml2aX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfjĀ:hazPGRvdWJsZT42aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZjĀ:iB3RydWVfdHlwZICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3B0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5caXNfUE9EX3R5cGU7Cn07CgojIDMwMSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19lZ2VyIHsKICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PGJvb2w+IHsKICB0eXBlZjĀ:F9HJ1ZV90eXBlIY3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnjĀ:BsRlPD4gc3RydWCB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCgoKdGVtcGxhdGU8dHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW5jĀ:l
xzaG9ydD4gewp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcjĀ:HsCB0eXBlZGVmIYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewog
IHR5cGVkZWYgX190cnVjĀ:5cgX0ludGVncmFVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+cnVjdCBfSXNfaW50ZWdlcjx1bnNp
Z25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBs
YXRlPD4gc3RydWN0IF9pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWQg
bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgojIDQ2ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmggMwoKCgojIDI4ICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5
ICh2b2lkICpfX3JlcWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRljĀ:dm
ZCAqbWVtbW9fc3JjLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2jĀ:pt1jY3B5ICh2b22lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAg
ICAgICAgICAgaW50jĀ:Yyc2l6ZV90IF9fkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3c7CgoK
ZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYjĀ:mlXRlX18gKChfXKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3Qg
X19uKQogICAgICBvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgNzcgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICJlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOXh0ZXJu
IGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAjĀ:gIgICBzaXplX3QNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgIGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICMxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0
cnhmcm0gKGNoKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3c7CgojIDEy
MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYjĀ:V9CgoX19tYWxsbZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hh
ciAqX19zLCBgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAob25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh
ciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
ZXh0ZXJuIHjĀ:VfBzdHJzcG4gKF9f
YWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXwoKZXh0ZXJu
IGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRjĀ:gKfX3B1cmVfXykBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KQogICAgIm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKIyAxODkgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpfX3N0cnRva19yICFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7
CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19jĀ:fXvbnN0IGNo
YXAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdjĀ:TsyAyMjAgIi91cZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f
YXR0cmllX18gKChfX3B1cmVfXykpOwoKIyAyMzEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3k7CgoKCmV4dGVy
biBjaGFyICpfX3N0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBf
X2J1ZmxlbikgdGhyb3cgKCk7CmV4dGVyjĀ:aGICpzdHJlcnJvzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
X19iemAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQg
YmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgcV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBiY21wIChvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAq
X19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gciAqcmluZGV4IChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCmV4dGVybiBpbnQgX1jĀ:MgludCBfX2kpIHwpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfKGNvbnN0KSk7CgoKCiMgMjc2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJu
IGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19zdCBjaGFyICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwpleHRlcm4gaW50IHN0
cmNhc2VjbXAgKF9fY29uc3QgY2hhcjĀ:19SwgX19jb25zdcmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2Vj
bXAfY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwMwMCAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
c3RyaW5ncCwKICAgICAgICAgICAgjĀ:ICICAgX19jb25z3ICgpOwojIDM2OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KCiMgNDkg
IijĀ:Iv5jbHVkZS9nKyNyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9sajĀ:HMCIgMSAzCiMgOaW51eC8yLjk2L2luY2x1ZGUvc3lzbGltaXRz
LmgiIDEgMwojIDEzMSAiL3Vzci9jĀ:vZjLWxpYi9pMzgRzLmgiIDEgMwojIDE0MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx
Mi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMiAzCiMgMTQzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxMzEgIi91
c3IvbGliL2djYy1saWIvaTM4NiRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9z
jĀ:aWdHMuaCIgMiAzYXQtbGludXgv
Mi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9jĀ:sdlL2crKy0zL3N5jbHVkZS9zdGRsaWIuaCIgMSAzCgpleHRlcm4g
IkMiIHsKCiMgOTQgIi91c3IvaHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMz
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemBfX2N0eXBlX2dldF9tYl9j
dXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICg9wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CjĀ:l9Xh0ZW5zaW9uXY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18jĀ:fX1cmVfXykpOwoBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCiMgMTYzICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAob25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2Rocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgIjĀ:ICICAgICAgICAgaW50IF9fYmFzZSkK
ICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRgbG9uZyBsb25nIGludCBzdHJ0
b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKjĀ:mVHJpY3QgX19lbeHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3Vx
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2B0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b2xsIChfX2NvbnN0IGNoKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhg
KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
CiAgICAgdGhyb3cgKCkjĀ:gMwICIvdXNyL2lBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpljĀ:cmZmxvYXQgX19zyZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQog
ICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIjĀ:2NbnN0IGNoYXIgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2V0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
aW50IF9fc3RydG9sXGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0ZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBf
X2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2jĀ:VkxvbmcgaW50IFCpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:ICICAgICAgICAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjĀ:hcs
IGludCBfX28KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwjĀ:Rl4g
dW5zaWduZmFsIChfX2NvbnN0IGNoYXIg
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgjĀ:ICICAgICAgICAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2jĀ:Aq9fcmVzdHJpY3CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfXjĀ:3VQog
ICAgIHRoYi5oIiAzCmV4dGVybiBjaGFy
ICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgKCmV4dGVybiBsb25nIGludCBhNjRsIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CiMgMjggIi91cW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKdHlw
ZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7cGVkZWYg
X191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3Qg
cXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdVFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNp
ZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7
CiMgNTggIi91aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7
CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV9vZGVfdDsK
CgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7
CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OjĀ:DkCIvdXNyL2luYZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoK
CnR5cGVkZWYjĀ:zc6ZV90IHNzaXp0
Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3V5X3Q7CiMg
MTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCnR5cGVkZWYgX190aW1lX3QgdGltOwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTQgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcjĀ:iAgoKCnR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1FJXSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfKF9fbW9kZV9f
IChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bn5lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBf
X2F0dHJpZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSk0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7
Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3Jk
X18pKSk7CgoKCgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcg
Ii91c3IjĀ:jbkZS9zeXMvdHlzeXMv
c2VsZWN0LmgiIDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWQuaCIgMSAzCnR5
cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp
Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyjĀ:ICICogc2l6ZW9mpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg
MiAzCgojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwog
IHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZiAgfTsKCiMgMzkg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0
IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRjĀ:zamZF9tYXNrOwoQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBz
ZWxlYGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg
ICAgICAgICAgICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmCiAgICAgICAgICAg
ICAgICAgICBfX2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB0aW1ldmFsICpfX3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDky
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lz
L3R5LmgiIDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmx0X3QgZnNibGtjbnRf
dDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMwp9CgojIiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK
CgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBz
cmFjĀ:tI1bnNpZ25lZCBgY2hhciAq
aW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3RlYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBj
aGFyICpzZXRzdGF0ZSAoY2hhciAqdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3Qg
cmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAg
IGMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAg
IGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfmV4dGVybiBpbnQgcmFu
ZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAqX19jĀ:0cjdCBfX3Jlc3V1fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpf
XikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9t
X2RhdGEgKl9fcmVzdHJpY3QgX1YpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9y
IChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry
jĀ:IHbmRvbV9kYXRhCgpleHRlcm4g
aW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQjĀ:hbgKHVuc2lnbmV4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpf
X3NlZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszjĀ:gdyb3cgKCk7Cgoocm93ICgpOwpl
eHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcn50IF9feHN1YmlbM10pIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgaW50IGpyYW5kNDggc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZCh1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICGludCBpbml0OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgZG91YmxlICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3JpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIjĀ:dWZSAqX19yZXN0IGludCBscmFuZDQ4
X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QidWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgbnJhbmQ0OF9yIjĀ:nN25lZCBzaG9ydICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsjĀ:
IgICAgICAgICAlc3VsdCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgCmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZGludCBzcmFuZDQ4X3IgKGxvbmcg
aW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gaW5jĀ:lZ0OF9yICh1bnNAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcihy
b3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b
N10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgjĀ:bmOF9kYXRhICpfuY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1h
bGxvYyAoc2l6ZV90IFl6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZv
aWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QjĀ:zalKSB0aHJvdyAoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRo
cm93ICgpOwoKCgplem4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoK
IyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoKCgoKjĀ:dG
biB2b2lkICpKCgoKCn0KCiMgNTQ2ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjAgIi91
c3IvaW5jbHVkZS9zaWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhodm9p
ZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2
b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2bCpfX2FyZyksIHZvaWQgKl9fYXJnKQog
ICAgIHRocm93ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19z
dGF0dXMsIHZvaWQfYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZVgoX19u
b3JldHVybl9fKSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy
ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1laHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHjĀ:52hjaGFyICpfX3CBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdjĀ:WUGlu
dCBfX3JlaWQgdW5zZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgojĀ:KZ0ZXJuIGludCBIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAoYiAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r
c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2N0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cg
KCk7CgoKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBh
dGggKF9fY29uY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgowZWRlZiBp
bnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoK
CgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2
b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSwjb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2
b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAg
ICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgob25zdF9fKSk7CmV4dGVybiBsb25nIGludCBs
YWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
IyA3MTEgIiIvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19u
dW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXF9fY29uc3Rf
XykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVu
b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwg
aW50IF9fb2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJujĀ:YXKmZjdnQg
KGRqX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19i
dWYpIHRoICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXNjĀ:jdfX2RlY3B0
LCsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgXjĀ:GlXQsCiAgICAgIZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpl
eHRlcm4hciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh
ciAqX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yICVibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3NpIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAo
ZG91YmjĀ:9fFsdWUsIGludCQsCiAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjajĀ:Cp3Jlc3RyaWN0
IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgcWVjdnRfciAobG9uZyBkb3VgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLCAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkbGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaWogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJs
ZW4gY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgd2N0b21iIChjaGFyICpfXjĀ:HdGFyX3QgX193YbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYX9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w
d2NzLCBzaXplX3QgX19uKQogICAgcm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNo
IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRl
L3jĀ:xp5oIiAzCmV4dGF2Z1tdLCBp
bnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1MSAiL3VzcmNsdWRlL2crKy0zL3N0
bF9hbGdvYmFzZS5oIiAyIDMKCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp
bnV4LzIuOTYvaW5jbHVkZS9zdGRjĀ:uagMSAzCnR5cGVNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMzQgIi91c3IvbGli
Ly1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldy5oIiAxIDMKIyAzMyAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2jĀ:Y2ZGUvbmV3IiAxiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhh
dC1saW51eC8yLjk2L2luY2x1ZGV3IiAzCgoKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoK
IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJh
ZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHtgIGV4dGVybiBjb25zdCBu
b3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdf
aGFuZGxlciBzZXRfbmV3X2hhbXIgKG5ld19oYW5kbGVyKTsKCn0KCgp2b2lkICpvcGVyYXRv
ciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3jĀ:gKpemVfdCkgdGhvciBkZWxldGUg
KHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGAodm9pZCAqKSB0aHJvdygp
Owp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwp2b2lkICpvcGVyYXRvZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJ90JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6
Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQgKXJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVy
YXRvciBuZXdbXShzaXplX3QvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9
Cn0KCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdW25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19o
YW5kbGVyOwoKIyA1MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bGdvYmFzZS5oIiAyIDMKCgoK
CiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMSAzCgoKc3RydWN0IGlu
cHV0X2l0ZXJhdG9yX3RhZysKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVj
dCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CcnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmFfdGFnIDogcHVibGljIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+IHN0cjĀ:CBnB1dF9pdGVyYYWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKjĀ:
elZGVmIF9EaXNfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnBvdXRwdXRfaXRlcmF0b3Igewog
IHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwjĀ:ICeXBlZGVmIHZvpZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0
eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdjĀ:2NGVnb3J5OwogIZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgX1RwKiBwb2lyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbFVy
YXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogjĀ:cGZWYgX0Rpc3RhUcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwp9OwoKdGVtcGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhd3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBmIF9UcCogcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xhc3Mg
X1RwLCBjbGFzcyBfRGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9pbnRl
ciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3IgjĀ:IH
cGVkZWYgX0NkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW90eXBlOwogIHR5cGVkZWYgX1BvaW50
ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0jĀ:dGPgpzdHJ1Y3QguYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWd7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0lhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZi5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9U
cCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZF9UcCB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVvbnN0IF9UcCYgcmVmZXJlbmNlOwp9Owoj
IDEzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAgZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdv
cnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9CgjĀ:1wF0ZSA8Y2xhc3l90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlz
dGFuY2VfdHlwb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0lbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZh
bHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdjĀ:XRiYpCnsKICByZb3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0
ZW1wbGF0ZSAhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCRlciYgX19p
KSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVycl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5j
ZV90eXBlKFk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCnZhbHVlX3R5cGUoY3QgX0l0ZXIm
IF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7IH0KCiMgMjU5ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgXHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19mdCAhPSBfX2xh
c3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2lubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0jĀ:dGIF9fbGFzdCwKIF9f
biwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19jĀ:0IgX19maXJz
dD9yLCBjbGFzcyBfRGlzdGFuY2U+Cmlu
bGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3Rh
bmNlKF9jĀ:ycsIF9fbGFzdCw7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUgdH5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0luSXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRv
cl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmR5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr
X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYjĀ:DxGFzcyBfUmFu
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVjZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgcG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX19sYXN0IC0gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpjĀ:dHZW5hbWUgaXRlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIFB1dEl0ZXJhdG9yIF9fbGFzdCkgewogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdv
cnkKjĀ:IFYXRlZ29yeTsKc3QsIF9D
YXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19u
LCBpbnB1dF9pdGVyYXRvcl90YWcpICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5vaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWRlcmF0b3JfdGFnKSB7
CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGls
ZSAoX19uKyspIC0tX19pOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
c0JhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247CnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9J
bnB1dEl0ZXJhdG9yJiBfX2ksIF90YW5jZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24s
IGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
Y3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvaW5lcl90eXBlOwogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eXVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tf
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBi
YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVvcj0oY29uc3QgdHlwZW5h
bWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNo
X2JhY2soX192YWx1ZSk7CiAgIXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5z0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3F0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9Cn07CgojIDM3OCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o
IiAzCnRlbXBsYXRlIDxjbGFzQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4Fja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYiB7CnByb3RlY3RlZDoKICBf
Q29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp
bmVyX3R5cGU7CiAgdHlwZWRvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3GU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAg
ZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250ZXImIF9feCkgOiBjb250YWlu
ZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0
b3I9KGNvbnN0IHR5cGVuYW9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAg
IGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAq
dGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29pbmVyPiYgb3BlcmF0b3IrKygp
IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKGludCkgeXR1cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlujĀ:
Zmcm9udF9pbnNzZXJ0ZXIoX0NvbnRh
aW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydFVyYXRvcjxfQ29udGFpbmVyPihf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9y
IHsKcHJvdGVjdGVkOgogjĀ:b2YWluZXIqIGNvpdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRl
cl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZHZvaWQgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGlu
c2VydF9pdGVyYXRvcihudGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yIF9faSkKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRl
cmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGl0ZXIgb250YWluZXItPmluc2VydChpdGVy
LCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOiAg
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo
aXM7IH0KfTsKCiMgNDU5ICIvdXNyL2luY2x1ZGUvZysvc3RsX2l0ZXJhdG9yLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmluc2VydF9p
dGVyYXRvcjxfQ29udmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBf
X2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlICBy
ZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXjĀ:F0IsIGNsYXNzIFCAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+
CgoKCgpjbGFzcyBycnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IUcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlz
dGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50
OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIFZlcmVu
Y2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4
cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBi
YXNlKCkgY29uc3ByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkg
Y29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbjĀ:iACBy
ZXR1cm4gLT4oKSBjb25zdCB7IHJldHVy
biAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYjĀ:lc0b3IrKygpIHssKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9T
ZWxmIF9fdG1wInRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuaGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDB9Cn07CgojIDU1MCAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzjĀ:ZWCiAgICAgICAg
ZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF8X0JpSXRl
ciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLjĀ:mVCBfRGlzdGFuYPSBfX3kuYmFzZSgpOwp9CgojIDU2NyAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0bF9yYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl
dmVyc2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9j
YXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfjĀ:ZWcnk7CiAgdHlw0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAg
ICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5
cGVkZWYgcXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVy
c2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IocmF0b3JfdHlw
ZSBfX3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYm
IF9feCkgOiBjdXJyZW50KF9feC5jdXJyZWB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQog
ICAgOiBjZW50KF9feC5iYXNlKCkpIHt9CgoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigvbnN0IHsKICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBw
b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdjĀ:HJHVybiAmKG9wZKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9mIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
LS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3F0b3ItLSgpIHsK
ICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp
bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gjĀ:aXCiAgICArK2N1fU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg
ewogICV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3Ir
PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjĀ:CAHJldHVybiAq
cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiBfU2VsZihjdXJyZW5gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0o
ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRo
aXM7CQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0
IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8c3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVt
cGxhPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAjĀ:gIgICAgY29uc3QkpIHsKICByZXR1cm4gX195LmJhc2UoKSA8
IF9feC5iYXNlKCk7Cn0KCnRlbXBsYjĀ:DxGFzcyBfSXRlcZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0o
Y29gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHBfX3kuYmFzZSgpIC0g
X194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPgpvYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgojIDgwOCAiL3VzcmNsdWRlL2crKy0zL3N0
bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRyZGlm
Zl90PgpjbGFzcyBpc3RyZWFtX2lhdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+
IChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoKICBp
c3RyZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvjĀ:X0ZW5kX21hcmtlfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1
ZSA6IGZhbHNlOwogICAgaWYgKFVuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7
CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVi
OgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5j
ZTsKCiAgaXN0cmVhbV9pdGVyYjĀ:igDogX01fc3RyZfQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmzKSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBfTV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKS5zdCB7IHJldHVybiAmKG9w
ZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisr
KCkgewogICAgX01fcmVhZCgpICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9wgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7
CiAgfQp9OwoKIyA4NjQgIi91c3IvaW5jbHVkZS9nKystMy9zdXRlcmF0b3IuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXN0cmVhbV9pdGVvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX195KSiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAgICAgICAgIF9f
eC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFya2VyfAogICAgICAgICBfX3guX01f
ZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxzZTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcDxhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBv
c3RyZWFtKiBfTV9zdHJlYW07CiAgY29uc3QgY2hhciogX01fc3RyaW5nOwpwdWJsaWM6CiAgdZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p
ZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRv
cihvc3RyZWFtJiBfX3MpI01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3Ry
ZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciogX19jKQogICAgOiBfTV9z
YW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX0RyZWFtIDw8IF9fdmFsdWU7CiAg
ICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgb3N0cmVhdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICpjĀ:z
B9CiAgb3N0cmkgeyByZXR1cm4gKnRo
aXM7IH0KfTsKCiMgOTA3ICIvdXNyL2luY2x1ZGUvZysrLjĀ:3R2l0ZXJhdG9yLbF9hbGdvYmFzZS5oIiAyIDMKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcj9i
LCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190
bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0jĀ:LCbGFzcyBfRm9yoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg
X19iKSB7CiAgX19pdGN3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfXjĀ:HsICBfVHAgX190dG1wOwp9CgoKCgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25fVHAmIG1pbihjb25zdCBfVHAmIF9f
YSwgY29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWlu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiNvbXBhcmUgX19jb21wKSB7CiAgcmV0
dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Db21wjĀ:PgbmxpbmUgY29u0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9gX19i
KSA/IF9fYiA6IF9fYTsKfQojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLjĀ:GFyBfT3V0cHV0SdHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBjĀ:hcsCiAgICAgICA9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3FnLCBf
RGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytf
X2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfRGlzdGFuY2lubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dXIgX19y
ZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChf
RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJgX19uID4gMDsgLS1fX24pIHsKICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAg
cmV0dXJuIF9fcWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2Nv
cHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0VHAqIF9f
cmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19s
YXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9Cb29sVHlwjĀ:c3dWN0IF9fY29w
IGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjĀ:mlXJhdG9yX2NhdZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm
ZXJlbmNlX3RgX0Rpc3RhbmNlOwogICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5
cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvIF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0
LCBfX2xhc39fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
X19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPiAgc3RhdGlj
IF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f
cmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3BjĀ:yapYWwoX19maXJVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRljĀ:X3c3VsdCkg
ewozPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29w
eV9kaXNwjĀ:aDSW5wdXRJdGVycHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCiMgMjE4ICIvdXNyL2ljĀ:1ZvZysrLTMv
c39CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCCAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fZmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgjĀ:aWcmVjdGlvbmFsgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3
aGlsZS9maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQXNzSXRlciwgY2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19jb3B5X2JhY2t3YXJSYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgjĀ:ICICAgICAgICAgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3NlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7cmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICBjbGFzcyBf
Qm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRl
Z29yeQogICAgICAgICAgX0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QmljĀ:lYpb25hbEl0ZXIzdGFuY2U7
CgogIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGN0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IFFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZjĀ:GF2g8X1RwKiwgXKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwg
Y29uc3QgX1RwKiBfX2xhc3QsIF9gX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBf
TnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2Zp
cCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5Y2t3YXJkX2Rpc3BhdGNo
PGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbn9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBy
ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgog
ICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNjĀ:fYja3dhcmQoX0JJlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czx0eXBlbjĀ:SBGVyYXRvcl90cICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvgICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
QkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAgICA6OmkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7Cn0KCiMgMzA4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgi
IDMKdGVtcGxhdGUgPGNsYXNzjĀ:bndEl0ZXIsIGNspcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1f
X2NvdW50KSB7CiAgICAqX191bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsr
X19yZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2nN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0jĀ:IFdXRwdXRJdGVylIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LAogICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0
ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgXjĀ:dHdEl0ZXI+KF9fdWx0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2lgY2xhc3MgX091dHB1dEl0ZXI+
CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9TaXplI291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJu
IF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgjĀ:
X0ZXJhdG9yX2NsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj5saW5lIHBhaXI8X0lucHV0SXRl
ciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQs
IF9PdXRwdXRJdGVyIF9fjĀ:dWKSB7CiAgcmV0fcmVzdWx0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNz
IF9UcD4Kdm9pZCBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7Imlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1NsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICBf
X24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVy
biBfX2ZpcnN0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgcHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRl
cjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjĀ:CAX0lucHV0SXRlIT0gX19sYXN0MSAmJiAq
X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19yc3QxOwogICAgKytfX2ZpcnN0MjsK
ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwp9Cgp0ZGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJjĀ:Mj
bWlzbWF0Y2ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3ogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:ICICAgICBfQmlu3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2Z0MSwg
Kl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVy
biBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMjĀ:19XJzdDEsIF9fZdEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJv
b2wgZXF1YWwoX0ljĀ:0SlcjEgX19maXJAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2N0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAq
X19maXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKjĀ:ZXcm4gdHJ1ZTsKjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saWJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0
ZW1wbGF0ZSA8YjĀ:3M0lucHV0SXRlcb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yICBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg
IGlmICgqX19mdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICBjĀ:1cgX19m
aXJzdDQyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1djĀ:XICBjbGFzcyBfQcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpjĀ:MSKytfX2ZpcnN0fX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKF9f
Y29tcCgqX1JzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjĀ:QoW5saW5l
IGJvdW5zaWduZWQgY2hhciogX19maXJz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAjĀ:vb0IHVuc2lnbmVAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAg
Y29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjdCBzaXplX3Qg
X19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNt
cChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbixlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jl
c3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9CgppbmxpbmUgYm9v
bCBsZXhpcmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hh
ciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjĀ:gYuc3QgY2hh
cisKCiAgcmV0dXJuIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKChjb25zdCBzaWduZjĀ:2hiopIF9fZmlycICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg
ICAgICAjĀ:gIgICAgICAgICA0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ2BjaGFyKikgX19s
YXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjI+CmludCBfX2xleGljb2dyYXBojĀ:bFb21wYXJlXzN30ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICjĀ:luV0SXRlcjIgX1B3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhcSB7CiAgICBpZiAo
Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gLTE7CiAgICBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKQogICAgICByZXRgMTsKICAgICsrX19maXJzdDE7CiAgICArK19fZmly
c3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikgewogICAgcmV0dXJuICEoX19maXJz
dDEgP19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0dXJuIC0xOwogIH0KfQoKaW5saW5l
IGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgaWduZWQgY2hhciog
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpjĀ:ZCaGFyKiBfX2xhIF9fbGFz
dDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0sYXN0MiAtIF9fZmly
c3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1p
bihfX2xlbjEsIF9fbGVuMikpOwogIjĀ:HViBfX3Jlc3VsdICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBf
X2xjĀ:gPtMSA6IDEpKTsjb21wYXJl
XzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIFFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciog
X19sYXN0MikKewoKICByZXR1cm4gZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qx
LAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKjĀ:nNHNpZ25lZCBjaICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19sYXN0Mik7CgojĀ:KCKCnRlbXBsYXRV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1
dXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0luSXRlcjIgX19sYXN0MikK
ewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3sKfQoKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3Rv
ciIgMiAzCgojIDU0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDEgMwoKCgojIDU4
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9fX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0ajĀ:QoCAgIHRocm93IKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJytLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkjĀ:9hRyaWJ1dGVfXyIvaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMiAzCiMgNzIgIi91c3IvaW5jbjĀ:S9ystMy9zdGxfYcmVhZC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L3NjaGVkLmgiIDEgMwoKCgo3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKc3Ry
dWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcmkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9p
ZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgjĀ:IFZmxhZ3MsIHZvvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgpleHRl
cm4gIkMiIHsKCgpleHRlcm50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcjĀ:aWIHNjaGVkX2dlZWRfcGFyYW0gKl9f
cGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWR0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCBzY2hlZjĀ:XJSAqX19wYXJhbZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpjĀ:
coZWRfeWllbGQoZWRfZ2V0X3ByaW9y
aXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9ycl9nZXRfaW50YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190
KSB0aHJvdyAoKTsKCn0KCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgojIDU5ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbjĀ:19GNsb2NrX3Q7CdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRt
X21pbjsKICBpbnQgdG11cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0
bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDog
IGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoK
c3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgjĀ:ZXZWMgaXRfaW50sdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgojIDE2
MyAiL3Vzci9pbmNsdWRpbWUuaCIgMwpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93IwoK
CmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19zdF9fKSk7CgoKZXh0ZXJuIHRpbWVf
dCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz
dHJmdGltZSAoY2hhc19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCk7CgojIDE5NCAiL3Vzci9pbmNsdWRlL3RpbWIgMwpleHRlcm4gc3RydWN0IHRtICpn
bXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVj
dCB0bSAqbG9jYWx0IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJgX190
aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdSAqbG9jYWx0aW1lX3IgKF9fY29uc3Qg
dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdG0jĀ:fczdHJpY3QgX19NjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGBjaGFy
ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
Y2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjjĀ:bSX19yZXN0cmljjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpl
eHRlcm4gY2hhcijĀ:RpVfciAoX19jb2CAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocjĀ:CgwoK
CgoKZXh0IF9fZGF5bGlnaHQ7CmV4dGVy
biBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXhuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0
ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0Owpl
eHRlcm4gbG9uZnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltIiAzCmV4
dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0
aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKlApIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
ZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgoKZXh0IGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl
cXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVjĀ:jIfX3Jl
bWFpbmtfZ2V0cmVzIChjbG9ja2lkX3Qg
X19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjI3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpf
X3RwKSB0aHJjĀ:oKKCgpleHRlcm4s
b2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHAoKTsKCiMg
MzA5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j
a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu
dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f
cmVzdHJpY390aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo
dGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZ2V0dGltZSAo
dGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMfcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkg
dGhyb3cgKgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg
c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKjĀ:ZXIGludCB0
aW1gdGhyb3cgKCk7CiMgMzYyICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCn0KCiMgMj91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK
CgojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDQ5ICIv
dXNyL2luZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3
MyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KCiMgMjUgIi91c3IvaW5jĀ:kZwdGhyZWFk
LmVzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MwplbnVtCnsKICBQVEhSRUFEX0NSRUFURjĀ:0lUJMRSwKCiAgUCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQ
TElDSVRjĀ:IRKCn07CgplbnVIUkVB
RF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF1FRF9OUCwKICBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAs
CiAgUFRIUkVBRF9NVVRFWF9BREFQVElWjĀ:UAIDk5ICIvdXNyKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9D
RVNTX1JFRAoKfTsKCiMgMTMwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZHZvaWQgKik7CiAg
dm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fcHJldjsKfTsKCgojĀ:1b7CiAgUFRIUkVNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZF
UlJFRjĀ:iAFRIUkVBRF9DQi9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRljĀ:dGZWFkX3QgKl9fgICAgICAgICAgICAgIF9fY29uc3QgcHRo
cmVhZF9hdHRyX3QgKl9fcmVzdHJpY39hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAg
ICAgjĀ:IHaWQgKl9fcmVzdGhyZWFk
X3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm40IHB0aHJlYWRfZXF1
YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfZjĀ:CAm9pZCAqX19yZXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pv
aW4jĀ:0alYWRfdCBfX3RoKTsKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX1kgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgpleHRlcm4gIHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRh
Y2F0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdjĀ:TsgpleHRlcm4gaX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAjĀ:gIgICAgICAgICAJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFt
IGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkcmFtICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocm9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
jĀ:X1dHRyLAogICAgICBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICBvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwg
aW50IF9fcG9saWN5KQogICAgIm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf
X3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHjĀ:JlRfYXR0cl9zZX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgjĀ:IFaW5oZXJpdCkg0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3JRyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBp
bnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIHRocm93IwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkK
ICAgICB0aHJvdyAoKTsKCgpjĀ:lcgaW50IHB0aHJFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICCAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCk7CgojIDI1OSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50jĀ:aHYWRfYXR0cl9z0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZC9zdGFja2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cjĀ:dAICAgICAgICAgciwgdm9pZCAqKl9f
cmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCkjĀ:jI4MyAiL3Vzci9B0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0diAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
ZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHNpemVfdCAqX19yZXN0cmljdCBf
X3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2No
ZWRwYXJhbSAocHRocmVhIF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0f
cGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0g
KHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QjĀ:oZfcGFyYW0gKl9sKCiMgMzI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHVh
ZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgjĀ:cmZF9tdXRleGF0gICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90
ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bjĀ:yAcHRocmVhZF9tcm4gaW50IHB0aHJlYWRf
bXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX214KSB0aHJvdyAoKTsKCiMgMzQ2ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sg
KHB0aHJlYWRfbXV0ZCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0jĀ:dy
KTsKCgpleHRgKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXludCBwdGhyZWFkX211dGV4YXR0cl9n
ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:ICICAgICAgIF9fgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVh
ZF9tdXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKIyAzODQgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXhjĀ:uIudCBwdGhyZWFVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0IHB0
aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0jĀ:IGdCBwdGhyZWFkfY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfc2lnbmhwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2NvbHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19y
ZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAjĀ:gIgICAgICAgICA11dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF90aHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgjĀ:cmdHJp
Y3QgX19gICAgICAgICBfX2NvbnN0IHN0
cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
aW5pdCAocHRojĀ:ZFb25kYXR0cl90
cHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl90cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3Qg
cHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5jĀ:fXlc3RyaWN0IF9w
dGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdC9hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhy
b3cgKCk7CgoKIyA1NTAgIi91c3IvaW5jbHVkdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICjĀ:Ag9pZCAoKl9fZGsK
CgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdjĀ:2tSkgdGhy
b3cgZmljIChwdGhyZWFkX2tleV90IF9f
a2V5LAogICAgICAgICAgICAgICAgICAgICAjĀ:gIgICAgIF9fY29pleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVh
ZF9rZXlfd2tleSkgdGhyb3cgKCk7CiMgNTcwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz
CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vX2NvbnRyb2ws
CiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnjĀ:RoVhZF9zZXRjYWGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9z
ZXRjYW5jeXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSBvdyAoKTsKCgoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjAwICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlciAqX19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCiMgNjUwICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKZXh0ZXJuIGlu
dCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3NpZ3NldF9jĀ:fXlc3RyaWN0IF9B0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdu
bykgd3cgKCk7CgojIDY1MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjY1ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhjĀ:dGcmsgKHZvaWQggICAgICAgICAgICAgICAgdm9pZCAoKl9f
cGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxk
KSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3Ro
cmVhbnAgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlh
bGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9CgojIDcyICIvdXNyL2luY2xjĀ:vZrLTMvc3RsX2FcrKy0zL3N0bF9hbGxvYy5oIiAzCiMgMTQx
ICIvdXNyL2luY2x1ZGUvZysrLTMvc2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+
CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lk
KiBjĀ:vbfbWFsbG9jKHNsbG9jKHZv
aWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2xsb2Nfb29tX2hhbmRs
ZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7
CiAgICB2b2lkKiBfX3Jlc3VsdCA9bGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K
CiRhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJl
ZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodCogX19wLCBzaXplX3Qg
LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgaWYgKDAgX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs
b2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9p
ZjĀ:iB3NldF9tYWxsbCAgIHZvaWQg
KCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxljĀ:ICIF9fbWFsbG9j0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgoKdGVt
cGxhdGUgPGludCBfX2luc3Q+CnQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19p
jĀ:Pgb2lkKgpfX21hb21fbWFsbG9j
KHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NjĀ:uZlcikoKTsKICAsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVy
ID0gX19tYWxsb2NfYWxsb2Nfb2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxs
b2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpOyB9gICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFs
bG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm9yZXN1bHQpOwogICAgfQp9
Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0Pjo6X1Nfb29tX3JlYWxsdm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgq
IF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDsB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbXIpIHsgY2VyciA8PCAib3V0
IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFu
ZGxlcikoKTsKICAgICAgICBlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlm
IChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY1GxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpICAgIHN0YXRpYyBfVHAqIGFs
bG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBf
QWxsb2M6OmFsbG9jYXRlKFAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFs
bG9jYXRlKHZvaWQpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpejĀ:ZiX1RwKSk7IH0KX3AsIHNpemVfdCBf
X24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAg
ICB7IF9BbGxvYzo6ZGVhbjĀ:2FShfX3AsIHNpePGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAg
bSB7X1NfZXh0cmEgPSA4fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9ICFyKilfQWxsb2M6OmFsbG9jYXRl
KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy
biBfX3Jlc3VsdCArIF9TdHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19g
X1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsXjĀ:T019uIiwgIi91cMywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICBfQWxsb2M6OmRlYWxjĀ:hdoX19yZWFsX3AB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXQg
X19uZXdfc3opCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7
CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9wIF9fb2xkX3N6KSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX29jLmgiLCAyNzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwog
ICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0Z3Jl
YWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7CiAgICAqKHNp
emVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJybiBfX3Jlc3VsdCArIF9TX2V4dHJh
OwogIH0KCn07CgoKIyAzMTkgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Ym9vbCB0aWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlIHsKCnByaXZhdGU6CgoKCiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVudW0gQVhf
QllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07
CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91cCjĀ:plQgX19ieXRlcyUdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGU6
CiAgdW5pb24gX09iCiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAg
ICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICB9Owpwcml2YXRlOgoKCgoKICA0YXRp
YyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICBzdGF0aWMgc2l6
ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfXGVzKSB7CiAgICAgICAgcmV0dXJuICgo
KF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBf
U19yZWZpbGwoc2l0IF9fbik7CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6
ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19zdG9mcmVl
OwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6
ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfZXhfdCBfU19ub2RlX2FsbG9jYXRvcl9s
b2NrOwojIDM5MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCiAgICBjbGFzcyBf
TG9jayB7CiAgICAgcHVibGljOgogICAgICAgICAgICBfTG9jaygpIHsgaWYgKHRocmVhZHMp
IHB0aHJlYWRfbXV0ZXhfbG9jaygmX1Nfbm9kZV9hbGxvY2F0b3JfbG9jayk7IH0KIjĀ:CACAg
ICAgfl9MeF91bmxvY2soJl9TX25vZGVf
YWxsb2NhdG9yX2xvY2spOyB9CiAgICB9OwogICAjĀ:pZkIGNsYXNzIF9FsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgX09iaiogdm9s
YXRpbGUqIF9fbnJlZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+
IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4obWFsbG9jX2FsOjphbGxv
Y2F0ZShfX24pKTsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsK
CiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlmIChfX3Jlc3VsdCA9PSAwKSB7
CiAgICAgICAgjĀ:ZCX19yID0gX1Nf
IHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VtPiBfTV9m
cmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwogIH07CgoKICBzdGF0aWMgdm9p
ZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZF9fbikKICB7CiAgICBfT2JqKiBfX3EgPSAo
X09iaiopX19wOwogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChf
X24gPiAoc2ljĀ:0KfTUFYX0JZVEVj
YXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215X2VfbGlzdCA9
IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgX0xvY2sg
X19sb2NrX2luc3RhbmNlOwoKICAgIF9fcSAtTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy
ZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2h2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsK
Cn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMWxsb2M7CnR5
cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2Fs
bG9jOwoKCgoKCgoKdGVtcGxhdGUgPGJvb2w0aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxv
YyhzaXplX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIqcmVzdWx0Owog
ICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9f
Ynl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlICNfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRl
c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgjĀ:ICX1Nfc3RhcnRfdHVy
bihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBpemUpIHsKICAg
ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3Rh
bF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9iaiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m
cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1
cm4oX19jĀ:1bpOwogICAgfSBnZXQg
PQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cC9oZWFwX3NpemUg
Pj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzCiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Zy
ZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAo
KF9PYmjĀ:9TN0YXJ0X2ZyZWJlZV9s
aXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX3RhcnRfZnJlZTsK
ICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190
b19nZXQpOwogICAgICAgIGlmICgwID0jĀ:TX0YXJ0X2ZyZWUAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAg
ICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kg
PD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAgICAgX19teV9mcmVl
X2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAg
ICAgICAgX19wID0gKl9fbXlfZnJlZVN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19w
KSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVf
bGlzaW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19w
OwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RfZnJlZSArIF9faTsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpz
KSk7CgoKICAgICAgICAgICAgICAgIjĀ:CACAgICAgICAgfICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9j
OjpvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBf
c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRfZnA9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
OlJlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciog
X19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CCBfT2JqKiB2b2xhdGls
ZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVu
dF9vYmo7CiAgICBfT2JqKiBfX25jĀ:fbqOwogICAgaW5R1cm4oX19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz
dF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19j
aHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iIChfT2JqKikoX19jaHVu
ayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVu
dF9vYmogPSBfX25leHRfb2JqOwAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilf
X25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAg
ICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAg
ICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cnJlbnRfb2JqIC0+IF9N
X2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVy
bihfX3Jlc3VsdCk7Cn0KCnRlbjĀ:XRDxib29sIHRocYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNp
emVfdCBfX2NvcHlfc3o7CgogjĀ:aWKF9fb2xkX3N6zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxjĀ:hfAsIF9fbmV3X39vbGRfc3opID09
IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CCBfX3Jlc3VsdCA9IGFsbG9j
YXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xk
X3N6IDogX19uZXdfc3o7CiAjĀ:tZjcHkoX19yZXNNhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHB0aHJlYWRfbXV0ZXhf
dAogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhycywgX19pbnN0Pjo6X1Nfbm9k
ZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURf
TlAsIHswLCAwfX07CiMgNjIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsbjĀ:dGcGxhdGU8X190MDsKCnRlbXBsYXRl
IDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciojĀ:kZhdWx0X2FsbG9NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgXnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9f
ZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2FsbGjĀ:RlBsYXRlPF9fdGCAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgjĀ:MCMCwgMCwgMCwgvZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Ms
b2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlw
ZWRlZiBfVHAmIHJlZmVjZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFs
bG9jYXRvcigpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsYXRvciYpIHt9CiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB7fQogIH5hbGxv
Y2F0b3IoKSB7fQoKICludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgXSBj
b25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBj
b25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24jĀ:gM/IHN0YXRpY19ogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAg
IDogMDsKICB9CgoKI2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p
CiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgjĀ:IC
aXplX3R5cGU6ZV90KC0xKSAvIHNpemVv
ZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaWIgX19wLCBjb25zdCBfVHAmIF9fdmFs
KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsg
X19wLT5+X1RwKCk7fTsKCnRlbXBsYXRlPD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVjZV90
eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlXGU7CgogIHRlbXBsYXRlIDxjbGFzcyBf
VHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwog
IH07Cn07CgoKdGVhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMjp7CiAg
cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8PiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+
JikKewogIHJldHVybiBmYWxzZTsKfQojIDgwMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxv
Yy5oIiAzCnRlbXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh
dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpeCBzaXpl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1Rjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
X1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcjĀ:WxV90eXBlOwoKIYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RojĀ:CifTsK
CiAgX190IF9fYWxsb2NhdG9yJiBfX2Ep
CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX291bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRl
bXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEs
IF9BbGxvYz4mYSkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdf
YWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkge30KCiAgcG9pbnRlciBhZGRyZXNlZmVyZW5j
ZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29u
c3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0
ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAog
ICAgICAgID8hdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9f
biAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZW9jYXRlKHBv
aW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxv
Y2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29u
c3RydWN0KH50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3Zh
bCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKjĀ:H0TsKCnRl
bXBsdG9yPHZvaWQsIF9BbGxvYz4gewog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTs0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29u
c3RfcG9pbjsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNz
IF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvVHAxLCBfQWxs
b2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc39hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ex
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMikKjĀ:IHdHVybiBfX2ExZXJs
eWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9vYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29ucjĀ:19GxvY2F0b3I8XYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5n
X2FsbG99CgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRy
dWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9fdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb2jĀ:Bf1hbGxvY19hbGBmYWxz
ZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lucmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYsCiAgICAgICAgICAgICAgICAjĀ:gIgY29uc3QgX19wgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxi
b29sIGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+jĀ:ICICAgICAgICAgfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JikKewogIHJldHVybiBmYWxzZToKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCByYXRvciE9KGNvbnN0
IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVn
X2FsbG9jPF9BbGxvYz4mKSB7CiAgcXJuIGZhbHNlOwp9CiMgOTU3ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
cj4ydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXo6IHJlYmluZDxfVHA+
OjpvdGhlcgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2NhdG9yPgpjdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx
PgjĀ:J1QgX0FsbG9jX3BzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cjĀ:WY2ltcGxlX2FsbcGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKCnRlbXBlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBz
dWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pPiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+ID4gYWxsb2NhdG9yX3R5cG07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2Fs
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxjĀ:sbjPF9UcCwgX19wgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2Nf
dHlwZTsKICB0eXBlZGVmIF9fY2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wjĀ:0Z8Y2xhc3MgX1RhaXRzPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3jĀ:9vBfU19pbnN0YW2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9j
PiA+IF9BbGxvY190eXBlOwogjĀ:cGZWYgX19hbGxvgYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAg
ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jXG9jX3RlbXBsYXRlPF9faW5z
dD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY1W1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rociwg
X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsjĀ:0elZGVmIF9fYWxBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAg
YWxsb2NhdG9yX3R5cGU7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xh
c3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEs
YnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPFwgZGVidWdfYWxsb2M8X0FsbG9j
PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxf
QWxsb2M+ID4gYWxsb2NhX3R5cGU7Cn07CgoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3ZlY3RvciIgMiAzCgojIDM2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVjĀ:o
AxIDMKCgoKCgBkZXN0cm95KF9UcCog
X19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7CnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9f
dmFsdWUpIHsKICBuZXcfcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
PgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKC0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IGRlc3Ryb3koJipfX2N0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+
CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcGVy
YXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3kvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlh
bF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpjĀ:bF
ZXN0cnVjdG9JdGVyYXRvcj4KaW5saW5l
IHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIFlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpKTsKfQoKaW5sIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lk
IGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKIyAzMyAiL3Vzci9pbmNsdWRjĀ:rKz
L3ZlY3RvciRsX3VuaW5pdGlhbGl6ZWQu
aCIgMSAzCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSjĀ:XRGVyLCBjbGFzcZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwjĀ:uc0SXRlciBfX2x9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3VfdHlw
ZSkKewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191
bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0Z19jdXIg
PSBfX3Jlc3VsdDsKIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19sICpfX2ZpcnN0KTsKICAgIHJldHVybiBf
X2N1cjsKICB9CjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGlzX1BPRDsKICByZXR1cm4gX191bmluaXRp
YWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0K
CnRlbXBsYXRlbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2Z0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZ3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX3Jlc3VsdCkp
Owp9CgppbmxgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly
c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3
Y2hhcl90Kixhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqI2xhc3QgLSBf
X2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVy
PgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihf
SW5wdXRJdF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgjĀ:cHX2l0ZXJh
dG9fcmVzdWx0OwogewogICAgZm9yICgg
OyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCtfX2ZpcnN0LCArK19fY3VyKQogICAgICBjb25z
dHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX0Zv
cndhcmRJPihfX2ZpcnN0LCBfX2N1cik7CiAgfQo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRKaW5saW5lIHBh
aXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf
bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcjĀ:CB2l6ZSBfX2NvdYXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21jĀ:jZzX2l0ZXJhdG9zdCA9
IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2NJdGVyLCBfRm9y
d2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IHBhaXlucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
aXJzdCwgX19jb3VudCwgX19yZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JjĀ:dEZXIgX19maXJzgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0KSB7CiAgcmV0dXJuIF9fdW5pbmFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwgX190cnVlX3R5cnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0
aWFlZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX1BfX2ZhbHNlX3R5cGUp
CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogewogICAgZm9yICggOyBfX2N1ciAh
PSBfX2xhc3Q7ICsrX19jdXIpCiAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+Cmlu
bGB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZjĀ:19XN0LCBjb25zdcGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46
OmlzX1BPRF90eXBlIF9Jc19QT0QgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
c2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgjĀ:Rmd2FyZEl0ZXIggICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBf
X3VuaW5pdGlhbGl6ZWRfZmlsbCZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwg
jĀ:c3X1RwPgppbmxpaWxsX25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJz
dCwgX19uLCBfX3gpOwp9Cgp0ZGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3JkSXRlciBfX2N1ciA9IF9f
Zmlyc3Q7CiB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25z
dHJ1Y3QoJipfX2N1ciwgX194ICAgIHJldHVybiBfX2N1cjsKICB9CjsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT45saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVjĀ:ikwogIHR5cGVkZaXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4g
X191bmluaXRpYWxpemVkX2Zfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHmlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsKZXR1cm4gX191bmluaXRpYWxp
emVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoj
IDIyOCAiL3Vzci9pbmNsdWcrKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgXjĀ:ndmRJdGVyIF9fcdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7
CiAgfQo7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9j
b3B5KF9Gb3J3YXJkSXRlX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAjĀ:g
9JbnB1dEl0ZXB1bmluaXRpYWxpemVk
X2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogewogImV0dXJuIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CjsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNjĀ:zIGb3J3YXJkSXR5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEIg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0MSwgX19sYXN0MS9maXJzdDIpOwogewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlk
MiwgX19sYXN0MiwgX194KTsKICB9CjsKfQoKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3Rv
ciIgMiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA1MCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIjĀ:0ZwbGF0ZSA8Y2x9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogIGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsjĀ:dG
X3R5cGUgZ2VhdGFfYWxsb2NhdG9yOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGF0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHANX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfXyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9gX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdGB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9WZWN0b3jĀ:xsNfYmFzZShjb2XJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KC3RlY3Rl
ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0
b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FjX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJldiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6jĀ:YWb2Nh
dGUoX19sIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIFN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2lubmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFjĀ:8XwLCBf
QWxsb2FzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhb2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz
ZShzaXplX3QuLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID1fc3RhcnQ7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf
YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zjĀ:dCX01fZW5kX29myICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCnRl
bXBsYXRlIDjĀ:FzBfVHAsIGNsYXMg
dmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4Keml2YXRlOgog
IHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWR2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUq
IGl0ZXJhdwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zYWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvjĀ:IHcmV0dXJuIF9CZWYg
cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJpdGVyYXRvcjsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoK
CgoKCgpwcm90ZWN0ZWQ6CgogIHVzaW5nIjĀ:XNjpfTV9hbGxvYZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2ZzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVk
OgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLC5zdCBfVHAmIF9f
eCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgog
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1jĀ:X0c3RhcnQ7IH0KgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gX0jĀ:luNoOyB9CiAgY24gX01f
ZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIjĀ:mVXJuIHJldmVy
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdAogICAgeyByZXR1cm4gY29uc3R2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsgfGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfjĀ:ZSaXplKCkgY29utIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBl
IG1heF9zaXplKCkgY29uc3QKICAgIHV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1Rw
KTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUo
X01fjĀ:X2X3N0b3JhZ2UgdAogICAg
eyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2UlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19u
KTsgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRjĀ:0elKCkpCiAgICAwZSBfX24s
IGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb29yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2gg
PSB1bmluaXRpYWxpemVkX2ZpbGxfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBs
aWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlw
ZSogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u
LCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIjĀ:Gxz4mIF9feCkKIbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3BfeC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsg
fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRl
c3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfjĀ:ZSX2EpIHsKICAgucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgX01faW5pdGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXpl
jĀ:eCSW50ZWdlciBfKSB7CiAgICBf
TV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs
IF9fbiwgX192YWx1ZSk7CiAgfCB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAg
IF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCl0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOyB9CgogIHZlcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiABpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTjĀ:Gx2F0ZV9hbmRfYICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgICBfTV9kZWFjĀ:jYlKF9NX3N0YXJsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
ICAgfQogIH0KCgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5jĀ:X1LCBjb25zdCBfgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24o
X0lucHV0SXRlcmF0b3IgX1JzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgp
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj42b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNz
aWduKChzaXplX3R5cGUpIiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
X0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX1JzdCkpOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0luSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRK
ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIjĀ:m92FyZF9pdGVyYIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVm
ZXJlbmNlIGZyb250KCkuc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFj
aygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKC9u
c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYg
X194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZl9zdG9yYWdlKSB7CiAgICAgIGNv
bnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxz
ZQogICAgICBfTV9pbnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygp
IHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgYjĀ:3RdWN0KF9NX2ZpICAgZWxzZQogICAgICBf
TV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBjĀ:wKlY3RvcjxfVHAQsIF9feC5fTV9zdGFydCk7Cjo6c3dhcChfTV9maW5pc2gs
IF9feC5fTV9maW5pcwo6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zf
c3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvY29u
c3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsK
ICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBl
bmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2Zpbmlz
aDsKICAgIH0KICAgc2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwog
ICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVvciBf
X3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAg
ICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdjĀ:WdCYmIF9fcG9zaKF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAg
fQogICAgZWxzZQojĀ:gIfTV9pbnNlcnRluKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdGogIHZv
aWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgjĀ:ZWbWUgX0lzX2lugX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9f
cG9zLCBfX2ZpcnjĀ:Bfxhc3QsIF9JbnyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfXywgX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ry
dWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCA6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2Vy
dF9kaXNwYXRjaGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYX9yeShfX2ZpcnN0KSk7CiAgfQoKCgoKCiAg
dm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
eCk7CgogIHZvjĀ:cGX2JhY2soKSB7
ZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlgewogICAg
aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBf
TV9maW5pc2gsIF9fcG9zaXRpb24pOwogICAgLV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2Zp
bmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19maXJgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9f
bGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV5pc2gpOwog
ICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJu
IF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6aXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3Qg
X1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdp
bigpICsgX1dfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9f
bmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpeHlwZSBfX25l
d19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBl
cmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnBjĀ:lYlZDoKCgogIHRogIGl0ZXJhdG9yIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlw
ZSBfX24sI3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzjĀ:ewICAgaXRl
cmFgewogICAgICB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KOwogIH0KIyA0NDQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKICB0
ZW1wbGF0Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXpl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAjĀ:gIgIF9JbnB1
dEFnKQogIHsKICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2lu
aXRpYWxoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYX90YWcpCiAgewog
ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7
CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jjĀ:KFbik7CiAgICBfuOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIFFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBjĀ:1dpdGVyYXRvcl9RJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf
X3BvcCAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgjĀ:IGcndhcmRfaXRlzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcj09KGNvbnZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNp
emUoJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4o
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4jĀ:salIGJvb2wKb3B4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX195KQp7CiAgcmV0dGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdp
bigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdp
bigjĀ:fXuZW5kKCkpOwpBbGxvYz4K
aW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3ZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgp2ZWN0b3I8LF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3Bl
cmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRo
aXjĀ:sKAgIGNvbnN0IHAgaWYgKF9f
eGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgaXRlcmF0b3IgX190bjĀ:SBV9hbGxvY2F0ZX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOwojĀ:gIfTV9kZWFsbG9AtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01f
Z29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNp
emUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pID0geShfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgY2hfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCks
IF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgp
X3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr
IF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVfdCBfX24sIGNv
bnN0IHZhbHVlX3R5cGUmIF9fdSB7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZl
Y3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgjĀ:fdwLnN3YXAoKnRpIHsKICAgIGZp
bGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmA9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVy
YXNlKGZpbGxfbihiZWdpbigpjĀ:X2IF9fdmFsKSwgsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIjĀ:CACAgICAgICAgIcmF0b3IgX19jdXIgPSBiZWdpbigpOwogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xh
c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfb2M+IHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChf
Rm9yd2FyZEl0ZXIgX19maXwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xl
biA+IGNhcGFjaXR5KCkpIHsKICAgIGl0ZXJhdG9yIF9fdG1jĀ:gXfYWxsb2NhdGVk7CiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgX01fZGVhb2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
aW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p
IHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcH9maXJzdCwgX19sYXN0LCBfTV9z
dGFydCk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzjĀ:ICCiAgZWxzZSB70OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwjĀ:t
QsIF9NX3N0YXRfY29weShfX21pZCwg
X19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKCgp0ZW1wbSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25fVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m
X3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSog
ICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpaCAtIDEpOwogICAgKl9fcG9zaXRp
b24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/
IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fY2Nh
dGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiB7CiAg
ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRjĀ:wefTV9zdGFydCwBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBfX3gpOwogICAg
ICArK19fbmV3X2ZpbDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KCjsKICAgc3Ry
b3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGA9IF9fbmV3X3N0YXJ0OwogICAgX01f
ZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFy
dCArIF9fbGVuOwogjĀ:fQdGVtcGxhdGUglY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NvbikK
ewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChf
TV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogIytfTV9maW5pc2g7CiAgICBjb3B5X2Jh
Y2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9f
cG9zaXRpb24gPSBoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3UgIT0g
MCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19ujĀ:ZmaXNoID0gX19u9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3Np
dGlvbiwgX19uZXRhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAg
KytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZjĀ:29Shf
X3Bvc2l0ICB9Cgo7CiAgICBkZXN0cm95
KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxjĀ:hdoX01fc3RhcnQogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2Zp
bmlzaCA9IF9fbjĀ:2ZmlzaDsKICAgIKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvjĀ:dmZCB2
ZWN0b3Iwb3NpdGlvbiwgc2l6ZV90eXBl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK
ICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9maW5pc2gpIF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmluaXNoIC0gX19wb3NpdGlKICAgICAg
aXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbjĀ:WR29weShfTV9maKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv
cHlfYmFja3djĀ:oXwb3NpdGlvbiwp
OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX1NvcHkpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zpbmlz
aCwgX19uIC0gX19lbGVtc19hZnRlciwgX194jĀ:cHOwogICAgICAgyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBfX29sZF5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIjĀ:F93B5KTsK
ICAgIHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXpjĀ:5cgX19sZW4gPSBk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19sZwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKIHsK
ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fcnQsIF9fcG9z
aXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2ZpbGxfbihfX25ld19maW5pc2gsIF9fbi94KTsKICAgICAgICBfX25ld19maW5pc2gKICAg
ICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdf
ZmluaXNoICAgICAgfQoKOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwog
ICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFtIF9NX3N0YXJ0
KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdf
ZmluaXNoOwogICAgICBfTV9lbmRfb2ZfcjĀ:mFSA9IF9fbmV3XbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNjĀ:Jb1dEl0ZXJhdG9hbmdl
X2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0Oy9fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAg
ICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhcjĀ:0FG9jPiB0ZW1w
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf
TV9yYW5nZV9pbnNlcnQoaXRlcmF0b3Iwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvYWcpCnsKICBpZiAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX24pOwAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
dGVyjĀ:X0ZmluaXNoIC0gZmluaXNo
ID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9gewogICAgICAgIHVu
aW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsK
ICAgICAgICBfTV9maW5pc2ggKz0gXjĀ:woCAgICAgIGNvcaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJz
dCwjĀ:sY0LCBfX3Bvc2lgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHNlKF9fbWlkLCBfX2Vs
ZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01f
ZmluaXNozdGFydCk7CiAgICAgIF90YXJ0ID0gX19uZXdfc3Rh
cnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX25ld19zdGFydCArIjĀ:GVwogICAgfQogIdGxfdmVjdG9yLmgiIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3RvciIgzCgojIDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMSAzCgoKc3RhdGlj
IGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHlnbmVkIGludCkpOwoKCgoK
CgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l
ZCBpbnQgX01fbWFzazsKICBfX3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu
ZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkge30KCnB1YmxpYzoKICBl0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygwKSB7fQogIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhKCEoKl9NX3AgJiBfTV9tYXNrKH0KICBfQml0X3JlZmVyZW5j
ZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7
CiAgICBlbHNlICpfTV9wICYjĀ:fTtYXNrOwogICA5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IHHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3Jl
ZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vjĀ:dGcykgPT0gYm9vgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuICFib29sKClzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQgZmxpcCgpIHsg
Kl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195
OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVvciA6IHB1YmxpYyByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYgX0JpdF9yZWZlcmVu
Y2UgcmVmZXJlbmNlOwogIGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5z
ZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0Kysg
PT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2jĀ:0gsKICAgICAgKyigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7
CiAgICAgIF9NX29mZnNlIF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAg
fQoKICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0
ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9f
eCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7CiAgICBwX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y
IG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgYn91
cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAg
IGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogICBpdGVyYXRvciBvcGVyYXRvci0t
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfZG93bigpOwogICAg
cmV0dXJuIF9fdG1wOw0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg
X19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogI01f
cCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlm
IChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9IChjĀ:pZlZCBpbnQpIF9AgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWdu
ZWQgaW50KSBfX247CCByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1jĀ:Kn
aXM7CiAgfQo5cGUgX19pKSBjb25zdCB7
CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICV0dXJuIF9fdG1wICs9IF9faTsKICB9
CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0
ZXJhdG9yIF9fdG1wKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBkaWZm
ZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3QgewogICAgcmVuIF9f
V09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZzZXQ7
CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZjĀ:mV2VfdHlwZSBfXYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX3gp
IGNvbnN0IHsKICAldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBfX3gu
X01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIFkgY29u
c3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9feC5fTV9v
ZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0dG9yIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPCBf
X3guX01fb2Zmc2sKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvcgogIDogcHVi
bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pgp7CiAgdWRlZiBi
b29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVCaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0
OwogIHZvaWQgYF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0g
MSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgIHZvaWQg
YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0
ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX0sKICAgIH0KICB9CgogIF9CaXRfY29uc3Rf
aXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0
b3IodW5zaWduaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwg
X01fb2Zmc2V0KF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9faXRlcmF0
b3ImIF9feCkKICAgIDogX01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7
fQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9y
ZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yKys7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0
X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciRtcCA9ICp0
aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3ItLSgpIHsKICAgIGJ1bXBfbigpOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190
bXAgPSAqdGsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25z
dF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CjĀ:CBWZmZXJl
bmNlX01fcCArPSBfX24gLyBfX1dPUkRf
QklUOwogICAgX19uID0gX19uICUgX19XT1JjĀ:JVKICAgIGlmIChNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01f
cDsKICAgIWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09jĀ:ZmcmVuY2Vf
dHlyZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBj
b25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9
CiAgY29uaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsK
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm40bXAgLT0gX19p
OwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9fV09SRF9CSiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNl
dCAtIF9feC5fTV9vZmZzZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl
cmVuY2VwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9CiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHAgIHJldHVybiBf
TV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29s
IG9wZXJhdG9yIT0oY29uc3QgY29uc3RfcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJv
b2wgb3jĀ:F0I8KGNvbnN0X29NX3Ag
PCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZCBfX3guX01fb2Zm
c2V0KTsKICB9Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lz
X3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3Jsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2b3JfYWxsb2NfYmFz
ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2Ep
LCBfTV9zdGFydCgpLCBfTV9maW5pc2wgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3Rl
Y3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1
cm4gZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlfTV9zdGFydC5fTV9w
KQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjĀ:CACAgX01fZW5kXCgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxs
b2NyPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9C
aXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV5pc2g7CiAgdW5zaWdu
ZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRv
cj4KY2xhc3MgX0J2ZWN0b3JfYWxsYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9j
YX90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cTsgfQoKICBfQnZlY3Rv
cl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01f
ZmluaXNoKCksIF9NX2VuZF9vZl9jĀ:yYlKDApIHt9Cgpxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190
eiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Mo
c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphjĀ:Y2ZSgoX19uICsggdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAg
aWYgKF9NX3N0YXJ0Ll9NX3ApCijĀ:Ag9BbGxvY190eXCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0g
c3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRl
cmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5mX3N0b3JhZ2U7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2
ZWN0b3JfYWxsb2NfYmFzZTxfQjĀ:2MiAgICAgICAgIaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYg2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGVsZXNzPgogICAgICAgICAg
X0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKCiAgZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
KSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NUoKTsgfQp9OwoKIyAzNjQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCgoK
CnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yP2wsX0FsbG9jPgogIDogcHVi
bGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0eXBlZGVmIF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPiBfQmFzZTsKCgoibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3GU7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNv
bnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJljĀ:Kib2ludGVyOwoglcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0
ZXJhdG9yOwogIHR5cGVkZWJpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCgog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0J6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfQmFzZTo6Z2V0XG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CiMgNDEzICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbml0
aXplKHNpemVfdHlwZSBfX24pIHsKICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
KF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcShfX24gKyBfX1dPUkRfQklUIC0g
MSkvX19XT1JEX0JJVDsKICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIF9NX2Zp
bmlzaCA9IF9NX3N0YXJ0ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQogIHZvaWQgX01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgaWYgKF9NX2Zz
aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgKl9fcG9zaXRpb24gPSBfX3g7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IHNpemUoKSA/IDIzaXplKCkgOiBfX1dPUkRfQklUOwogICAgICB1bnNpZ25lZCBpbnQq
IF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHVn
aW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICpfX2krKyA9IF9feDsK
ICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9ubmQoKSwgX19pKTsKICAgICAgX01f
ZGVhbGxvY2F0ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f
V09SRF9CSVQgLSAxKSdPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg
MCk7CiAgICB9CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIjĀ:WQX01faW5pdGlhLCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAjĀ:gIucHV0X2l0ZXJRvcigpOwogICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsK
ICAgIF9NX2VuZF9vZjĀ:G9WdlID0gMDsKIX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBsIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9
IDA7CiAgICBkaXN0jĀ:ZSX2ZpcnN0LCBffbik7CiAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIjĀ:nBEl0ZXJhdG9yIICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICAvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg
ICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOwAgfQog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRf
cmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGjĀ:dhRfaXRlcmF0b33QpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZjĀ:3QF9f
bGFzdCwgKCkgPj0gX19uKSB7CiAgICAg
ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBoKSwgX01fZmluaXNoICsgZGlmZmVyZW5j
ZV90eXBlKF9fbikpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsK
ICAgICAgICBfTW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpKSwgX19u
KTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAg
ICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbiBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es
IDApKTsKICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBf
TV9maW5pc2ggjĀ:b3KF9fcG9zaXRp
b2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xrIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAw
KTsKICAgICAgfQogICAgfQogIH0KCgoKcHVibjĀ:goGl0ZXJhdG9yIb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N
X3N0YXJ0OyBgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gcmV2ZX9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdGJlZ2luKCkp
OwogIH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkg
LSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6
ZV90eXBlKnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwog
IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlKTsgfQogIHJl
ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2luKCkg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd
KHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNl
X3R5cGUoKSk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30jĀ:gdjdG9yKHNp
emAgICAgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKjĀ:iACA6IF9CYXNlKCiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3ZlID8gfjAgOiAwKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19u
KQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIF9NX2RpYWxpemUoX19u
KTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogIH0KCiAg
dmVjdG9yKGNvbnN0IHZlY3RvciYgX194IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpIHsK
ICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICBjb3B5KF9feC5iZWdpbigpLCBfX3gu
ZW5kKC9NX3N0YXJ0KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdXRvciBfX2xhc3Qs
CiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpCiAgewogdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2Rp
c3BhdF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjjĀ:SWZWdlciBfX24sgIF9NX2luaXRpYWxpemUoX19uKTsKICAg
IGZpbGwoX01fc3RhcnQuX01fcCwgX05kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXpl
X2RpdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBjĀ:7CgICBfTV9pbml9pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgfQojIDU4OSAiL3Vzci9pbWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKICB+dmVj
dG9yKCkgeyB9CgogIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICBp
ZiAfeCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFj
aXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTVl0aWFsaXplKF9feC5z
aXplKCkpOwogICAgfQogICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsK
ICAgIF9NX2ZpbmlzaCA9IGJlZ2luKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wg
X1B7CiAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwg
X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgI2VydChlbmQoKSwgX19u
IC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBf
X24sIGVuZCgpKTsKICAgICAgZmlfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwg
X194ID8gfjAgOiAwKTsKICAgIH0KICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50cjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190
X3R5cGUpCiAgICB7IGFzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9pZ25fZGlzcGF0Y2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBf
TV9hc3NpZ25fYXV4KF9fZmlycjĀ:F9GFzdCwgX19pddGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWdujĀ:1efSW5wdXRJdGVhc3QsCiAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewAgaXRlcmF0b3IgX19jdXIg
PSBiZWdpbigpOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQo
KTsgKytfX2N1ciwgKytfX2ZpKQogICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgIGVsc2UKICAjĀ:Ag5zZXJ0KGVuZCxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGF7CiAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgZWxzZSB7
CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpOwogICAgICBhZHZhbmNlKF9f
bWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAg
aW5zZXJ0KGVuZCgpLCBfX2wgX19sYXN0KTsKICAgIH0KICB9CgoKCiAgdm9pZCByZXNlcnZl
KHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIHVucbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHko
YmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICBfTV9kZWFsbG9jYXRlKCk7
CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX3EgKyAoX19uI19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICB9CiAgfQoK
ICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVy
ZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7
IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBjb25zdF9yZWVuY2UgYmFjaygpIGNvbnN0IHsg
cmV0dXJuICooZW5kKCkgLSAxKTsgfQogIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICBp
ZiAoX01fZmluaXNoLl9NIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICpfTV9maW5pc2gr
KyA9IF9feDsKICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICBg
dm9pZCBzd2FwKHZlY3RvciYgX194KSB7Cjo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsK
Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7C3dhcChfTV9lbmRfb2Zfc3RvcmFn
ZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGJjĀ:gX4ID0gYm9vbCg9wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX05k
X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2ZpbmlzaCsrID0g
X194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4jĀ:cGaXRpb24sIF9f9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgaWJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2luLCBfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2lu
c2VydF9kaXNwYXRjaGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VyjĀ:X3
cywgKHNpemVlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydFNwYXRjaChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7
CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVjĀ:vcj
YXRlZ29yeSRlL2crKy0zL3N0bF9idmVj
dG9yLmgiIDMKICB2b2lkIGluc2VydChpdGVyYXRvc3Bvc2l0aW9uLCBzaXplX3R5cGUgX19u
LCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICBpZiAoY2FwYWNpdHko
KSAtIHNpemUoKSAjĀ:fXpIHsKICAgICAwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBmaWxsKF9zaXRp
b24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgX01fZmlu
aXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogfQogICAgZWxzZSB7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgIHVuc2lnbmVkIGlu
dCogX19xID0gX0jĀ:l0FsbG9jKF9fbGWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgZmlsbjĀ:F9Swg
X19uLCBfaXRpb24sIGVuZCgpLCBfX2kg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICANX2RlYWxsb2NhdGUoKTsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJ
VDsKICAgICAgXjĀ:3RnQgPSBpdGVyYb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRvciBlcmFzZShpdGVyciBfX3Bv
c2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19w
b3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aWsKICAgICAgLS1fTV9maW5pc2g7CiAgICBy
ZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgjĀ:YXKSB7CiAgICBf
Zmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZvaWQgcmVzaXplKHNjĀ:fdwZSBf
X25ld1YgKF9fbmV3X3NpemUgPCBzaXpl
KCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBkajĀ:XJmNlX3R5cGUoXICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBf
X3gpOwogIH02b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KfTsKCgoK
dHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxsb2M+IGJpdF92ZWN0b3I7CgojIDgzMiVzci9pbmNs
dWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3Rv
ciIgMiAzCiMgNiAiLi4vLi4vLi4vc3JjL2Zyd29yay91dGlsL01lbUluZm8uaCIgMgoKIyA3
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXjĀ:lu5oIiAxIDMKI3Rl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKCgojIDcgIi91c3IvaW5jbHVkZystMy9jc3Rk
ZGVmIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMg
MzMgIi91c3IvaW5jbHVkZS9nKystMy9zdGQyYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZh
Y2UgInN0ZC9zdHJhaXRzLmgiCiMgMzMgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5o
IiAzCgoKCXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJUPgpzdHJ1Y3Qgc3Ry
aW5nX2NoYXJfdHJhaXRzIHsKICB0eXBlZGVmIGNoYXJUIGNoYXJfdHlwZTsKICBzdGF0aWMg
dm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMx
ID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcS9uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hh
cl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAo
Y29uc3Qgcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuICEo
YzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHljĀ:gYsIGNvbnN0
IGBjMik7IH0KICBzdGF0aWMgY2hhcl90
eXBlIGVvcyAoKSB7IHJldHVybiBjaGFyXjĀ:GUTsgfQogIHN0YZXR1cm4gMDsgfQoKCgoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNvbnN0
IGNoYXJwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAg
ICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKICAgICBpZiAobmUg
KHMxW2ldLCBzMltpXSkpCiAgICAgICAgICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6
IDE7CgogICAgICByZXR1cm4gMDsKICAgjĀ:Cic3RhdGljIHNpKICAgIHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3aGlsZSAobmUg
KCpzKyVvcyAoKSkpCiAgICAgICAgKytsOwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3Rh
dGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgYjĀ:l9XBlKiBzMiwg
ICkKICAgICAgICBhc3NpZ24gKHMxW25d
LCBzMltuXSk7CiAgICAgIHJldHVybiBjĀ:KIgIH0KCiAgc3RBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAg
ICAgIXJfdHlwZSBhW25dOwogICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8
IG47ICsraSkKICAgICAgICBhc3NpZ24gKGFbaV0sIHMyW2ldKTsKICAgZm9yIChpID0gMDsg
aSA8IG47ICsraSkKICAgICAgICBhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMx
OwogICAgfQoKICBzdGF0aWMgY2hhcljĀ:BlBzZXQgKGNoYX2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKICAgICAgICBh
c3NpKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9OwoKY2xhc3MgaXN0cmVh
bTsKY2xhc3Mgb3N0cmVhbTsKCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0jdHlwZSIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKZXh0ZXJuICJDIiB7CgojIDQ3ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMwplbnVtCCBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgw
KSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgo
MSAjĀ:oMpIDw8IDgpIDogKCgyKSA8
IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDwKICBfSVNkaWdpdCA9
ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lT
eGRpZ2l0ID0gKCg0KSA8IDggPyAojĀ:PDKDQpKSA8PCA4jZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUp
KSjĀ:A4ksCiAgX0lTcHgpIDogKCgx
IDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPjĀ:DEDwgKDcpKSA8PbGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4
KSkgPDwgOCkgOiAoKDEgPDwgKDgjĀ:+P4KSksCiAgX0lw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkg
PD8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51
bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoPCAoMTEpKSA+PiA4KSkK
fTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQg
c2hvcnQgaW50ICpfX2N0eXBlX2V4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90
b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKCiMgOTEg
c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwplcm4gaW50IGlzY250cmwg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2xvd2VyIChpbnQpIjĀ:m9CgpOwpleHRlcdGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B10IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXludCBpc3hkaWdpdCAoaW50
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0b3VwIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQ9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyNjĀ:i93IvaW5jbHVkZL2crKy0zL2NjdHlwZSIgMiAzCiMgMTA2ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3R0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3Ry
YWl0cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIG2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg
fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3Qg
Y2hhcl90eXBlJiBjMSwgY2QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBj
Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcjĀ:eXJiBjMikKICAgaGFyX3R5cGUgZW9z
ICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19oY2hhcl90eXBlIGEpIHsgcmV0
dXJuIChfX2N0eXBlX2JbKGludCkgKChhKSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lTc3Bh
Y2UpOyB9CgogIHN0YXRpYnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3Qg
Y2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiBtZW1jbXAgKHMxLCBzMiwg
IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAgeyByZXR1
cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBjaGFyX3R5cGNvcHkgKGNoYXJfdHlwZSogczEs
IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSop
IG1lbWNweSAoczEsIHMyjĀ:KTfQogIHN0YXRpsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQoBf
X2Vycm51bSwgX19jbCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgjĀ:IC
ICAgICAgX193ICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybilkIF9fYXNzZXJ0IChjb25zdCBjaGFy
ICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93
ICgpIF9fYXR0cmliX18gKChfX25vcmV0dXJuX18pKTsKCgp9CgojIDcgIi91c3IvaW5jbHVk
ZS9nKystMy9jYXNzZXJ0IiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC90cmlu
Zy5oIiAyIDMKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmlu
Z19jaGFyX3RyYWl0czxjaGFyVD4sCiAgICAgICAgIjĀ:GFyBBbGxvY2F0bCnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3Qg
bGVuLCByZXMsIHJKICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2QmIG9w
ZXJhdG9yW10gKHNpemVfdCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdy
YWIgKCkgeyBpZiAoc2VsZmlzaCkgcmV0dXJuIGNsICgpOyArK3JlZjsgcmV0dXJuIGRhdGEg
KCk7IH0KIyAxMTQgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9p
ZCByZWxlYXNlICsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CgoKICAgIGlubGlu
ZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogIW5saW5l
IHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMg
UmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFgY2xvbmUgKCk7CgogICAgaW5saW5lIHZv
aWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQg
bW92ZSAoc2l6ZCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0
IChzaXplX3QsIGNvbnN0IGNoYXJULCBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0jĀ:YmbCBl
eGNlc3NlIHN0YXRpYyBzaXplX3QgZnJv
Yl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJl
cCAmKTsKICB9OwoKcHVibGljOgoKICB0eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBl
ZGVmIHR5cGVujĀ:IHYWl0czo6Y2hh
Y2F0b3IgYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNl
OwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvb3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJU
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiBwb2ludGVjĀ:0ZhdG9yOwogIHRv
cjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZX9pdGVyYXRv
cjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4g
cmVpbnRlcnRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnAp
IHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWM6CiAgY29u
c3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAg
c2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBz
aXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXpl
X3R5cGUgYjĀ:WNHkgKCkgY29uc2l6
ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtjĀ:L3emVvZiAo
Y2hgeyByZXR1cm4gc2l6ZSAoKSA9PSAw
OyB9CgoKICBiYXNpY19zdHJpbmcmIG9wZX9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp
CiAgICB7CiAgICAgIGlmICgmc3RyICE9IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQg
PSBzdHIuICgpLT5ncmFiICgpOyB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhw
bGljaXQgYmFzaWNfc3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSBKICBiYXNpY19z
dHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgp
KSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbjĀ:GJ2ljX3N0cmluZbiA9IG5wb3MpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNz
aWduIChjĀ:sIvcywgbik7IH0zaXpl
X3R5cGUgbikKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ2MsIG4pOyB9CiAg
YmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkg
eyBhc3NpZ24gKHMpOyB9CiAgYmFzaWNfjĀ:aWIChzaXplX3R5uZ3JhYiAoKSkgeyBhc3NpZ24gKG4sIGMpOyB9CgogIHRlbXBsYXRlPGNs
YXNzIEV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2lu
LCBJbnB1dEl0ZXJhdG9yIF9fZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcjĀ:mFCgpKSB7IGFz
Y19zdHJpbmcgKCkKICAgIHsgcmVwICgp
LT5yZWxlYXNlICgpOyB9CgogIHZvaWQjĀ:hcoYmFzaWNfc3RBzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJhc2ljX3N0cmluZyYgYXBwZW5k
IChjbCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0IHJlcGxhY2UgKGxl
bmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgbiAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwg
MCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJlbiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcm
IGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVjĀ:yZsYWNlIChsZW5NsYXNzIElucHV0SXRlcmF0b3I+CiAgICBi
YXNpY19zdHJpbmcmIGFwcGVuZChJbjĀ:ElXJhdG9yIGZpcIHJldHVybiByZXBsYWNlIChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFz
dCkjĀ:KCgdm9pZCBwdXNfYyk7IH0K
CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmYgc3RyLCBzaXplX3R5
cGUgcG9zID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQog
ICAgeyByZXR1cm4gcmVwbGFjZSAobnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3Ry
aW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJl
cGjĀ:UgAsIG5wb3MsIHNvbnN0IGNo
YXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omd0aCAocykpOyB9CiAg
YmFzaWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoMCwgbnBvcywgbiw7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv
cj4KICAgIGJhc2ljX3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl
c3IgbGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwg
Zmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0IChjb25zdCBjaGFyVCog
cykKICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAo
Y2hhclQgYykKICAgIHsgcmV0dXFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBv
cGVyYXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAo
KTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJldHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByYXRvcis9IChjaGFyVCBj
KQogICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAo
c2l6ZV90eXBlIHBvczEsIGNvbGJhc2ljX3N0cmluZyYgc3RyLAogICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0uIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGlu
c2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIHVfdHlwZSBuKQogICAgeyBy
ZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChz
aXplX3R5cGUgcG9zLCBjb25zaGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBz
LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAw
LCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvcCBjaGFyVCBjKQogICAgeyBz
aXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgp
LCAxLCBjKTsgc2VsZmlzaCAjĀ:KIgICAgcmV0dXJluc2VydChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2V90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwg
biwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnjĀ:KCKyBfX287IH0KKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElu
cHV0SXRlcmF0b3IgZmlyc3lucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAo
cCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZjĀ:b3PSAwLCBzaXplYWNlIChwb3MsIG4s
IChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRlcmFjĀ:gZhc2UoaXRlcmFBiZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEs
IChzaXplX3R5cGUpMCwgKXJUKTApOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2lu
KCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogjĀ:
ezaXplX3R5cGUlIChfX28sIGwtZiwg
KHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKTAgICAgcmV0dXJuIGliZWdpbigp
ICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVf
dHlwZSBuMSwgY29uc3QgjĀ:aWc3RyaW5nJiBzlX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3Nu
ZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZjĀ:ikiAgYmFzaWNfcaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gcmVwbGFocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJh
c2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXR5
cGUgbjIsIGNoYXJUIGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywg
c2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVyjĀ:ZXYWNlIChwb3MssYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNv
bnN0IGJhc2ljX3N0cmYgc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4g
KCksIGkyIC0gaTEsIHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdjĀ:GkLCBpdGVyYXRvKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4pOyB9CiAgYmFzaWNfc3RyaW5n
JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gcmVwbSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNf
c3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwLCBj
aGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4s
IGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXF0b3I+CiAgICBiYXNpY19zdHJpbmcm
IHJlcGxhY2UoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIElucHV0SXRljĀ:b3ajEsIElucHV0hdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVvcyAoKTsgfQogIHZjĀ:gdp
cXVlICgpIHd0aCAoKSwgdHJ1ZSk7IH0K
ICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7ICAoKS0+c2VsZmlzaCA9IHRydWU7IH0K
CnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewog
ICAgICBpZiAocG99IGxlbmd0aCAoKSkKICAgICAgICByZXR1cm4gZW9zICgpOwogICAgICBy
ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXSl6ZV90
eXBlIHBvcykKICAgIHsgc2VsZmlzaCAoKTsgcmV0dXJuICgqcmVwICgpKVtwb3NdOyB9CgogIHJl
ZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykKICAgICAgICAgKCh2b2lkKSAoKCEocG9zID49
IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPj0gbGVuZ3RoICgpKSIs
ICIvdXNyL2luY2jĀ:UvsrLTMvc3RkL2U9OX18pLCAwKSkpOwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQogInN0X3Jl
ZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgKCh2b2lkKSAoKCEo
cG9zID49IGxlbmd0aCAoKSkpID8gMCA6IChfX2FjĀ:ydmYWlsICgiIShUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCAzMzMsIF9fUFJFVFRZ
X0ZVTkNUSU9OXjĀ:CASkpOwogICAgIdmF0ZToKICB2b2lkIHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzjĀ:biKCpy
ZXAgKCkKICBjb25zdCBjaGFyVCogY19z
dHIgKCkgY29uc3QKICAgIHsgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gIiI7IHRlcm1pbmF0
ZSAoKTsgcmV0dXJuIGRhdGEgKCk7IH0KICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJU
IGMpOwogIHZvjĀ:cmaXplIChzaXpl
OyB9CiAgdm9pZCByZXNlcnZlIChzaXplX3R5cGUpIHsgfQoKICBzaXplX3R5cGUweSAoY2hh
clQqIHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlw
ZSBmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIjĀ:iw2l6ZV90eXBlIIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBz
aXplX3R5cGUjĀ:uZoY29uc3QgY2hu
KSBjb25zdDsKICBzaXplX3R5cGUgZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemlwZSBwb3Mg
PSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykp
OyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNoYXJUIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsK
CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv
cyA9IG5wb3NvbnN0CiAgICB7IHJldHVybiByZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIu
bGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBzdAogICAgeyByZXR1cm4gcmZpbmQgKHMsIHBv
cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6
ZV90eXBlIyA9IG5wb3MpIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29u
c3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zICAgeyByZXR1
cm4gZmluZF9maXJzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6
ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBz
LCBzaXpljĀ:cGcG9zID0gMCkgKHMs
IHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5jĀ:pc0X29mIChj
aGAgIHsgcmV0dXJuIGZpbmQgKGMsIHBv
cyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfbF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs
IHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChz
dHIuZGFpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29m
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIGNvbnN0OwogIHNp
emVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIGZpjĀ:bGdF9vZiAocywg6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBv
cyA9IGMpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5
cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgcjĀ:CBXplX3R5cGUg
Zmlyc3Rfbm90X29mIChzdHIuZGF0YSgp
LCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0zaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNv
bnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90
eXBlImRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAocywgLCB0cmFpdHM6Omxl
bmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3Q7CgNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJl
dHVyjĀ:aWX2xhc3Rfbm90KSk7IH0K
ICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQsIHNpemVfdHlwZSBw
b3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZ3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmlu
ZF9sYXN0X25vdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBl
IGZfbGFzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsK
CiAgYmFzaWNfc3RyaW5nIHN1YnN0ciAoc2l6ZV90eXBlIHBvcyA9IDNpemVfdHlwZSBuID0g
bnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0K
CiAgaW50IGNvbXBhcmUgKGNvbnN0jĀ:c2X3N0cmluZyYglIG4gPSBucG9zKSBjb25zdDsKCiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJU
KijĀ:BzplX3R5cGUgcGBhcmUgKGNv
bnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKIHsgcmV0dXJuIGNvbXBh
cmUgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQoKICBpdGVyYXRvciBiZWdpbiAoKSB7
IHNlbGZpc2ggKCk7IHJldHVybiA0aGlzKVswXTsgfQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNl
bGZpc2ggKCk7IHJldHVybiAmKCp0aGlzKVtsZW5ndGggKCldOyB9Cgpwcml2YXRlOgogIGl0ZXJh
dGliZWdpbiAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3Ig
aWVuZCAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpW2xlbmd0jĀ:KVIH0KCnB1YmxpzdCB7IHJldHVybiBpYmVnaW4gKCk7IH0KICBj
b25zdF9pdGVyYXRvciBlbmQgKC9uc3QgeyByZXR1cm4gaWVuZCAoKTsgfQoKICByZXZlcnNl
X2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0K
jĀ:b2dF9yZXZlcnNldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgcmV2ZXJjĀ:pdyYXRvciByZW5VnaW4gKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgY29ucCAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
KGJlZ2luICgpKTsgfQoKcHJpdmF0ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vzYXZlKTsKICBzdGF0aWMgc2l6ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFy
VCBjLCBzaXplX3R5cGUgeHBvcywgc2l6ZV90eXBlIGxlbik7Ci5saW5lIGJvb2wgY2hlY2tf
cmVhbGxvYyAoc2l6ZV90eXBlIHMpIGNvbnN0OwoKICBzdGF0aWMgUmVwIG5pbFJlcDsKICBjaGFy
VCAqZGF0Owp9OwoKCnRlbXBsjĀ:IDbGFzcyBjaGFy+IHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgpiYXNpY19zdHJpbmcgPGNJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYjĀ:iBiwgSW5wdXRJdCgp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxl
bmd0aCAoKTsKICBzaXplX3RgcG9zID0gaTEgLSBpYmVnaW4gKCk7CiAgc2l6ZV90eXBlIG4x
ID0gaTIgLSBpMTsKICBzaXplX3R5cGUgbjIgPSBqMiAtIGoxOwoKICAoKHZvaWQpICgoIShwb3iBsZW4pKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuKSIsICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCA0NDYsIF9fUFJFX0ZVTkNUSU9OX18pLCAwKSkp
OwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCgh
KGxlbiAtIG4xID4gbWF4X3UgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShs
ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYdHJpbmcuaCIsIDQ0OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgc2l6ZV90IG5ld2xl
biA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFjĀ:jIuZXdsZW4pKQoAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0
YSAoKSwgcG9zKTsKICAgIjĀ:C029weSAocG9zIKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3Mp
ICAgICAgdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAgKHApOwog
ICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3hwb3MgKyBuMiwgZGF0YSAoKSAr
IHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2ox
LCArK3BvcykKICAgICAgjĀ:cmdHM6OmFzc2lngcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPGVyYXRvcisgKGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZyAjĀ:hcsIHRyYWl0cyw5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYX5k
IChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKCBy
ZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
Cm9wZXJhdG9yKyAoY2hhclQgbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiBzdHIgKDEsIGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyCgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCxvY2F0b3I+Cm9wZXJhdG9yKyAoY29u
c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNo
YXJUKiByaHMpCnsKjĀ:YXY19zdHJpbmcgsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxjĀ:gPs
YXNzIGNoYX4KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjaGFyVCByaHMpCnsKICBiYXNp
Y19zdHJpbmcgPGNULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBl
bmQgKDEsIHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBjĀ:Y2b3I+JiBsaHMs8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChsaHjĀ:9tFyZSAocmhzKSCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAo
Y29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu
IChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJU
KiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
bGhzLAogICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykg
PiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhz
LmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBjaGFyVCog
bGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykK
ewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+
IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29u
c3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChs
aHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0
IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChy
aHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy
ZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5j
b21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4g
KGxocy5jb21wYXJlIChyaHMpID49IDApOwp9CgpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFt
Owp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBp
c3RyZWFtJgpvcGVyYXRvcj4+IChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+IG9zdHJlYW0mCm9wZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVh
bSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYsIGNoYXJUIGRlbGlt
ID0gJ1xuJyk7Cgp9CgoKIyAyOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIg
MSAzCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEp
CnsKICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJU
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
UmVwOjoKb3BlcmF0b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9j
YXRlKHB0ciwgc2l6ZW9mKFJlcCkgKwogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PFJlcCAqPihwdHIpLT5yZXMgKgogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg
KGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6ZV90IGkgPSAxNjsKICB3
aGlsZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJv
Yl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMg
PSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
Y2hhclQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNs
b25lICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBwLT5jb3B5ICgwLCBkYXRh
ICgpLCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0YSAoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpleGNlc3Nf
c2xvcCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAocyA8PSAxNiA/IDE2IDog
cykgPCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAg
cyArPSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4g
KHJlcCAoKS0+cmVmID4gMQogICAgICAgICAgfHwgcyA+IGNhcGFjaXR5ICgpCiAgICAgICAgICB8
fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlw
ZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkK
ICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3Nh
dmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAt
PmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAo
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNp
emVfdHlwZSBuMSwKICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw
b3MyLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7
CgogIGlmIChwb3MxID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+
PSBsZW4yKQogICAgcmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgKCh2b2lkKSAoKCEocG9zMiA+
IGxlbjIpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zMiA+IGxlbjIpIiwgIi91c3IvaW5j
bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAxMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwoKICBpZiAobjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVuMiAtIHBvczI7CgogIHJl
dHVybiByZXBsYWNlIChwb3MxLCBuMSwgc3RyLmRhdGEgKCkgKyBwb3MyLCBuMik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2
b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY29weSAo
c2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFp
dHM6OmNvcHkgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVfdCBwb3MsIGNvbnN0
IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjptb3ZlIChkYXRhICgp
ICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIpCnsKICBj
b25zdCBzaXplX3R5cGUgbGVuID0gbGVuZ3RoICgpOwogICgodm9pZCkgKCghKHBvcyA+IGxlbikp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW4pIiwgIi91c3IvaW5jbHVkZS9nKyst
My9zdGQvYmFzdHJpbmcuY2MiLCAxNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlm
IChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAt
IG4xID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBu
MSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu
Y2MiLCAxNTksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBs
ZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAg
UmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCks
IHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAt
IChwb3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAgKHAp
OwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAo
KSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChwb3Ms
IHMsIG4yKTsKICAgIaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu
Y2MiLCAxOTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBs
ZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAg
UmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCks
IHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAt
IChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7
CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgp
ICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAocG9zLCBj
LCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9p
ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVf
dHlwZSBuLCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAoKCEobiA+IG1heF9zaXplICgpKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIhKG4gPiBtYXhfc2l6ZSAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5jYyIsIDIyMCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIGlm
IChuID4gbGVuZ3RoICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAg
ICBlcmFzZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNo
YXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogICgodm9pZCkgKCgh
KHBvcyA+IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW5ndGgg
KCkpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAyMzMsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwoKICBpZiAobiA+IGxlbmd0aCAoKSAtIHBvcykKICAgIG4gPSBs
ZW5ndGggKCkgLSBwb3M7CgogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAg
cmV0dXJuIG47Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4
cG9zID0gcG9zOwogIGZvciAoOyB4cG9zICsgbiA8PSBsZW5ndGggKCk7ICsreHBvcykKICAgIGlm
ICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpjb21w
YXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmlu
ZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBs
ZW4pCnsKICBmb3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0
ciBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykg
Y29uc3QKewogIHJldHVybiBfZmluZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAg
ICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9z
ID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAg
IGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpj
b21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChj
aGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICBy
ZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4g
cG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlm
ICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJl
dHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf
dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0
X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsK
ICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQog
ICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0
dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXpl
X3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9z
OwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBb
eHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90
IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChf
ZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9z
OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5k
X2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4
cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJh
aXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4g
bnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUK
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9v
ZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09
IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUg
cG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXpl
X3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9z
OwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgp
IFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNf
c3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgKCh2b2lk
KSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxl
bmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDM5OSwgX19Q
UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9z
OwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gc3RyLmxlbmd0aCAo
KSkKICAgIHJsZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChk
YXRhICgpICsgcG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVy
biByOwogIGlmIChybGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAt
IHBvcykgLSBzdHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVf
dHlwZSBuKSBjb25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
ZC9iYXN0cmluZy5jYyIsIDQxOCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIHNpemVf
dCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwog
IGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAo
ciAhPSAwKQogICAgcmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
c3RyZWFtICYKb3BlcmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5p
cGZ4MCAoKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgp
OwogICAgICBzLnJlc2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAg
IGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CiAgICAgICAgICBpZiAoY2ggPT0gKC0xKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlzLnNldHN0YXRlIChpb3M6OmVvZmJpdCk7CiAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHRyYWl0czo6aXNf
ZGVsIChjaCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzYi0+c3VuZ2V0YyAoKTsKICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgcyArPSBzdGF0aWNfY2Fz
dDxjaGFyVD4gKGNoKTsKICAgICAgICAgIGlmICgtLXcgPT0gMSkKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQog
ICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9w
ZXJhdG9yPDwgKG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAg
ICB7CiAgICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1
ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAg
ICAgICAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKICAgICAgICAgIGlmIChjaCA9PSAoLTEpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGNvdW50ID09IDAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICsrY291bnQ7CgogICAgICAgICAgaWYgKGNoID09IGRl
bGltKQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBzICs9IHN0YXRpY19jYXN0PGNoYXJU
PiAoY2gpOwoKICAgICAgICAgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CiAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgaXMuaXNmeCAo
KTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcApiYXNpY19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0geyAw
LCAwLCAxLCBmYWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Ojpu
cG9zOwoKfQojIDY2MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKIyA3
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMKCmV4dGVybiAiQysrIiB7CnR5cGVkZWYg
YmFzaWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7Cgp9CgojIDcgIi4uLy4uLy4uL3NyYy9mcmFtZXdv
cmsvdXRpbC9NZW1JbmZvLmgiIDIKCgoKCgoKCmNsYXNzIE1lbUluZm8gewpwdWJsaWM6CgoKCgog
ICAgY2xhc3MgUHJvY01lbSB7CiAgICAgIHB1YmxpYzoKICAgICAgICBsb25nIGRhdGFTaXplOwog
ICAgICAgIGxvbmcgcmVzaWRlbnREYXRhU2l6ZTsKICAgICAgICBsb25nIHJlc2lkZW50U3RhY2tT
aXplOwogICAgfTsKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0ID0gMDsKCgoK
CgogICAgdGVtcGxhdGU8Y2xhc3MgRUxFTUVOVD4KICAgIHN0YXRpYyBpbnQgdmVjdG9yU2l6ZShj
b25zdCB2ZWN0b3I8RUxFTUVOVD4mIHZlY3QpIHsKICAgICAgICByZXR1cm4gc2l6ZW9mKHZlY3Rv
cjxFTEVNRU5UPikgKyAodmVjdC5jYXBhY2l0eSgpICogc2l6ZW9mKEVMRU1FTlQpKTsKICAgIH0K
CgoKCgogICAgdGVtcGxhdGU8Y2xhc3MgRUxFTUVOVD4KICAgIHN0YXRpYyBpbnQgdmVjdG9ySW5m
byhjb25zdCB2ZWN0b3I8RUxFTUVOVD4mIHZlY3QpIHsKCiAgICAgICAgaW50IHRvdGFsID0gc2l6
ZW9mKHZlY3RvcjxFTEVNRU5UPikKICAgICAgICAgICAgKyAodmVjdC5jYXBhY2l0eSgpICogc2l6
ZW9mKEVMRU1FTlQpKTsKICAgICAgICBpbnQgbGVuID0gdmVjdC5zaXplKCk7CiAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB0b3RhbCArPSAodmVjdFtp
XSkubWVtVXNhZ2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfQoKCgoK
CiAgICB0ZW1wbGF0ZTxjbGFzcyBFTEVNRU5UPgogICAgc3RhdGljIGludCBwdHJWZWN0b3JJbmZv
KGNvbnN0IHZlY3RvcjxFTEVNRU5UPiYgdmVjdCkgewoKICAgICAgICBpbnQgdG90YWwgPSBzaXpl
b2YodmVjdG9yPEVMRU1FTlQ+KQogICAgICAgICAgICArICh2ZWN0LmNhcGFjaXR5KCkgKiBzaXpl
b2YoRUxFTUVOVCkpOwogICAgICAgIGludCBsZW4gPSB2ZWN0LnNpemUoKTsKICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIHRvdGFsICs9ICh2ZWN0W2ld
KS0+bWVtVXNhZ2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfQoKCgoK
ICAgIHN0YXRpYyBpbnQgb2JqU2l6ZShjb25zdCBzdHJpbmcmIHN0cikgewogICAgICAgIHJldHVy
biBzaXplb2Yoc3RyaW5nKSArIHN0ci5jYXBhY2l0eSgpOwogICAgfQoKCgoKICAgIHN0YXRpYyBQ
cm9jTWVtIGdldFByb2NNZW1TaXplKCk7Cn07CgojIDIxICIuLi8uLi8uLi9zcmMvZnJhbWV3b3Jr
L2RwLXN0cnVjdHMvUHJvYkFycmF5LmgiIDIKIyAzMCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9k
cC1zdHJ1Y3RzL1Byb2JBcnJheS5oIgpjbGFzcyBQcm9iQXJyYXk6IHB1YmxpYyBNZW1JbmZvIHsK
IHByaXZhdGU6CiAgICBpbnQgbGVuZ3RoOwogICAgaW50IGVsZW1lbnREaXN0OwogICAgUEdGUHJv
YiogcHJvYnM7CiAgICBib29sIG93bk1lbW9yeTsKCiAgcHVibGljOgoKCgoKCgogICAgUHJvYkFy
cmF5KGludCBsZW4gPSAwLAogICAgICAgICAgICAgIFBHRlByb2IgaW5pdFByb2IgPSBQR0ZQcm9i
OjpaRVJPKToKICAgICAgICBsZW5ndGgobGVuKSwKICAgICAgICBlbGVtZW50RGlzdCgxKSwKICAg
ICAgICBwcm9icyhfX251bGwpLAogICAgICAgIG93bk1lbW9yeSh0cnVlKSB7CiAgICAgICAgaWYg
KGxlbiA+IDApIHsKICAgICAgICAgICAgcHJvYnMgPSBuZXcgUEdGUHJvYltsZW5dKGluaXRQcm9i
KTsKICAgICAgICB9CiAgICB9CgoKCgogICAgUHJvYkFycmF5KGNvbnN0IFByb2JBcnJheSYgc3Jj
KTsKCgoKCgogICAgdm9pZCBzZXRTdG9yYWdlKGludCBsZW4sCiAgICAgICAgICAgICAgICAgICAg
UEdGUHJvYiogc3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbERpc3QgPSAxKSB7
CiAgICAgICAgaWYgKG93bk1lbW9yeSAmJiAocHJvYnMgIT0gX19udWxsKSkgewogICAgICAgICAg
ICBkZWxldGVbXSBwcm9iczsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoPSBsZW47CiAgICAgICAg
ZWxlbWVudERpc3QgPSBjZWxsRGlzdDsKICAgICAgICBwcm9icyA9IHN0b3JhZ2U7CiAgICAgICAg
b3duTWVtb3J5ID0gZmFsc2U7CiAgICB9CgoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGlu
dCBuZXdMZW4pOwoKCgoKICAgIHZpcnR1YWwgflByb2JBcnJheSgpOwoKCgoKICAgIGlubGluZSBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3QgewogICAgICAgIHJldHVybiBsZW5ndGg7CiAgICB9CgoKCgog
ICAgaW5saW5lIGNvbnN0IFBHRlByb2ImIG9wZXJhdG9yW10oaW50IGlkeCkgY29uc3QgewogICAg
ICAgICgodm9pZCkgKCgoaWR4ID49IDApICYmIChpZHggPCBsZW5ndGgpKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoIihpZHggPj0gMCkgJiYgKGlkeCA8IGxlbmd0aCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay9kcC1zdHJ1Y3RzL1Byb2JBcnJheS5oIiwgOTksIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwogICAgICAgIHJldHVybiBwcm9ic1tpZHgqZWxlbWVudERpc3RdOwogICAgfQoKCgoK
ICAgIGlubGluZSBQR0ZQcm9iJiBvcGVyYXRvcltdKGludCBpZHgpIHsKICAgICAgICAoKHZvaWQp
ICgoKGlkeCA+PSAwKSAmJiAoaWR4IDwgbGVuZ3RoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIo
aWR4ID49IDApICYmIChpZHggPCBsZW5ndGgpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvZHAt
c3RydWN0cy9Qcm9iQXJyYXkuaCIsIDEwNywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICAgICAgcmV0dXJuIHByb2JzW2lkeCplbGVtZW50RGlzdF07CiAgICB9CgoKCgogICAgaW5saW5l
IGNvbnN0IFBHRlByb2ImIGdldChpbnQgaWR4KSBjb25zdCB7CiAgICAgICAgKCh2b2lkKSAoKChp
ZHggPj0gMCkgJiYgKGlkeCA8IGxlbmd0aCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKGlkeCA+
PSAwKSAmJiAoaWR4IDwgbGVuZ3RoKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVj
dHMvUHJvYkFycmF5LmgiLCAxMTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAg
IHJldHVybiBwcm9ic1tpZHgqZWxlbWVudERpc3RdOwogICAgfQoKCgoKICAgIGlubGluZSBQR0ZQ
cm9iJiBnZXQoaW50IGlkeCkgewogICAgICAgICgodm9pZCkgKChpZHggPj0gMCkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCJpZHggPj0gMCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVj
dHMvUHJvYkFycmF5LmgiLCAxMjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAg
ICgodm9pZCkgKChpZHggPCBsZW5ndGgpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiaWR4IDwgbGVu
Z3RoIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvZHAtc3RydWN0cy9Qcm9iQXJyYXkuaCIsIDEy
NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIHByb2JzW2lkeCpl
bGVtZW50RGlzdF07CiAgICB9CgoKCgogICAgdm9pZCB6ZXJvKCk7CgoKCgoKCiAgICBpbmxpbmUg
UEdGUHJvYiBpbmNyKGludCBpZHgsIFBHRlByb2IgdmFsdWUpIHsKICAgICAgICBQR0ZQcm9iJiBw
cm9iID0gZ2V0KGlkeCk7CiAgICAgICAgcHJvYiArPSB2YWx1ZTsKICAgICAgICByZXR1cm4gcHJv
YjsKICAgIH07CiMgMTUyICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFy
cmF5LmgiCiAgICB2b2lkIGFkZChjb25zdCBQcm9iQXJyYXkmIGFycmF5Mik7CiMgMTYxICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFycmF5LmgiCiAgICB2b2lkIGVsZW1l
bnRQcm9kdWN0KGNvbnN0IFByb2JBcnJheSYgYXJyYXkyKTsKCgoKCiAgICB2b2lkIG5vcm1hbGl6
ZSgpOwoKCgoKCgoKICAgIFBHRlByb2Igc3F1YXJlRGlmZihjb25zdCBQcm9iQXJyYXkmIGFycmF5
MikgY29uc3Q7CiMgMTg0ICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFy
cmF5LmgiCiAgICB2b2lkIG1peChkb3VibGUgbWl4UGVyY2VudCwKICAgICAgICAgICAgIGNvbnN0
IFByb2JBcnJheSYgYXJyYXkyKTsKCgoKCiAgICB2b2lkIHByaW50KG9zdHJlYW0mIG91dGZpbGUp
OwoKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0Owp9OwoKCgojIDIwICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYk1hdHJpeEFsbG9jYXRvci5oIiAxCmNs
YXNzIFByb2JBcnJheTsKCgoKCmNsYXNzIFByb2JNYXRyaXhBbGxvY2F0b3IgewogIHB1YmxpYzoK
CgoKCiAgICB2aXJ0dWFsIH5Qcm9iTWF0cml4QWxsb2NhdG9yKCkgewogICAgfQojIDQ0ICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYk1hdHJpeEFsbG9jYXRvci5oIgogICAg
dmlydHVhbCB2b2lkIGFsbG9jQXJyYXlzKGludCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvYkFycmF5KiBhcnJheVB0cnNbXSkgPSAwOwoKfTsKCgoKCnRlbXBsYXRlPGNsYXNz
IFBST0JBUlJBWT4KY2xhc3MgUHJvYk1hdHJpeEFsbG9jYXRvclRtcGw6IHB1YmxpYyBQcm9iTWF0
cml4QWxsb2NhdG9yIHsKICBwcml2YXRlOgogICAgUFJPQkFSUkFZKiBwcm9iQXJyYXlPYmpzOwog
IHB1YmxpYzoKCgoKICAgIFByb2JNYXRyaXhBbGxvY2F0b3JUbXBsKCk6CiAgICAgICAgcHJvYkFy
cmF5T2JqcyhfX251bGwpIHsKICAgIH0KCgoKCiAgICB+UHJvYk1hdHJpeEFsbG9jYXRvclRtcGwo
KSB7CiAgICAgICAgaWYgKHByb2JBcnJheU9ianMgIT0gX19udWxsKSB7CiAgICAgICAgICAgIGRl
bGV0ZVtdIHByb2JBcnJheU9ianM7CiAgICAgICAgfQogICAgfQoKCgoKICAgIHZpcnR1YWwgdm9p
ZCBhbGxvY0FycmF5cyhpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2JB
cnJheSogYXJyYXlQdHJzW10pIHsKICAgICAgICBpZiAocHJvYkFycmF5T2JqcyAhPSBfX251bGwp
IHsKICAgICAgICAgICAgZGVsZXRlW10gcHJvYkFycmF5T2JqczsKICAgICAgICAgICAgcHJvYkFy
cmF5T2JqcyA9IF9fbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA+IDApIHsKICAgICAg
ICAgICAgcHJvYkFycmF5T2JqcyA9IG5ldyBQUk9CQVJSQVlbbGVuXTsKICAgICAgICAgICAgZm9y
IChpbnQgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewogICAgICAgICAgICAgICAgYXJyYXlQ
dHJzW2lkeF0gPSAmKHByb2JBcnJheU9ianNbaWR4XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9Cn07CgojIDIwMSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9kcC1zdHJ1Y3RzL1Byb2JB
cnJheS5oIiAyCgoKCgoKCmNsYXNzIFByb2JBcnJheUFsbG9jOiBwdWJsaWMgUHJvYk1hdHJpeEFs
bG9jYXRvclRtcGw8UHJvYkFycmF5PiB7CiAgcHVibGljOgoKCgogICAgaW5saW5lIFByb2JBcnJh
eUFsbG9jKCkgewogICAgfQp9OwoKIyAyMCAiUHJvYk1hdHJpeC5oIiAyCgoKCiMgNTggIi91c3Iv
aW5jbHVkZS9hc3NlcnQuaCIgMSAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNo
YXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9f
Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRp
b24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQoKIyAyMyAiUHJvYk1hdHJpeC5oIiAyCiMgMzgg
IlByb2JNYXRyaXguaCIKY2xhc3MgUHJvYk1hdHJpeDogcHVibGljIE1lbUluZm8gewogIHByaXZh
dGU6CiAgICBpbnQgbnVtUm93czsKICAgIGludCBudW1Db2x1bW5zOwoKCiAgICBQR0ZQcm9iKiBt
ZW1vcnk7CgoKICAgIFByb2JBcnJheSoqIHJvd3M7CiAgICBQcm9iQXJyYXkqKiBjb2x1bW5zOwoK
CiAgICBQcm9iTWF0cml4QWxsb2NhdG9yKiByb3dBbGxvY2F0b3I7CiAgICBQcm9iTWF0cml4QWxs
b2NhdG9yKiBjb2x1bW5BbGxvY2F0b3I7CgoKCgogICAgdm9pZCByZWxlYXNlKCk7CgogIHB1Ymxp
YzoKIyA3MCAiUHJvYk1hdHJpeC5oIgogICAgUHJvYk1hdHJpeChpbnQgbnVtTWF0cml4Um93cyA9
IDAsCiAgICAgICAgICAgICAgIGludCBudW1NYXRyaXhDb2x1bW5zID0gMCwKICAgICAgICAgICAg
ICAgUHJvYk1hdHJpeEFsbG9jYXRvciogcm93QWxsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAg
IFByb2JNYXRyaXhBbGxvY2F0b3IqIGNvbHVtbkFsbG9jID0gX19udWxsKTsKCgoKCiAgICB2aXJ0
dWFsIH5Qcm9iTWF0cml4KCk7CgoKCgoKICAgIHZvaWQgcmVzaXplKGludCBudW1NYXRyaXhSb3dz
LAogICAgICAgICAgICAgICAgaW50IG51bU1hdHJpeENvbHVtbnMpOwoKCgoKICAgIGlubGluZSBp
bnQgZ2V0TnVtUm93cygpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbnVtUm93czsKICAgIH0KCgoK
CiAgICBpbmxpbmUgY29uc3QgUHJvYkFycmF5KiBnZXRSb3dPYmooaW50IHJvdykgY29uc3Qgewog
ICAgICAgICgodm9pZCkgKCgocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCIocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSIsICJQcm9iTWF0cml4
LmgiLCA5OCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIHJvd3Nb
cm93XTsKICAgIH0KCgoKCiAgICBpbmxpbmUgUHJvYkFycmF5KiBnZXRSb3dPYmooaW50IHJvdykg
ewogICAgICAgICgodm9pZCkgKCgocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSIsICJQcm9iTWF0
cml4LmgiLCAxMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIHJldHVybiBy
b3dzW3Jvd107CiAgICB9CgoKCgoKICAgIGlubGluZSBQR0ZQcm9iJiBnZXQoaW50IHJvdywgaW50
IGNvbHVtbikgewogICAgICAgIHJldHVybiBnZXRDb2x1bW5PYmooY29sdW1uKS0+Z2V0KHJvdyk7
CiAgICB9CgoKCgogICAgaW5saW5lIGludCBnZXROdW1Db2x1bW5zKCkgY29uc3QgewogICAgICAg
IHJldHVybiBudW1Db2x1bW5zOwogICAgfQoKCgoKICAgIGlubGluZSBQcm9iQXJyYXkqIGdldENv
bHVtbk9iaihpbnQgY29sdW1uKSB7CiAgICAgICAgKCh2b2lkKSAoKChjb2x1bW4gPj0gMCkgJiYg
KGNvbHVtbiA8IG51bUNvbHVtbnMpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIihjb2x1bW4gPj0g
MCkgJiYgKGNvbHVtbiA8IG51bUNvbHVtbnMpIiwgIlByb2JNYXRyaXguaCIsIDEyOSwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIGNvbHVtbnNbY29sdW1uXTsKICAg
IH0KCgoKCiAgICBpbmxpbmUgY29uc3QgUHJvYkFycmF5KiBnZXRDb2x1bW5PYmooaW50IGNvbHVt
bikgY29uc3QgewogICAgICAgICgodm9pZCkgKCgoY29sdW1uID49IDApICYmIChjb2x1bW4gPCBu
dW1Db2x1bW5zKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIoY29sdW1uID49IDApICYmIChjb2x1
bW4gPCBudW1Db2x1bW5zKSIsICJQcm9iTWF0cml4LmgiLCAxMzcsIF9fUFJFVFRZX0ZVTkNUSU9O
X18pLCAwKSkpOwogICAgICAgIHJldHVybiBjb2x1bW5zW2NvbHVtbl07CiAgICB9CgoKCgoKICAg
IGlubGluZSBjb25zdCBQR0ZQcm9iJiBnZXQoaW50IHJvdywgaW50IGNvbHVtbikgY29uc3QgewoK
ICAgICAgICByZXR1cm4gZ2V0Q29sdW1uT2JqKGNvbHVtbiktPmdldChyb3cpOwogICAgfQoKCgoK
CgogICAgaW5saW5lIFBHRlByb2IgaW5jcihpbnQgcm93LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY29sdW1uLAogICAgICAgICAgICAgICAgICAgICAgICBQR0ZQcm9iIHZhbHVlKSB7CiAg
ICAgICAgUEdGUHJvYiYgY2VsbCA9IGdldChyb3csIGNvbHVtbik7CiAgICAgICAgY2VsbCArPSB2
YWx1ZTsKICAgICAgICByZXR1cm4gY2VsbDsKICAgIH0KCgoKCiAgICB2b2lkIHplcm8oKTsKIyAx
NzcgIlByb2JNYXRyaXguaCIKICAgIHZvaWQgYWRkKGNvbnN0IFByb2JNYXRyaXgmIG1hdHJpeDIp
OwojIDE4NyAiUHJvYk1hdHJpeC5oIgogICAgdm9pZCBlbGVtZW50UHJvZHVjdChjb25zdCBQcm9i
TWF0cml4JiBtYXRyaXgyKTsKCgoKCiAgICB2b2lkIG5vcm1hbGl6ZUNvbHVtbnMoKTsKCgoKCiAg
ICB2b2lkIG5vcm1hbGl6ZVJvd3MoKTsKCgoKCiAgICB2b2lkIHByaW50KG9zdHJlYW0mIG91dGZp
bGUpIGNvbnN0OwoKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0Owp9OwoKIyAx
NyAiUHJvYk1hdHJpeC5jYyIgMgoKCgojIDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9G
YXRhbEVycm9yLmgiIDEKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZGV4Y2VwdCIgMSAzCiNw
cmFnbWEgaW50ZXJmYWNlICJzdGRleGNlcHQiCiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGRl
eGNlcHQiIDMKCgoKCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKY2xhc3MgbG9n
aWNfZXJyb3IgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBzdHJpbmcgX3doYXQ7CnB1YmxpYzoKICBs
b2dpY19lcnJvcihjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogX3doYXQgKHdoYXRfYXJnKSB7IH0K
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3QgeyByZXR1cm4gX3doYXQuY19zdHIg
KCk7IH0KfTsKCmNsYXNzIGRvbWFpbl9lcnJvciA6IHB1YmxpYyBsb2dpY19lcnJvciB7CnB1Ymxp
YzoKICBkb21haW5fZXJyb3IgKGNvbnN0IHN0cmluZyYgd2hhdF9hcmcpOiBsb2dpY19lcnJvciAo
d2hhdF9hcmcpIHsgfQp9OwoKY2xhc3MgaW52YWxpZF9hcmd1bWVudCA6IHB1YmxpYyBsb2dpY19l
cnJvciB7CnB1YmxpYzoKICBpbnZhbGlkX2FyZ3VtZW50IChjb25zdCBzdHJpbmcmIHdoYXRfYXJn
KTogbG9naWNfZXJyb3IgKHdoYXRfYXJnKSB7IH0KfTsKCmNsYXNzIGxlbmd0aF9lcnJvciA6IHB1
YmxpYyBsb2dpY19lcnJvciB7CnB1YmxpYzoKICBsZW5ndGhfZXJyb3IgKGNvbnN0IHN0cmluZyYg
d2hhdF9hcmcpOiBsb2dpY19lcnJvciAod2hhdF9hcmcpIHsgfQp9OwoKY2xhc3Mgb3V0X29mX3Jh
bmdlIDogcHVibGljIGxvZ2ljX2Vycm9yIHsKcHVibGljOgogIG91dF9vZl9yYW5nZSAoY29uc3Qg
c3RyaW5nJiB3aGF0X2FyZyk6IGxvZ2ljX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07CgpjbGFzcyBy
dW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgc3RyaW5nIF93aGF0OwpwdWJsaWM6
CiAgcnVudGltZV9lcnJvcihjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogX3doYXQgKHdoYXRfYXJn
KSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3QgeyByZXR1cm4gX3doYXQu
Y19zdHIgKCk7IH0KcHJvdGVjdGVkOgogIHJ1bnRpbWVfZXJyb3IoKTogZXhjZXB0aW9uICgpIHsg
fQp9OwoKY2xhc3MgcmFuZ2VfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9lcnJvciB7CnB1YmxpYzoK
ICByYW5nZV9lcnJvciAoY29uc3Qgc3RyaW5nJiB3aGF0X2FyZyk6IHJ1bnRpbWVfZXJyb3IgKHdo
YXRfYXJnKSB7IH0KfTsKCmNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJy
b3IgewpwdWJsaWM6CiAgb3ZlcmZsb3dfZXJyb3IgKGNvbnN0IHN0cmluZyYgd2hhdF9hcmcpOiBy
dW50aW1lX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07CgpjbGFzcyB1bmRlcmZsb3dfZXJyb3IgOiBw
dWJsaWMgcnVudGltZV9lcnJvciB7CnB1YmxpYzoKICB1bmRlcmZsb3dfZXJyb3IgKGNvbnN0IHN0
cmluZyYgd2hhdF9hcmcpOiBydW50aW1lX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07Cgp9Cgp9Cgoj
IDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9GYXRhbEVycm9yLmgiIDIKCgoKIyAxNCAi
Li4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL0V4Y2VwdGlvbi5oIiAxCmNsYXNzIEV4Y2VwdGlv
bjogcHVibGljIGV4Y2VwdGlvbiB7CnByaXZhdGU6CiAgICBzdHJpbmcgZXJyb3JEZXNjOwoKCgoK
CgoKICAgIHZvaWQgZGlzcGxheUV4Y2VwdGlvbigpOwoKcHVibGljOgoKCgoKCiAgICBFeGNlcHRp
b24oY29uc3Qgc3RyaW5nJiBlcnJEZXNjKTogZXJyb3JEZXNjKGVyckRlc2MpIHsKICAgICAgICBk
aXNwbGF5RXhjZXB0aW9uKCk7CiAgICB9CgoKCgogICAgdmlydHVhbCB+RXhjZXB0aW9uKCkgewog
ICAgfQoKCgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHsKICAgICAgICBy
ZXR1cm4gZXJyb3JEZXNjLmNfc3RyKCk7CiAgICB9Cn07CgojIDkgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpbC9GYXRhbEVycm9yLmgiIDIKIyAxNyAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91
dGlsL0ZhdGFsRXJyb3IuaCIKY2xhc3MgRmF0YWxFcnJvcjogcHVibGljIEV4Y2VwdGlvbiB7CnB1
YmxpYzoKCgoKCgogICAgRmF0YWxFcnJvcihjb25zdCBzdHJpbmcmIGVyckRlc2MpOiBFeGNlcHRp
b24oZXJyRGVzYykgewogICAgfQoKCgoKICAgIHZpcnR1YWwgfkZhdGFsRXJyb3IoKSB7CiAgICB9
Cn07CgojIDIwICJQcm9iTWF0cml4LmNjIiAyCgojIDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9QR0ZVdGlscy5oIiAxCmNsYXNzIFN0cmluZ1ZlY3RvcjsKIyAyMCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dGlsL1BHRlV0aWxzLmgiCiMgMjggIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9QR0ZVdGlscy5oIgpjbGFzcyBQR0ZVdGlscyB7CnByaXZhdGU6CgoKCiAgICBQR0ZVdGls
cygpIHsKICAgIH0KCnB1YmxpYzoKCgoKCgoKCiAgICBzdGF0aWMgdm9pZCBmYXRhbChjb25zdCBj
aGFyKiBmb3JtYXRTdHIsIC4uLik7CiMgNTQgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Q
R0ZVdGlscy5oIgogICAgc3RhdGljIHN0cmluZyBmb3JtYXQoY29uc3QgY2hhciogZm9ybWF0U3Ry
LCAuLi4pOwoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdG9TdHJpbmcoaW50IG51bSk7CgoKCgogICAg
c3RhdGljIGludCB0b0ludChjb25zdCBjaGFyKiBzdHIpOwoKCgoKICAgIHN0YXRpYyBpbnQgdG9J
bnQoY29uc3Qgc3RyaW5nJiBzdHIpIHsKICAgICAgICByZXR1cm4gdG9JbnQoc3RyLmNfc3RyKCkp
OwogICAgfQoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdG9TdHJpbmcoZG91YmxlIG51bSk7CgoKCgoK
ICAgIHN0YXRpYyBzdHJpbmcgdG9GaXhlZFdpZHRoU3RyaW5nKGRvdWJsZSBudW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyV2lkdGgpOwoKCgoKICAgIHN0YXRp
YyBkb3VibGUgdG9Eb3VibGUoY29uc3QgY2hhciogc3RyKTsKCgoKCiAgICBzdGF0aWMgZG91Ymxl
IHRvRG91YmxlKGNvbnN0IHN0cmluZyYgc3RyKSB7CiAgICAgICAgcmV0dXJuIHRvRG91YmxlKHN0
ci5jX3N0cigpKTsKICAgIH0KCgoKCiAgICBzdGF0aWMgc3RyaW5nIHRvU3RyaW5nKGJvb2wgdmFs
KTsKCgoKCgogICAgc3RhdGljIGJvb2wgdG9Cb29sKGNvbnN0IGNoYXIqIHN0cik7CgoKCgoKICAg
IHN0YXRpYyBib29sIHRvQm9vbChjb25zdCBzdHJpbmcmIHN0cikgewogICAgICAgIHJldHVybiB0
b0Jvb2woc3RyLmNfc3RyKCkpOwogICAgfQoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdHJpbVRyYWls
aW5nQmxhbmtzKGNvbnN0IHN0cmluZyYgc3RyKTsKCgoKCiAgICBzdGF0aWMgc3RyaW5nIFBHRlV0
aWxzOjp0cmltQmxhbmtzKGNvbnN0IHN0cmluZyYgc3RyKTsKCgoKCiAgICBzdGF0aWMgYm9vbCBj
b250YWluc1NwYWNlcyhjb25zdCBzdHJpbmcmIHN0cik7CgoKCgoKICAgIHN0YXRpYyBTdHJpbmdW
ZWN0b3Igc3BsaXQoY29uc3Qgc3RyaW5nJiBzdHIsIGNoYXIgc2VwYXJhdG9yKTsKCgoKCgogICAg
c3RhdGljIFN0cmluZ1ZlY3RvciBzcGxpdE9uV2hpdGVTcGFjZShjb25zdCBzdHJpbmcmIHN0cik7
CgoKCgogICAgc3RhdGljIGJvb2wgcHJlZml4KGNvbnN0IHN0cmluZyYgc3RyLCBjb25zdCBzdHJp
bmcmIHByZSkgewogICAgICAgIHVuc2lnbmVkIHByZUxlbiA9IHByZS5zaXplKCk7CiAgICAgICAg
aWYgKHN0ci5zaXplKCkgPCBwcmVMZW4pIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgIH0KICAgICAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IHByZUxlbjsgaWR4Kysp
IHsKICAgICAgICAgICAgaWYgKHN0cltpZHhdICE9IHByZVtpZHhdKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICB9CgoKCgogICAgc3RhdGljIHZvaWQgcHJpbnRMaW5lc0luZGVudGVkKG9zdHJlYW0m
IG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHN0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZW50ID0gMCk7Cn07
CgojIDIxICJQcm9iTWF0cml4LmNjIiAyCgoKCgp2b2lkIFByb2JNYXRyaXg6OnJlbGVhc2UoKSB7
CiAgICBpZiAoY29sdW1ucyAhPSBfX251bGwpIHsKICAgICAgICBjb2x1bW5BbGxvY2F0b3ItPmFs
bG9jQXJyYXlzKDAsIF9fbnVsbCk7CiAgICAgICAgZGVsZXRlW10gY29sdW1uczsKICAgICAgICBj
b2x1bW5zID0gX19udWxsOwogICAgfQogICAgaWYgKHJvd3MgIT0gX19udWxsKSB7CiAgICAgICAg
cm93QWxsb2NhdG9yLT5hbGxvY0FycmF5cygwLCBfX251bGwpOwogICAgICAgIGRlbGV0ZVtdIHJv
d3M7CiAgICAgICAgcm93cyA9IF9fbnVsbDsKICAgIH0KICAgIGlmIChtZW1vcnkgIT0gX19udWxs
KSB7CiAgICAgICAgZGVsZXRlW10gbWVtb3J5OwogICAgICAgIG1lbW9yeSA9IF9fbnVsbDsKICAg
IH0KICAgIG51bVJvd3MgPSAwOwogICAgbnVtQ29sdW1ucyA9IDA7Cn0KCgoKClByb2JNYXRyaXg6
OlByb2JNYXRyaXgoaW50IG51bU1hdHJpeFJvd3MgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
IGludCBudW1NYXRyaXhDb2x1bW5zID0gMCwKICAgICAgICAgICAgICAgICAgICAgICBQcm9iTWF0
cml4QWxsb2NhdG9yKiByb3dBbGxvYyA9IF9fbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICBQ
cm9iTWF0cml4QWxsb2NhdG9yKiBjb2x1bW5BbGxvYyA9IF9fbnVsbCkgewogICAgY29sdW1ucyA9
IF9fbnVsbDsKICAgIHJvd3MgPSBfX251bGw7CiAgICBtZW1vcnkgPSBfX251bGw7CiAgICBudW1S
b3dzID0gMDsKICAgIG51bUNvbHVtbnMgPSAwOwoKICAgIHJvd0FsbG9jYXRvciA9IChyb3dBbGxv
YyA9PSBfX251bGwpID8gbmV3IFByb2JBcnJheUFsbG9jKCkgOiByb3dBbGxvYzsKICAgIGNvbHVt
bkFsbG9jYXRvciA9IChjb2x1bW5BbGxvYyA9PSBfX251bGwpID8gbmV3IFByb2JBcnJheUFsbG9j
KCkgOiBjb2x1bW5BbGxvYzsKCiAgICByZXNpemUobnVtTWF0cml4Um93cywgbnVtTWF0cml4Q29s
dW1ucyk7Cn0KCgoKClByb2JNYXRyaXg6On5Qcm9iTWF0cml4KCkgewogICAgcmVsZWFzZSgpOwog
ICAgZGVsZXRlIHJvd0FsbG9jYXRvcjsKICAgIGRlbGV0ZSBjb2x1bW5BbGxvY2F0b3I7Cn0KCgoK
CnZvaWQgUHJvYk1hdHJpeDo6cmVzaXplKGludCBuZXdOdW1Sb3dzLAogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbmV3TnVtQ29sdW1ucykgewogICAgKCh2b2lkKSAoKG5ld051bVJvd3MgPj0g
MCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJuZXdOdW1Sb3dzID49IDAiLCAiUHJvYk1hdHJpeC5j
YyIsIDc3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICgodm9pZCkgKChuZXdOdW1D
b2x1bW5zID49IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibmV3TnVtQ29sdW1ucyA+PSAwIiwg
IlByb2JNYXRyaXguY2MiLCA3OCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgcmVs
ZWFzZSgpOwoKICAgIG51bVJvd3MgPSBuZXdOdW1Sb3dzOwogICAgbnVtQ29sdW1ucyA9IG5ld051
bUNvbHVtbnM7CgoKICAgIGlmIChudW1Sb3dzKm51bUNvbHVtbnMgPiAwKSB7CiAgICAgICAgbWVt
b3J5ID0gbmV3IFBHRlByb2JbbnVtUm93cypudW1Db2x1bW5zXTsKICAgIH0KCgoKCiAgICBpZiAo
bnVtUm93cyA+IDApIHsKICAgICAgICByb3dzID0gbmV3IFByb2JBcnJheSpbbnVtUm93c107CiAg
ICAgICAgcm93QWxsb2NhdG9yLT5hbGxvY0FycmF5cyhudW1Sb3dzLCByb3dzKTsKICAgICAgICBm
b3IgKGludCByb3dJZHggPSAwOyByb3dJZHggPCBudW1Sb3dzOyByb3dJZHgrKykgewogICAgICAg
ICAgICByb3dzW3Jvd0lkeF0tPnNldFN0b3JhZ2UobnVtQ29sdW1ucywgJihtZW1vcnlbcm93SWR4
Km51bUNvbHVtbnNdKSwgMSk7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChudW1Db2x1bW5zID4g
MCkgewogICAgICAgIGNvbHVtbnMgPSBuZXcgUHJvYkFycmF5KltudW1Db2x1bW5zXTsKICAgICAg
ICBjb2x1bW5BbGxvY2F0b3ItPmFsbG9jQXJyYXlzKG51bUNvbHVtbnMsIGNvbHVtbnMpOwogICAg
ICAgIGZvciAoaW50IGNvbElkeCA9IDA7IGNvbElkeCA8IG51bUNvbHVtbnM7IGNvbElkeCsrKSB7
CiAgICAgICAgICAgIGNvbHVtbnNbY29sSWR4XS0+c2V0U3RvcmFnZShudW1SggPSAwOyBjb2xJZHggPCBudW1Db2x1bW5zOyBjb2xJZHgrKykgewogICAgICAgIGNvbHVt
bnNbY29sSWR4XS0+ZWxlbWVudFByb2R1Y3QoKm1hdHJpeDIuY29sdW1uc1tjb2xJZHhdKTsKICAg
IH0KfQoKCgoKdm9pZCBQcm9iTWF0cml4OjpwcmludChvc3RyZWFtJiBvdXRmaWxlKSBjb25zdCB7
CiAgICBmb3IgKGludCByb3dJZHggPSAwOyByb3dJZHggPCBudW1Sb3dzOyByb3dJZHgrKykgewog
ICAgICAgIGZvciAoaW50IGNvbElkeCA9IDA7IGNvbElkeCA8IG51bUNvbHVtbnM7IGNvbElkeCsr
KSB7CiAgICAgICAgICAgIGlmIChjb2xJZHggPiAwKSB7CiAgICAgICAgICAgICAgICBvdXRmaWxl
IDw8ICIgICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG91YmxlIG51bSA9IGdldChyb3dJ
ZHgsIGNvbElkeCkucmV0X2RvdWJsZSgpOwogICAgICAgICAgICBvdXRmaWxlIDw8IFBHRlV0aWxz
Ojp0b0ZpeGVkV2lkdGhTdHJpbmcobnVtLCA4KTsKICAgICAgICB9CiAgICAgICAgb3V0ZmlsZSA8
PCBlbmRsOwogICAgfQp9CgoKCgp2b2lkIFByb2JNYXRyaXg6Om5vcm1hbGl6ZUNvbHVtbnMoKSB7
CiAgICBmb3IgKGludCBjb2xJZHggPSAwOyBjb2xJZHggPCBudW1Db2x1bW5zOyBjb2xJZHgrKykg
ewogICAgICAgIGNvbHVtbnNbY29sSWR4XS0+bm9ybWFsaXplKCk7CiAgICB9Cn0KCgoKCnZvaWQg
UHJvYk1hdHJpeDo6bm9ybWFsaXplUm93cygpIHsKICAgIGZvciAoaW50IHJvd0lkeCA9IDA7IHJv
d0lkeCA8IG51bVJvd3M7IHJvd0lkeCsrKSB7CiAgICAgICAgcm93c1tyb3dJZHhdLT5ub3JtYWxp
emUoKTsKICAgIH0KfQoKCgoKaW50IFByb2JNYXRyaXg6Om1lbVVzYWdlKCkgY29uc3QgewoKICAg
IGludCB0b3RhbCA9IHNpemVvZihQcm9iTWF0cml4KSArIChudW1Sb3dzICogbnVtQ29sdW1ucyAq
IHNpemVvZihQR0ZQcm9iKSkKICAgICAgICArICgyICogc2l6ZW9mKFByb2JNYXRyaXhBbGxvY2F0
b3IpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7CiAgICAgICAgdG90
YWwgKz0gcm93c1tpXS0+bWVtVXNhZ2UoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtQ29sdW1uczsgaSsrKSB7CiAgICAgICAgdG90YWwgKz0gY29sdW1uc1tpXS0+bWVtVXNhZ2Uo
KTsKICAgIH0KICAgIHJldHVybiB0b3RhbDsKfQo=


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