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]

libstdc++/1009: dies when #include'ing string.h then iostream on RH 7.0



>Number:         1009
>Category:       libstdc++
>Synopsis:       dies when #include'ing string.h then iostream on RH 7.0
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 07 10:16:02 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     lsh@cs.brown.edu
>Release:        2.97 20001207
>Organization:
>Environment:
Red Hat 7.0
>Description:
The following program spits out errors when building with
a recent CVS version of g++ under RedHat 7.0
#include <string.h>
#include <iostream>
>How-To-Repeat:
cat >test.C<<EOF
#include <string.h>
#include <iostream>
EOF

On a RH 7.0 box:
g++ -c -o /tmp/test.o test.C
>Fix:

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

IyAxICIvdS9sc2gvc3BhY2UvZ2x1ZS9hdHRyaWIvdGVzdC5DIgojIDEgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzIDQKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMyA0CiMgMjg0ICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMiAzIDQKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMyA0CiMgMzEyICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMiAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoK
ZXh0ZXJuICJDIiB7CgoKCgojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTk5ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1l
bnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90Owoj
IDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoKCmV4dGVybiB2b2lkICptZW1jcHkg
KHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZv
aWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
ICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIs
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
ZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBf
X24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDc3ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0
cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTIw
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0
IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMTY3ICIvdXNyL2luY2x1ZGUvc3RyaW5n
LmgiIDMgNApleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFy
ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2Fj
Y2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBj
aGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25l
ZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAxODkgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJv
dyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDIyMCAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzIDQKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAyMzEgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMyA0CmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwg
c2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpy
aW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKIyAyNzYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0
CmV4dGVybiBpbnQgX19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJu
IGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0
cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAzMDAgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jl
c3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwojIDM2OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
IDQKfQojIDIgIi91L2xzaC9zcGFjZS9nbHVlL2F0dHJpYi90ZXN0LkMiIDIKIyAxICIvY3Mvc3Jj
L2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9n
KystdjMvaW9zdHJlYW0iIDEgMwoKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRh
bC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0u
aCIgMSAzCiMgMzcgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAzCiMgMSAiL2Nz
L3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1
ZGUvZysrLXYzL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9j
Kytjb25maWcuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4
Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMg
NDMgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVz
dC9pbmNsdWRlL2crKy12My9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMgNAojIDQ0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9vc19kZWZpbmVzLmgiIDIg
MwojIDM1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1s
YXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9jKytjb25maWcuaCIgMiAzCiMgMzggIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4
cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
b3N0cmVhbS5oIiAxIDMKIyAzNyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGlu
dXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMwoj
IDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVz
dC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzcgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAz
CiMgMzcgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMwojIDEgIi9jcy9zcmMvZ2Nj
L2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12
My9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3
ZC5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwojIDM5ICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9j
Kytjb25maWcuaCIgMSAzCiMgNDAgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAz
CiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzOSAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDEgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkYXJnLmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGFyZy5oIiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcv
aW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTcvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19n
bnVjX3ZhX2xpc3Q7CiMgMTEwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNs
dWRlL3N0ZGFyZy5oIiAzIDQKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDQxICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGFyZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6dmFfbGlzdDsKfQojIDQxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzIDQKIyAyOCAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKIyAxICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTcvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMjYgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL2Nz
L3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAz
MCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu
dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln
bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl
ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk
ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf
bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf
X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv
ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm
IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl
ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog
IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk
ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp
bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg
X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IF9fZmRfbWFzazsKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQg
LyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGlu
dCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0
eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2Nu
dF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9f
ZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYg
X191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7
CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2Zm
NjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0
aHJlYWR0eXBlcy5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA2OCAiL3Vzci9p
bmNsdWRlL2JpdHMvc2NoZWQuaCIgMyA0CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50
IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAyIDMgNAoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0
dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNj
cl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19k
ZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBf
X3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVf
dCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRy
OwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNj
ciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBw
dGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwog
IGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2lu
ZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90
OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhh
dHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJl
YWRfdDsKIyAxNjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CiMgNDEgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5
cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz
IDQKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDY5ICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiMg
OSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAxIDMgNAojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMyA0CgoKCgoj
IDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVz
dC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEg
MyA0CiMgMzEyICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0y
Mi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL3N0ZGRl
Zi5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDUgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzIDQKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0y
Mi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMgNAojIDQ2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg
MyA0CiMgNjQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJb
NF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDIgMyA0Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3Rh
dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBf
X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMgNAoj
IDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKIyAxICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0
CiMgNDYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93Y2hhci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyAyOSAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhw
ZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9nY29u
di5oIiAyIDMgNAoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05W
LAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVU
LAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NP
TlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19H
Q09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAw
MDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252
X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29i
amVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
aW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252
X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2Nv
bnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICos
IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAq
LCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsK
Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICos
IF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9p
ZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0
KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5z
X2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29u
dGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lk
ICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1
Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGli
X2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAg
X19jb25zdCBjaGFyICpfX2Zyb21fbmFtZTsKICBfX2NvbnN0IGNoYXIgKl9fdG9fbmFtZTsKCiAg
X19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2Nv
bnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBf
X21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVk
ZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVk
IGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRp
b25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0
YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2Rh
dGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90
IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25f
XyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhWzBdOwp9ICpfX2djb252X3Q7CiMgNDUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0
IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8g
X19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVk
Owp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAyIDMgNAojIDUxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0
CiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9zdGRhcmcuaCIg
MSAzIDQKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMyA0CiMgMTU4ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMyA0CnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoK
CnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0
IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzIDQKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBf
X2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9
OwojIDI2MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApzdHJ1Y3QgX0lPX0ZJTEUgewogIGlu
dCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7
CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBf
SU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNl
OwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9J
T19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2Vy
ICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwog
IGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0
IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0
YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMgNAogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQg
Kl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp
IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0
IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs
dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBl
ZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwg
c2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4g
KHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19m
biAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYg
aW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFk
X2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVf
d3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rp
b25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5
cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3Jp
dGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19j
b29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBj
b29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2
b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50
IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tp
ZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpl
eHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9f
RklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIHRocm93
ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93
ICgpOwojIDQyOCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApleHRlcm4gaW50IF9JT19nZXRj
IChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2Ms
IF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93
ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1OCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgp
OwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNp
emVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAq
LCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl
a3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQg
X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUxNCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMgNAp9CiMgNzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoK
Cgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMyA0CiMgMTIzICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklM
RSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAo
X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChf
X2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNTQgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxNzEgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAq
X19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDE5
NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVu
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAg
ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjI0ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNo
YXIgKl9fbW9kZXMpIHRocm93ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApl
eHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg
ICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0
YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25w
cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKIyAzMjEg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2Fu
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKIyAzNDcgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxv
Y2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19j
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwoj
IDQzNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRo
cm93ICgpOwojIDQ0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IHB1dHMg
KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g
c2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf
X3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jl
c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu
IHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2Vl
ayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl
cm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0ODUgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBfX29mZl90IG9mZl90OwojIDUwNyAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cg
KCk7CiMgNTQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiB2b2lkIGNsZWFyZXJy
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJs
aXN0W107CiMgNTc0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZmlsZW5v
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9f
Y29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNjIxICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMg
NjQ1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyA0NCAiL2NzL3NyYy9nY2MvZ2NjLTIu
OTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRpby5oIiAyIDMKIyA1NSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAz
Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgZXh0
ZXJuICJDIiBpbnQgcmVtb3ZlKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCByZW5hbWUo
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIEZJTEUqIHRtcGZpbGUodm9p
ZCk7CiAgZXh0ZXJuICJDIiBjaGFyKiB0bXBuYW0oY2hhciopOwogIGV4dGVybiAiQyIgaW50IGZj
bG9zZShGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZmZsdXNoKEZJTEUqKTsKICBleHRlcm4gIkMi
IEZJTEUqIGZvcGVuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxF
KiBmcmVvcGVuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSopOwogIGV4dGVybiAiQyIg
dm9pZCBzZXRidWYoRklMRSosIGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzZXR2YnVmKEZJTEUq
LCBjaGFyKiwgaW50LCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IGZwcmludGYoRklMRSosIGNv
bnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IGZzY2FuZihGSUxFKiwgY29uc3QgY2hh
ciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4
dGVybiAiQyIgaW50IHNjYW5mKGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNu
cHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGlu
dCBzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3Nj
YW5mKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCB2ZnBy
aW50ZihGSUxFKiwgY29uc3QgY2hhciosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZmc2Nh
bmYoRklMRSosIGNvbnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2cHJpbnRm
KGNvbnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c2NhbmYoY29uc3QgY2hh
ciosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZzbnByaW50ZihjaGFyKiwgc2l6ZV90LCBj
b25zdCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNwcmludGYoY2hhciosIGNv
bnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c3NjYW5mKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgZmdldGMoRklMRSAqKTsK
ICBleHRlcm4gIkMiIGNoYXIgKmZnZXRzKGNoYXIqLCBpbnQsIEZJTEUqKTsKICBleHRlcm4gIkMi
IGludCBmcHV0YyhpbnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmcHV0cyhjb25zdCBjaGFy
KiwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IGdldGMoRklMRSopOwogIGV4dGVybiAiQyIgaW50
IGdldGNoYXIodm9pZCk7CiAgZXh0ZXJuICJDIiBjaGFyICpnZXRzKGNoYXIqKTsKICBleHRlcm4g
IkMiIGludCBwdXRjKGludCwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IHB1dGNoYXIoaW50KTsK
ICBleHRlcm4gIkMiIGludCBwdXRzKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCB1bmdl
dGMoaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBzaXplX3QgZnJlYWQodm9pZCosIHNpemVfdCwg
c2l6ZV90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQqLCBz
aXplX3QsIHNpemVfdCwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IGZnZXRwb3MoRklMRSosIGZw
b3NfdCopOwogIGV4dGVybiAiQyIgaW50IGZzZWVrKEZJTEUqLCBsb25nIGludCwgaW50KTsKICBl
eHRlcm4gIkMiIGludCBmc2V0cG9zKEZJTEUqLCBjb25zdCBmcG9zX3QqKTsKICBleHRlcm4gIkMi
IGxvbmcgaW50IGZ0ZWxsKEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgcmV3aW5kKEZJTEUqKTsK
ICBleHRlcm4gIkMiIHZvaWQgY2xlYXJlcnIoRklMRSopOwogIGV4dGVybiAiQyIgaW50IGZlb2Yo
RklMRSopOwogIGV4dGVybiAiQyIgaW50IGZlcnJvcihGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lk
IHBlcnJvcihjb25zdCBjaGFyKik7Cn0KIyA0MSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hh
ci5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MiAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyAxMjIgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMwpleHRlcm4gIkMiCnsKICB0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGludCBfX2ZpbGxbNl07CiAgfSBtYnN0YXRlX3Q7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6bWJzdGF0ZV90Owp9CiMgMzkgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkIHsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gc3RydWN0IGNo
YXJfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4gY2xhc3MgYWxsb2NhdG9yOwoK
CiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
Y2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19zdHJlYW1idWY7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogIGNsYXNzIGJh
c2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg
Y2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9B
bGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19zdHJpbmdz
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
IGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19vZnN0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgY2xh
c3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgY2xhc3Mgb3N0cmVhbWJ1Zl9p
dGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHRlbXBsYXRlPGNsYXNzIF9TdGF0ZT4g
c3RydWN0IGZwb3M7CgoKCgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoK
CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
aW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4g
c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNo
YXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CiMgMTQ4ICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zZndkLmgiIDMKfQojIDM4ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1l
bnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgi
IDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDMzICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
ZXhjZXB0aW9uIiAzCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIg
ewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9u
ICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlv
biB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRp
b24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVk
ZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRf
dGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVk
ICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0KCn0KIyAzOSAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9j
aGFyX3RyYWl0cy5oIiAxIDMKIyAzNyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIg
MwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzggIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhw
ZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RyaW5nLmgiIDEgMwojIDM5ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMg
MSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0
L2luY2x1ZGUvZysrLXYzL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAz
IDQKIyA0MyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjIt
bGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKICBleHRlcm4gIkMiIHZvaWQqIG1lbWNweSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVf
dCk7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1tb3ZlKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90
KTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cmNweShjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVy
biAiQyIgY2hhciogc3RybmNweShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7CiAgZXh0ZXJu
ICJDIiBjaGFyKiBzdHJjYXQoY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIq
IHN0cm5jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IG1l
bWNtcChjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBpbnQg
c3RyY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3RyY29s
bChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN0cm5jbXAoY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cnhm
cm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCogbWVtY2hy
KGNvbnN0IHZvaWQqLCBpbnQsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjaHIoY29u
c3QgY2hhciosIGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgY2hhciogc3RycGJyayhjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopOwogIGV4dGVybiAiQyIgY2hhciogc3RycmNocihjb25zdCBjaGFyKiwgaW50KTsK
ICBleHRlcm4gIkMiIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBl
eHRlcm4gIkMiIGNoYXIqIHN0cnN0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVy
biAiQyIgY2hhciogc3RydG9rKGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiB2b2lk
KiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cmVycm9y
KGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIqKTsKfQojIDM5ICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9mcG9zLmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDMKIyAxICIvY3Mv
c3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVk
ZS9nKystdjMvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYysraW8u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDM2ICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9jKytpby5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45Ny9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTcvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAzNyAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZl
eHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYysr
dGhyZWFkcy5oIiAxIDMKIyA0OCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGlu
dXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYysrdGhyZWFkcy5oIiAzCm5h
bWVzcGFjZSBzdGQgewoKICBzdHJ1Y3QgX19udWxsX211dGV4dCB7IH07CiAgdHlwZWRlZiBfX251
bGxfbXV0ZXh0IF9fbXV0ZXh0X3R5cGU7Cgp9CiMgMzggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhw
ZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2MrK2lv
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5
cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJl
YW1wb3M7CgoKCgogIHR5cGVkZWYgaW50IF9fY19sb2NrOwoKCgoKICB0eXBlZGVmIEZJTEUgX19j
X2ZpbGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogewogICB0eXBlZGVmIHNob3J0IF9f
aW50X3R5cGU7CgogICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAw
MDE7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50
ZXJuYWwgPSAweDAwMTA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAw
MjA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX3Nob3diYXNlID0gMHgwMjAwOwogICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93
cG9pbnQgPSAweDA0MDA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAw
eDA4MDA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgw
MDA4OwogICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwg
MHgwMDA0OwoKCiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2FwcCA9IDB4MDE7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4
MDI7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfb3V0ID0gMHgxMDsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIw
OwogIH07Cgp9CiMgNDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkIHsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAg
IHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAg
ICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAg
ICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9
CgoKCiAgICAgIGZwb3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9wb3Moc3RyZWFtb2Zm
KCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19wb3MsIF9fc3RhdGVfdHlwZSBfX3N0KQog
ICAgICA6IF9NX3N0KF9fc3QpLCBfTV9wb3MoX19wb3MpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1v
ZmYgX19wb3MpCiAgICAgIDogX01fc3QoKSwgX01fcG9zKF9fcG9zKSB7IH0KCiAgICAgIG9wZXJh
dG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX3BvczsgfQoKICAgICAgZnBvcyYKICAg
ICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fcG9zICs9IF9fb2ZmOyByZXR1cm4g
KnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7
IF9NX3BvcyAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIG9wZXJh
dG9yPT0oY29uc3QgZnBvcyYgX19wb3MyKSBjb25zdCB7IHJldHVybiBfTV9wb3MgPT0gX19wb3My
Ll9NX3BvczsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9z
MikgY29uc3QgeyByZXR1cm4gX01fcG9zICE9IF9fcG9zMi5fTV9wb3M7IH0KCiAgICAgIHN0cmVh
bW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3BvczsgfQoKICAgICAg
dm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19wb3MpIHsgX01fcG9zID0gX19wb3M7
IH0KCiAgICBwcml2YXRlOgogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CiAgICAgIHN0cmVhbW9m
ZiBfTV9wb3M7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGU+CiAgICBpbmxpbmUg
ZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvcisoY29uc3QgZnBvczxfU3RhdGU+JiBfX3Bvcywgc3Ry
ZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4gdChfX3Bvcyk7CiAgICAgIHJl
dHVybiB0ICs9IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGU+CiAgICBp
bmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvci0oY29uc3QgZnBvczxfU3RhdGU+JiBfX3Bv
cywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4gdChfX3Bvcyk7CiAg
ICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGU+
CiAgICBpbmxpbmUgc3RyZWFtb2ZmCiAgICBvcGVyYXRvci0oY29uc3QgZnBvczxfU3RhdGU+JiBf
X3BvczEsIGNvbnN0IGZwb3M8X1N0YXRlPiYgX19wb3MyKQogICAgeyByZXR1cm4gX19wb3MxLl9N
X3Bvc2l0aW9uKCkgLSBfX3BvczIuX01fcG9zaXRpb24oKTsgfQoKfQojIDQwICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKCgoKCgoKICAgIHR5
cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKIyA1OSAiL2NzL3NyYy9nY2MvZ2NjLTIu
OTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMv
Y2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFy
X3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0
YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg
ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs
IHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBf
X247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCiAgICAg
ICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CiAgICAgICAg
cmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0
IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBf
X3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAoX19wIC0gX19z
KTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z
dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAg
IHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19wIC0g
X19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJldHVybiBfX3A7
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNp
emVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShj
aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAg
eyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hh
cl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAgICAgIGZvciAo
Y2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAgICAgICAgICBh
c3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9CgogICAgICBzdGF0
aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAg
ICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg
IHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2Mp
OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYg
X19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg
fQoKICAgICAgc3RhdGljIHN0YXRlX3R5cGUKICAgICAgX1NfZ2V0X3N0YXRlKGNvbnN0IHBvc190
eXBlJiBfX3BvcykgeyByZXR1cm4gX19wb3Muc3RhdGUoKTsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBfU19lb3MoKSB7IHJldHVybiBjaGFyX3R5cGUoKTsg
fQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9f
YykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyBpbnRfdHlwZSgwKSA6
IF9fYzsgfQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFy
PgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHVuc2ln
bmVkIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0
ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRp
YyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVy
biBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmlu
ZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2Ep
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3Ms
IF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25z
dCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5
cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19z
LCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5
cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv
bnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAg
ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19j
MikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgc3RhdGVfdHlw
ZQogICAgICBfU19nZXRfc3RhdGUoY29uc3QgcG9zX3R5cGUmIF9fcG9zKSB7IHJldHVybiBfX3Bv
cy5zdGF0ZSgpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgX1NfZW9zKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw
ZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2Mg
PT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CiMgMjkzICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4
cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9jaGFy
X3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsK
ICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7
IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1
cm4gX1RyYWl0czo6ZXEoX01fYyxfX2EpOyB9CiAgICB9OwoKfQojIDQwICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFs
L0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdHJpbmdfZndk
LmgiIDEgMwojIDE3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RyaW5nX2Z3ZC5oIiAzCiMgMSAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbmZpZy5oIiAxIDMKIyAxOCAiL2NzL3NyYy9nY2MvZ2Nj
LTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3N0cmluZ19md2QuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j
LmgiIDEgMwojIDQ3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9uZXciIDEgMwojIDMzICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvbmV3IiAzCiNwcmFnbWEgaW50ZXJm
YWNlICJuZXciCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwoKIyAxICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0MCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz
dGRkZWYuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUv
c3RkZGVmLmgiIDEgMyA0CiMgNDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7
Cn0KIyAzICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1s
YXRlc3QvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMiAzCiMgMzUgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9uZXci
IDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM2ICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
bmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2Fs
bG9jIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFy
KiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0
cnVjdCBub3Rocm93X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5
cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxl
ciAobmV3X2hhbmRsZXIpOwoKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyAoc3RkOjpzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzdGQ6OnNpemVfdCkg
dGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhy
b3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVy
YXRvciBuZXcgKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQgKm9wZXJhdG9yIG5ld1tdIChzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3df
dCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpu
b3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpv
cGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4g
cGxhY2U7IH0KfQojIDQ4ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoj
IDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVz
dC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDUzICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMSAzCiMgMzkgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkbGliLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAoj
IDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgoKCgojIDEg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0
CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewojIDk0ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90
OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcg
aW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZv
aWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRy
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv
dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAo
KTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4
dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CiMgMjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gZG91YmxlIF9f
c3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19z
dHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9f
Z3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf
X3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhy
b3cgKCk7CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbDY0
YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI3ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMgNAoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0
Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVm
IF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9f
ZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lu
b190IGlub190OwojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIF9f
ZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9k
ZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9f
dWlkX3QgdWlkX3Q7CiMgOTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg
X19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3Np
emVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2Nh
ZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEyNiAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDY3
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o
IiAxIDMgNAojIDY4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAoKCnR5cGVkZWYgX190aW1l
X3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDgwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAoK
CnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDkyICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAyIDMgNAoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTI3ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgMTQwICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUv
c3RkZGVmLmgiIDEgMyA0CiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElf
XykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X3dvcmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMgNAojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDIgMyA0CiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMiAzIDQKIyAyMDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI2ICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0
CiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdf
YXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9f
dmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2ln
c2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApz
dHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9u
c2VjOwogIH07CiMgMzkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgpleHRlcm4g
IkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoK
dHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDMgNApleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVzdHJpY3Qg
X19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgX19mZF9zZXQgKl9fcmVzdHJpY3QgX193cml0
ZWZkcywKICAgICAgICAgICAgICAgICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz
LAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0
KSB0aHJvdyAoKTsKIyA5MiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0Cn0KIyAyMTAg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
c3lzbWFjcm9zLmgiIDEgMyA0CiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0
CiMgMjI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIF9fYmxrY250X3Qg
YmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYg
X19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMgNAp9CiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgoKCmV4dGVybiBp
bnQzMl90IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5z
aWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAo
dW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3Rh
dGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRh
CiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpz
dGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9z
ZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9t
X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq
X19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19y
ZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21f
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2
b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVy
biBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
aW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBq
cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2ln
bmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0
aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b
N10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hv
cnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsK
ICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5k
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb
M10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2
YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0
ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoj
IDUyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxs
b2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMSAzIDQKIyAyMiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2Fs
bG9jYS5oIiAyIDMgNAoKCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGlu
dXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMgNAoK
ZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCk7CgoKCgoKfQojIDU0NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0
ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKIyA1NjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiB2
b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv
aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgb25fZXhp
dCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2Fy
ZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA1ODggIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmlu
ZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l
LCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjI0ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy
b3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtk
dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAo
X19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwojIDY3MyAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNv
bHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29u
c3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CiMgNjkwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMgNApleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2
b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2
b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAg
ICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBs
YWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
IyA3MTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBkaXZfdCBkaXYgKGludCBf
X251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k
ZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI5ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpm
Y3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIg
Kl9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2
dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAog
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0
X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl
X3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoK
CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBt
YXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTEgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2
Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDQzICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGxpYi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAg
dXNpbmcgOjpsZGl2X3Q7CgoKCiAgdXNpbmcgOjpsbGRpdl90OwojIDYxICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGxpYi5oIiAzCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRvZihjb25zdCBjaGFy
Kik7CiAgZXh0ZXJuICJDIiBpbnQgYXRvaShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBsb25n
IGludCBhdG9sKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2QoY29uc3Qg
Y2hhciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCBzdHJ0b2YoY29uc3QgY2hhciosIGNo
YXIqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciosIGNoYXIqKiwg
aW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhcios
IGNoYXIqKiwgaW50KTsKICBleHRlcm4gIkMiIGludCByYW5kKHZvaWQpOwogIGV4dGVybiAiQyIg
dm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwogIGV4dGVybiAiQyIgdm9pZCogY2FsbG9jKHNpemVf
dCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKik7CiAgZXh0ZXJuICJDIiB2
b2lkKiBtYWxsb2Moc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQqIHJlYWxsb2Modm9pZCosIHNp
emVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpOwogIGV4dGVybiAiQyIgaW50IGF0
ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpOwogIGV4dGVybiAiQyIgdm9pZCBleGl0KGludCk7CiAg
ZXh0ZXJuICJDIiB2b2lkIF9FeGl0KGludCk7CiAgZXh0ZXJuICJDIiBjaGFyKmdldGVudihjb25z
dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIqKTsKICBleHRlcm4g
IkMiIHZvaWQqIGJzZWFyY2goY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVf
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCkoY29uc3Qgdm9pZCAqLCBj
b25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIHZvaWQgcXNvcnQodm9pZCosIHNpemVfdCwgc2l6
ZV90LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKShjb25zdCB2b2lkICosIGNv
bnN0IHZvaWQgKikpOwogIGV4dGVybiAiQyIgaW50IGFicyhpbnQpOwogIGV4dGVybiAiQyIgbG9u
ZyBpbnQgbGFicyhsb25nIGludCk7CiAgZXh0ZXJuICJDIiBkaXZfdCBkaXYoaW50LCBpbnQpOwog
IGV4dGVybiAiQyIgbGRpdl90IGxkaXYobG9uZyBpbnQsIGxvbmcgaW50KTsKICBleHRlcm4gIkMi
IGludCBtYmxlbihjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBtYnRvd2Mo
d2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHdjdG9tYihj
aGFyKiwgd2NoYXJfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCosIGNv
bnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHdjc3RvbWJzKGNoYXIqLCBj
b25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKCgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBs
b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25n
IGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1f
X3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9f
ZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAl
IF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBf
X24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7
IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgZXh0ZXJuICJDIiBsb25nIGxv
bmcgaW50IGF0b2xsKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGxvbmcgbG9uZyBpbnQgc3Ry
dG9sbChjb25zdCBjaGFyKiwgY2hhcioqLCBpbnQpOwogIGV4dGVybiAiQyIgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VsbChjb25zdCBjaGFyKiwgY2hhcioqLCBpbnQpOwoKCgogIGV4dGVy
biAiQyIgbG9uZyBkb3VibGUgc3RydG9sZChjb25zdCBjaGFyKiwgY2hhcioqKTsKCn0KIyA1NCAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RyaW5nLmgiIDEgMwojIDU1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRh
bC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIg
MiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjIt
bGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzkgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzIDQKIyA1
OCAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQg
X19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpf
X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9f
Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vy
cm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpf
X2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDAgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jYXNzZXJ0LmgiIDIgMwojIDU2ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1l
bnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMiAzCiMgOTEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5hbWVzcGFjZSBz
dGQgewojIDEwOCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYt
MjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGlu
dCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0
YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9y
ZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf
b29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90
IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0g
X19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVz
dWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAg
ewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFs
bG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nf
b29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBz
dGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsK
ICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9
OwoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRl
IDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19v
b21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxv
Y19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0g
X19teV9tYWxsb2NfaGFuZGxlcikgeyB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOyB9CiAgICAgICAg
KCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7
CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nf
b29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFs
bG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAg
ICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAg
ICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgdGhyb3cgc3RkOjpiYWRfYWxsb2Mo
KTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9
IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0
KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxs
b2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9j
IHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsg
cmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVv
ZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAgICAgIHsgcmV0dXJu
IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3Mg
ZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgoKcHVibGlj
OgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jl
c3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAg
ICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9T
X2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBf
X24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7
CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0
X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9jcy9zcmMvZ2NjL2djYy0yLjk2
ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGxvYy5oIiwgMjMwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGlj
IHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25l
d19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRy
YTsKICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChf
X2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGxvYy5oIiwgMjM3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK
ICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19y
ZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwog
IH0KCn07CgoKCgp0eXBlZGVmIG1hbGxvY19hbGxvYyBhbGxvYzsKdHlwZWRlZiBtYWxsb2NfYWxs
b2Mgc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA1ODggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxv
Yy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBh
bGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1
ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl
ZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9
CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+
YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg
Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXpl
X3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRp
Y19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAg
ICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNp
emVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihf
VHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVy
biBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBf
X3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVz
dHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBh
bGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5
cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1
ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl
ZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2NjQg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2Fs
bG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1Rw
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z
dCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAg
X19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVy
bHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2Ep
IHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2Mp
IHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJl
bmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhj
b25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9j
YXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAw
CiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUo
X19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUo
cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFs
bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK
ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w
KSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgp
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBf
QWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0
IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0Fs
bG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAs
IF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19h
Mi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+
JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0Fs
bG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9f
dW5kZXJseWluZ19hbGxvYzsKfQoKCgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewog
IHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICBy
ZXR1cm4gZmFsc2U7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9j
PF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxv
Yz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CiMgODAwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVy
aW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogcmViaW5kPF9UcD46Om90aGVyCiAgICAg
ICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Y2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0
YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKIyA4NDMgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4
Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKIyA4NzcgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNz
IF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBkZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4g
PiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0Fs
bG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDg5MiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
bG9jLmgiIDMKfQojIDE5ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RyaW5nX2Z3ZC5oIiAyIDMK
IyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAyMCAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3N0cmluZ19md2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKCnRlbXBsYXRl
IDxjbGFzcyBfQ2hhclQsCiAgICAgICAgICBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KY2xhc3Mg
YmFzaWNfc3RyaW5nOwoKdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgoKfQoj
IDQxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDIgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVu
dGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
MiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjIt
bGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDM3ICIvY3Mvc3Jj
L2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyAzOCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2xpbWl0cy5oIiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcv
aW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTcvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTcvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKCgoKCgoKIyAxICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDEzMCAiL2Nz
L3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1
ZGUvbGltaXRzLmgiIDIgMyA0CiMgMTQyICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzIDQKIyAxMjYgIi91c3IvaW5jbHVk
ZS9iaXRzL3Bvc2l4MV9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGlt
LmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzIDQKIyAxICIv
dXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMyA0CiMgMzcgIi91c3IvaW5jbHVkZS9iaXRz
L2xvY2FsX2xpbS5oIiAyIDMgNAojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5o
IiAyIDMgNAojIDE0MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzIDQKIyAxNDcgIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzIDQKIyAxMzEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4
Mi4yLjE2LTIyLWxhdGVzdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1
ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTcv
aW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAxMiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTcvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA0MSAiL2NzL3NyYy9nY2MvZ2NjLTIu
OTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NsaW1pdHMuaCIgMiAzCiMgMzkgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFs
L0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1s
YXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDEgMwojIDM3ICIvY3Mvc3Jj
L2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVy
aW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgMzggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0cmluZ19md2QuaCIgMSAzCiMgMzkgIi9jcy9zcmMvZ2Nj
L2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJh
dG9yLmgiIDEgMwojIDMwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25maWcuaCIgMSAzCiMgMzEgIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1l
bnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmVsb3Bz
LmgiIDEgMwojIDM0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmVsb3BzLmgiIDMKbmFtZXNwYWNl
IHN0ZCB7IG5hbWVzcGFjZSByZWxfb3BzIHsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJu
ICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJh
dG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195IDwgX194
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKfSB9CiMgMzIgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGRlZi5oIiAxIDMKIyAzMyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgi
IDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgMzQgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZS5oIiAxIDMKIyAzOCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2UuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4
Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2tzLmgiIDEg
MwojIDIzMiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjIt
bGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVja3MuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgX011dGFibGVfdHJhaXQgewogIHR5cGVkZWYgX1RwIF9UeXBlOwp9
Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX011dGFibGVfdHJhaXQ8Y29uc3QgX1RwPiB7
CiAgdHlwZWRlZiBfVHAgX1R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHlwZT4Kdm9pZCBf
X3NpbmtfdW51c2VkX3dhcm5pbmcoX1R5cGUpIHsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlWCwg
Y2xhc3MgX1R5cGVZPgpzdHJ1Y3QgX1NUTF9DT05WRVJUX0VSUk9SIHsKICBzdGF0aWMgdm9pZAog
IF9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBlX1koX1R5cGVYIF9feCwgX1R5cGVZ
KSB7CiAgICBfVHlwZVkgX195ID0gX194OwogICAgX19zaW5rX3VudXNlZF93YXJuaW5nKF9feSk7
CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHlwZT4gc3RydWN0IF9fY2hlY2tfZXF1YWwgeyB9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlWCwgY2xhc3MgX1R5cGVZPgpzdHJ1Y3QgX1NUTF9TQU1F
X1RZUEVfRVJST1IgewogIHN0YXRpYyB2b2lkCiAgX190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9Z
KF9UeXBlWCAsIF9UeXBlWSApIHsKICAgIF9fY2hlY2tfZXF1YWw8X1R5cGVYPiB0MSA9IF9fY2hl
Y2tfZXF1YWw8X1R5cGVZPigpOwogIH0KfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xh
c3MgX1JldD4Kc3RydWN0IF9TVExfR0VORVJBVE9SX0VSUk9SIHsKICBzdGF0aWMgX1JldCBfX2dl
bmVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0Z1bmMmIF9fZikgewogICAgcmV0dXJuIF9f
ZigpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYz4Kc3RydWN0IF9TVExfR0VORVJBVE9S
X0VSUk9SPF9GdW5jLCB2b2lkPiB7CiAgc3RhdGljIHZvaWQgX19nZW5lcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YpIHsKICAgIF9fZigpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0Z1bmMsIGNsYXNzIF9SZXQsIGNsYXNzIF9Bcmc+CnN0cnVjdCBfU1RMX1VOQVJZX0ZV
TkNUSU9OX0VSUk9SIHsKICBzdGF0aWMgX1JldAogIF9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9BcmcmIF9fYXJnKSB7CiAgICByZXR1cm4gX19mKF9fYXJnKTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9Bcmc+CnN0cnVjdCBfU1RMX1VOQVJZ
X0ZVTkNUSU9OX0VSUk9SPF9GdW5jLCB2b2lkLCBfQXJnPiB7CiAgc3RhdGljIHZvaWQKICBfX3Vu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRnVuYyYgX19mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQXJnJiBfX2FyZykgewogICAg
X19mKF9fYXJnKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9SZXQsIGNs
YXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4Kc3RydWN0IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SIHsKICBzdGF0aWMgX1JldAogIF9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbihfRnVuYyYgX19mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfRmlyc3QmIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7CiAgICByZXR1cm4gX19mKF9fZmly
c3QsIF9fc2Vjb25kKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9GaXJz
dCwgY2xhc3MgX1NlY29uZD4Kc3RydWN0IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPF9GdW5j
LCB2b2lkLCBfRmlyc3QsIF9TZWNvbmQ+IHsKICBzdGF0aWMgdm9pZAogIF9fYmluYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRnVuYyYgX19mLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRmlyc3QmIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7
CiAgICBfX2YoX19maXJzdCwgX19zZWNvbmQpOwogIH0KfTsKIyAzMzggIi9jcy9zcmMvZ2NjL2dj
Yy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9i
aXRzL2NvbmNlcHRfY2hlY2tzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJz
dCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SIHsgc3Rh
dGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNv
bnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9f
Zmlyc3QgPT0gX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgPT0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX05PVF9FUVVBTF9F
UlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7
IHJldHVybiBfX2ZpcnN0ICE9IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj
b25kKSB7IHJldHVybiBfX2ZpcnN0ICE9IF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9M
RVNTX1RIQU5fRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBf
X3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmlu
YXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNv
bmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0IDwgX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklO
QVJZX09QX0xFU1NfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBf
U2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8PSBfX3NlY29uZDsgfSBzdGF0aWMg
X1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2Zp
cnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8PSBfX3NlY29uZDsgfSB9
Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBzdHJ1
Y3QgX1NUTF9CSU5BUllfT1BfR1JFQVRFUl9USEFOX0VSUk9SIHsgc3RhdGljIF9SZXQgX19jb25z
dF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJzdCYgX19m
aXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgPiBfX3NlY29u
ZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+IF9f
c2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9T
ZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9HUkVBVEVSX0VRVUFMX0VSUk9SIHsgc3RhdGlj
IF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0
IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly
c3QgPj0gX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJu
IF9fZmlyc3QgPj0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9G
aXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1BMVVNfRVJST1IgeyBz
dGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
Y29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4g
X19maXJzdCArIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJl
dHVybiBfX2ZpcnN0ICsgX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1RJTUVTX0VSUk9S
IHsgc3RhdGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uKGNvbnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgKiBfX3NlY29uZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkg
eyByZXR1cm4gX19maXJzdCAqIF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9ESVZJREVf
RVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkg
eyByZXR1cm4gX19maXJzdCAvIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj
b25kKSB7IHJldHVybiBfX2ZpcnN0IC8gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1NV
QlRSQUNUX0VSUk9SIHsgc3RhdGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19z
ZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgLSBfX3NlY29uZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFy
eV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25k
JiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAtIF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFS
WV9PUF9NT0RfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBf
X3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAlIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmlu
YXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNv
bmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICUgX19zZWNvbmQ7IH0gfTsKIyAzNjAgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2tzLmgiIDMKc3RydWN0IF9TVExfRVJST1IgewoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBlCiAgX19kZWZhdWx0X2NvbnN0
cnVjdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSkgewogICAgcmV0dXJuIF9UeXBlKCk7
CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2Fzc2lnbm1l
bnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX19hID0g
X19hOwogICAgcmV0dXJuIF9fYTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRp
YyBfVHlwZQogIF9fY29weV9jb25zdHJ1Y3Rvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUg
X19hKSB7CiAgICBfVHlwZSBfX2MoX19hKTsKICAgIHJldHVybiBfX2M7CiAgfQogIHRlbXBsYXRl
IDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2NvbnN0X3BhcmFtZXRlcl9yZXF1aXJl
ZF9mb3JfY29weV9jb25zdHJ1Y3RvcihfVHlwZSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1R5cGUmIF9fYikgewogICAgX1R5cGUgX19j
KF9fYik7CiAgICByZXR1cm4gX19jOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3Rh
dGljIF9UeXBlCiAgX19jb25zdF9wYXJhbWV0ZXJfcmVxdWlyZWRfZm9yX2Fzc2lnbm1lbnRfb3Bl
cmF0b3IoX1R5cGUgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UeXBlJiBfX2IpIHsKICAgIF9fYSA9IF9fYjsKICAgIHJldHVy
biBfX2E7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2xl
c3NfdGhhbl9jb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EsIF9UeXBl
IF9fYikgewogICAgaWYgKF9fYSA8IF9fYikgcmV0dXJuIF9fYTsKICAgIHJldHVybiBfX2I7CiAg
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2VxdWFsaXR5X2Nv
bXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSwgX1R5cGUgX19iKSB7CiAg
ICBpZiAoX19hID09IF9fYiB8fCBfX2EgIT0gX19iKSByZXR1cm4gX19hOwogICAgcmV0dXJuIF9f
YjsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KICBzdGF0aWMgdm9pZAogIF9fZGVy
ZWZlcmVuY2Vfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2kpIHsK
ICAgIF9fc2lua191bnVzZWRfd2FybmluZygqX19pKTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KICBzdGF0aWMgdm9pZAogIF9fZGVyZWZlcmVuY2Vfb3BlcmF0b3JfYW5kX2Fzc2ln
bm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2kpIHsKICAgICpfX2kgPSAq
X19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRpYyB2b2lkCiAgX19w
cmVpbmNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2kp
IHsKICAgICsrX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgogIHN0YXRpYyB2
b2lkCiAgX19wb3N0aW5jcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfSXRl
cmF0b3IgX19pKSB7CiAgICBfX2krKzsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
ICBzdGF0aWMgdm9pZAogIF9fcHJlZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbihfSXRlcmF0b3IgX19pKSB7CiAgICAtLV9faTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KICBzdGF0aWMgdm9pZAogIF9fcG9zdGRlY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgX19pLS07CiAgfQogIHRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9UeXBlPgogIHN0YXRpYyB2b2lkCiAgX19wb3N0aW5j
cmVtZW50X29wZXJhdG9yX2FuZF9hc3NpZ25tZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfSXRl
cmF0b3IgX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1R5cGUgX190KSB7CiAgICAqX19pKysgPSBfX3Q7CiAgfQogIHRl
bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KICBzdGF0aWMgX0l0ZXJh
dG9yCiAgX19pdGVyYXRvcl9hZGRpdGlvbl9hc3NpZ25tZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfSXRlcmF0b3IgX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikgewogICAgX19pICs9IF9fbjsKICAgIHJldHVy
biBfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
ICBzdGF0aWMgX0l0ZXJhdG9yCiAgX19pdGVyYXRvcl9hZGRpdGlvbl9yZXF1aXJlbWVudF92aW9s
YXRpb24oX0l0ZXJhdG9yIF9faSwgX0Rpc3RhbmNlIF9fbikgewogICAgX19pID0gX19pICsgX19u
OwogICAgX19pID0gX19uICsgX19pOwogICAgcmV0dXJuIF9faTsKICB9CiAgdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyBfSXRlcmF0b3IKICBfX2l0
ZXJhdG9yX3N1YnRyYWN0aW9uX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVy
YXRvciBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgLT0gX19uOwogICAgcmV0dXJuIF9f
aTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0
YXRpYyBfSXRlcmF0b3IKICBfX2l0ZXJhdG9yX3N1YnRyYWN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbihfSXRlcmF0b3IgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgICBfX2kgPSBfX2kgLSBfX247
CiAgICByZXR1cm4gX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+CiAgc3RhdGljIF9EaXN0YW5jZQogIF9fZGlmZmVyZW5jZV9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSwgX0l0ZXJhdG9yIF9faiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pIHsKICAg
IF9fbiA9IF9faSAtIF9fajsKICAgIHJldHVybiBfX247CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBf
RXhwLCBjbGFzcyBfVHlwZSwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyBfVHlwZQogIF9fZWxl
bWVudF9hY2Nlc3Nfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9FeHAgX194LCBfVHlw
ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbikgewogICAgcmV0dXJuIF9feFtfX25dOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0V4cCwgY2xhc3MgX1R5cGUsIGNsYXNzIF9EaXN0YW5jZT4KICBzdGF0aWMgdm9pZAogIF9fZWxl
bWVudF9hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRXhwIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1R5
cGUqIF9fdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbikgewogICAgX194W19fbl0gPSAqX190OwogIH0KCn07CgoKCm5h
bWVzcGFjZSBzdGQgewp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPiBzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CnN0cnVjdCBfX3ZhbHVlX3R5cGVfdHlw
ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBz
dGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9fZGlmZmVyZW5jZV90eXBlX3R5cGVfZGVmaW5p
dGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24gewogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2Vf
dHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9fcmVmZXJlbmNlX3R5cGVf
ZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24gewogIHR5cGVkZWYgdHlwZW5hbWUgc3Rk
OjppdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX19wb2ludGVyX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb24gewogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8
X0l0ZXI+Ojpwb2ludGVyIHBvaW50ZXI7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CnN0cnVj
dCBfX2l0ZXJhdG9yX2NhdGVnb3J5X3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRp
b24gewogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7Cn07CgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1R5cGU+CnN0cnVjdCBfQXNzaWduYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb24g
ewogIHN0YXRpYyB2b2lkIF9Bc3NpZ25hYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBf
X2EpIHsKICAgIF9TVExfRVJST1I6Ol9fYXNzaWdubWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oX19hKTsKICAgIF9TVExfRVJST1I6Ol9fY29weV9jb25zdHJ1Y3Rvcl9yZXF1aXJl
bWVudF92aW9sYXRpb24oX19hKTsKICAgIF9TVExfRVJST1I6Ol9fY29uc3RfcGFyYW1ldGVyX3Jl
cXVpcmVkX2Zvcl9jb3B5X2NvbnN0cnVjdG9yKF9fYSxfX2EpOwogICAgX1NUTF9FUlJPUjo6X19j
b25zdF9wYXJhbWV0ZXJfcmVxdWlyZWRfZm9yX2Fzc2lnbm1lbnRfb3BlcmF0b3IoX19hLF9fYSk7
CiAgfQp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgpzdHJ1Y3QgX0RlZmF1bHRDb25zdHJ1
Y3RpYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CiAgc3RhdGljIHZvaWQgX0RlZmF1bHRDb25z
dHJ1Y3RpYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsKICAgIF9TVExfRVJS
T1I6Ol9fZGVmYXVsdF9jb25zdHJ1Y3Rvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hKTsKICB9
Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHlwZT4Kc3RydWN0IF9FcXVhbGl0eUNvbXBhcmFibGVf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfRXF1YWxpdHlDb21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EpIHsKICAgIF9TVExfRVJST1I6Ol9fZXF1
YWxpdHlfY29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hLCBfX2EpOwogIH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CnN0cnVjdCBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbiB7CiAgc3RhdGljIHZvaWQgX0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1
aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hKSB7CiAgICBfU1RMX0VSUk9SOjpfX2xlc3NfdGhh
bl9jb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EsIF9fYSk7CiAgfQp9OwoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RyaXZpYWxJdGVyYXRvcj4Kc3RydWN0IF9Ucml2aWFsSXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKc3RhdGljIHZvaWQKX1RyaXZpYWxJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oX1RyaXZpYWxJdGVyYXRvciBfX2kpIHsKICB0eXBlZGVmIHR5cGVu
YW1lCiAgICBfX3ZhbHVlX3R5cGVfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjxfVHJpdmlhbEl0ZXJhdG9yPjo6CiAgICB2YWx1ZV90eXBlIF9fVDsKCiAgX0Fzc2lnbmFibGVf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPF9Ucml2aWFsSXRlcmF0b3I+OjoKICAgIF9Bc3NpZ25hYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfRGVmYXVsdENvbnN0cnVjdGlibGVfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPF9Ucml2aWFsSXRlcmF0b3I+OjoKICAgIF9EZWZhdWx0Q29uc3Ry
dWN0aWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX0VxdWFsaXR5Q29tcGFyYWJs
ZV9jb25jZXB0X3NwZWNpZmljYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgX0VxdWFsaXR5
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX1NUTF9FUlJPUjo6X19k
ZXJlZmVyZW5jZV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9Ucml2aWFsSXRlcmF0b3I+CnN0cnVjdCBfTXV0YWJsZV9Ucml2aWFsSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKc3RhdGljIHZvaWQKX011dGFibGVfVHJpdmlh
bEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHJpdmlhbEl0ZXJhdG9yIF9faSkgewog
IF9Ucml2aWFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9Ucml2aWFsSXRlcmF0b3I+
OjoKICAgIF9Ucml2aWFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9T
VExfRVJST1I6Ol9fZGVyZWZlcmVuY2Vfb3BlcmF0b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgpzdHJ1Y3QgX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKc3RhdGljIHZv
aWQKX0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JbnB1dEl0ZXJhdG9yIF9f
aSkgewoKICBfVHJpdmlhbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfSW5wdXRJdGVy
YXRvcj46OgogICAgX1RyaXZpYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsK
CiAgX19kaWZmZXJlbmNlX3R5cGVfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjxfSW5wdXRJdGVyYXRvcj4oKTsKICBfX3JlZmVyZW5jZV90eXBlX2RlZmluaXRpb25fcmVxdWly
ZW1lbnRfdmlvbGF0aW9uPF9JbnB1dEl0ZXJhdG9yPigpOwogIF9fcG9pbnRlcl90eXBlX2RlZmlu
aXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9JbnB1dEl0ZXJhdG9yPigpOwogIF9faXRlcmF0
b3JfY2F0ZWdvcnlfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfSW5wdXRJ
dGVyYXRvcj4oKTsKCiAgX1NUTF9FUlJPUjo6X19wcmVpbmNyZW1lbnRfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6X19wb3N0aW5jcmVtZW50X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf
T3V0cHV0SXRlcmF0b3I+CnN0cnVjdCBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uIHsKc3RhdGljIHZvaWQKX091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
T3V0cHV0SXRlcmF0b3IgX19pKSB7CgogIF9Bc3NpZ25hYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjxfT3V0cHV0SXRlcmF0b3I+OjoKICAgIF9Bc3NpZ25hYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfX2kpOwoKICBfX2l0ZXJhdG9yX2NhdGVnb3J5X3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb248X091dHB1dEl0ZXJhdG9yPigpOwoKICBfU1RMX0VSUk9SOjpfX2RlcmVmZXJl
bmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIF9TVExfRVJST1I6Ol9f
cHJlaW5jcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIF9TVExf
RVJST1I6Ol9fcG9zdGluY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19p
KTsKICBfU1RMX0VSUk9SOjoKICAgIF9fcG9zdGluY3JlbWVudF9vcGVyYXRvcl9hbmRfYXNzaWdu
bWVudF9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pLCAqX19pKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kc3RydWN0IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uIHsKc3RhdGljIHZvaWQKX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2kpIHsKCiAgX0lucHV0SXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPF9Gb3J3YXJkSXRlcmF0b3I+OjoKICAgIF9JbnB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4Kc3RydWN0IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb24gewpzdGF0aWMgdm9pZApfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uKF9Gb3J3YXJkSXRlcmF0b3IgX19pKSB7CiAgX0ZvcndhcmRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248X0ZvcndhcmRJdGVyYXRvcj46OgogICAgX0ZvcndhcmRJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjxfRm9yd2FyZEl0ZXJhdG9yPjo6CiAgICBfT3V0cHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3I+CnN0cnVjdCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pKSB7CgogIF9Gb3J3YXJkSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+OjoKICAg
IF9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9TVExfRVJS
T1I6Ol9fcHJlZGVjcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwog
IF9TVExfRVJST1I6Ol9fcG9zdGRlY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b24oX19pKTsKfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CnN0
cnVjdCBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
IHsKc3RhdGljIHZvaWQKX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbigKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pKQp7CiAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248X0JpZGlyZWN0aW9uYWxJdGVy
YXRvcj46OgogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X19pKTsKCiAgX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6CiAgICBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgX192YWx1ZV90
eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb248CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfX1Q7CiAgdHlwZW5hbWUgX011dGFibGVfdHJhaXQ8
X19UPjo6X1R5cGUqIF9fdG1wX3B0ciA9IDA7CgogIF9TVExfRVJST1I6OgogICAgX19wb3N0aW5j
cmVtZW50X29wZXJhdG9yX2FuZF9hc3NpZ25tZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpfX3RtcF9wdHIpOwp9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZEFjY0l0
ZXI+CnN0cnVjdCBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uIHsK
c3RhdGljIHZvaWQKX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
UmFuZEFjY0l0ZXIgX19pKSB7CgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPF9SYW5kQWNjSXRlcj46OgogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3Nw
ZWNpZmljYXRpb248X1JhbmRBY2NJdGVyPjo6CiAgICBfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIHR5cGVkZWYgdHlwZW5hbWUKICAgICAgICBfX3ZhbHVl
X3R5cGVfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfUmFuZEFjY0l0ZXI+
CiAgICAgICAgOjp2YWx1ZV90eXBlCiAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUK
ICAgICAgICBfX2RpZmZlcmVuY2VfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uPF9SYW5kQWNjSXRlcj4KICAgICAgICA6OmRpZmZlcmVuY2VfdHlwZQogICAgX0Rpc3Q7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDxfRGlzdD46Ol9UeXBlIF9NdXREaXN0
OwoKCiAgX1NUTF9FUlJPUjo6X19pdGVyYXRvcl9hZGRpdGlvbl9hc3NpZ25tZW50X3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICBfU1RMX0VSUk9SOjpf
X2l0ZXJhdG9yX2FkZGl0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7
CiAgX1NUTF9FUlJPUjo6CiAgICBfX2l0ZXJhdG9yX3N1YnRyYWN0aW9uX2Fzc2lnbm1lbnRfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7CiAgX1NUTF9FUlJPUjo6X19p
dGVyYXRvcl9zdWJ0cmFjdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NdXREaXN0
KCkpOwogIF9TVExfRVJST1I6Ol9fZGlmZmVyZW5jZV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb24oX19pLCBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfTXV0RGlzdCgpKTsKICB0eXBlbmFtZSBfTXV0YWJsZV90cmFpdDx2
YWx1ZV90eXBlPjo6X1R5cGUqIF9fZHVtbXlfcHRyID0gMDsKICBfU1RMX0VSUk9SOjpfX2VsZW1l
bnRfYWNjZXNzX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdW1t
eV9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX011dERpc3QoKSk7Cn0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZEFjY0l0
ZXI+CnN0cnVjdCBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb24gewpzdGF0aWMgdm9pZApfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb24oX1JhbmRBY2NJdGVyIF9faSkKewogIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248X1JhbmRBY2NJdGVyPjo6CiAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9NdXRhYmxlX0JpZGlyZWN0
aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248X1JhbmRBY2NJdGVyPjo6CiAgICBf
TXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7
CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAgIF9fdmFsdWVfdHlwZV90eXBlX2RlZmluaXRpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9SYW5kQWNjSXRlcj4KICAgICAgICA6OnZhbHVlX3R5cGUK
ICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgICAgIF9fZGlmZmVyZW5jZV90
eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb248X1JhbmRBY2NJdGVyPgog
ICAgICAgIDo6ZGlmZmVyZW5jZV90eXBlCiAgICBfRGlzdDsKCiAgdHlwZW5hbWUgX011dGFibGVf
dHJhaXQ8dmFsdWVfdHlwZT46Ol9UeXBlKiBfX3RtcF9wdHIgPSAwOwoKICBfU1RMX0VSUk9SOjpf
X2VsZW1lbnRfYXNzaWdubWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pLAog
ICAgICAgICAgICAgICAgICBfX3RtcF9wdHIsIF9EaXN0KCkpOwp9Cn07CgoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVHlwZT4gc3RydWN0IF9fdmFsdWVfdHlwZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92
aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsg
fTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX2RpZmZlcmVuY2VfdHlwZV9fdHlwZWRl
Zl9yZXF1aXJlbWVudF92aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5cGU6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3Qg
X19zaXplX3R5cGVfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBl
bmFtZSBUeXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g
c3RydWN0IF9fcmVmZXJlbmNlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVk
ZWYgdHlwZW5hbWUgVHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsgfTsKdGVtcGxhdGUgPGNsYXNz
IFR5cGU+IHN0cnVjdCBfX2NvbnN0X3JlZmVyZW5jZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9s
YXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZl
cmVuY2U7IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3QgX19wb2ludGVyX190eXBlZGVm
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6cG9pbnRlciBw
b2ludGVyOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gc3RydWN0IF9fY29uc3RfcG9pbnRlcl9f
dHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5cGU6OmNv
bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpz
dHJ1Y3QgX0FsbG9jYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfQWxs
b2NhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfQWxsb2MgX19hKSB7CgogIF9EZWZhdWx0Q29u
c3RydWN0aWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248X0FsbG9jPjo6CiAgICBfRGVmYXVsdENv
bnN0cnVjdGlibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSk7CgogIF9FcXVhbGl0eUNvbXBh
cmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9BbGxvYz46OgogICAgX0VxdWFsaXR5Q29tcGFy
YWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hKTsKCiAgX192YWx1ZV90eXBlX190eXBlZGVm
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19kaWZmZXJlbmNlX3R5cGVfX3R5
cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX3NpemVfdHlwZV9fdHlw
ZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fcmVmZXJlbmNlX190eXBl
ZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19jb25zdF9yZWZlcmVuY2Vf
X3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX3BvaW50ZXJfX3R5
cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX2NvbnN0X3BvaW50ZXJf
X3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6dmFsdWVfdHlwZSBfVHA7CgoKfQp9OwojIDM5ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKc3RydWN0IGlucHV0
X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBm
b3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVj
dCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3IgewogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
ciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVm
IF9UcCYgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIg
PSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJhdG9yIHsKICB0eXBl
ZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9Qb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlw
ZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
Y29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7Cn07CiMg
MTQyICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZS5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0
ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9f
ZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYg
X19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0
YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0
ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7IH0KIyAyNjcgIi9jcy9zcmMvZ2Nj
L2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2Uo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBf
X24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3Rh
bmNlJiBfX24pCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyYXRvciApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyYXRvciA+IDo6X0lucHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0
YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yID4gOjpfUmFuZG9tQWNjZXNz
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIGRvIHsgdm9pZCAoKl9f
eCkoIF9JbnB1dEl0ZXJhdG9yICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXJhdG9yID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfQ2F0ZWdvcnkoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fbi0tKSArK19faTsK
fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ks
IF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgKSA9
IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBpZiAoX19uID49IDApCiAgICB3aGlsZSAo
X19uLS0pICsrX19pOwogIGVsc2UKICAgIHdoaWxlIChfX24rKykgLS1fX2k7Cn0KCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
biwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAg
ZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6
Ol9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3Im
IF9faSwgX0Rpc3RhbmNlIF9fbikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXJhdG9y
ICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXJhdG9y
ID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsK
fQoKfQojIDM1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0y
Mi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL2Nz
L3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkIHsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Nv
bnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRh
aW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxp
Y2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9f
eCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29u
c3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFp
bmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQog
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4g
KnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhp
bnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CiMgNzEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICBy
ZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3Rl
ZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBj
b250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp
IHsKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyAxMTAgIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpp
bmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9D
b250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVy
YXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250
YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoK
ICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjpp
dGVyYXRvciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFp
bmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQo
aXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu
ICp0aGlzOyB9Cn07CiMgMTUyICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9y
IF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwog
IHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNz
IF9SZWZlcmVuY2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90
PgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu
Y2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50Owpw
dWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2Ug
cmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxp
Y2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
IF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNl
KCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1
cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm
KG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9T
ZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsr
Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CiMgMjM4ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBj
b25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBf
RGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8
X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJhc2Uo
KSA9PSBfX3kuYmFzZSgpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAg
IGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYs
IF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9
PSBfX3kpOwp9CiMgMjY3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVk
OgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9y
X2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRl
ZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNp
dCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoK
ICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVu
dCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7
fQoKCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50
OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAg
LS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkg
ewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3Rt
cDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0
b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50
IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewog
ICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9y
LShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAr
IF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAg
IGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0
b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBf
X3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195IDwg
X194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu
ICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7
CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpp
bmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4g
X195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQojIDgyMyAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3QgPSBwdHJkaWZmX3Q+IGNsYXNzIGlzdHJlYW1faXRlcmF0b3I7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0
ZXJhdG9yPF9UcCwgX0Rpc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt
X2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz
dD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9EMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Qx
LCBfRDE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8
X1QxLCBfRDE+Jik7CgoKCgoKCnByb3RlY3RlZDoKICBpc3RyZWFtKiBfTV9zdHJlYW07CiAgX1Rw
IF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtlcjsKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBf
TV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9NX2Vu
ZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICBfTV9lbmRfbWFya2VyID0gKCpf
TV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigp
IDogX01fc3RyZWFtKCZjaW4pLCBfTV9lbmRfbWFya2VyKGZhbHNlKSB7fQogIGlzdHJlYW1faXRl
cmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQogIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFt
X2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IG9wZXJhdG9y
KysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7
CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDg5MyAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAoX194Ll9NX3N0cmVhbSA9
PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3kuX01f
ZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195
Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8
X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90
ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVi
bGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIG9zdHJl
YW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDAp
IHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykKICAg
IDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8
X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBf
X3ZhbHVlOwogICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJl
dHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9Cn07CiMgOTU1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRh
bC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmNs
YXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVjdGVk
OgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0eXBl
ZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyIHBv
aW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9
CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9N
X2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGluZSBf
X25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5l
cj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5jZQog
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIKICBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoK
ICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1h
bF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBv
cGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf
TV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3JtYWxf
aXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog
IHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3Jf
dHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJl
dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJlbmNl
X3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29uc3QK
ICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0ZXJh
dG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMuYmFz
ZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkg
PCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPihj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
X19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBi
b29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoKdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg
X0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9f
bGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+
Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzYgIi9jcy9zcmMvZ2Nj
L2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmluZy5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0
MSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyAxOSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFp
dHMuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25maWcuaCIgMSAzCiMgMjAgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDIgMwojIDU3ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9
Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBf
X2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsK
IyA4MSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFs
c2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFs
c2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKIyA5NiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgy
LjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlw
ZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMzAxICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNf
aW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFs
X2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3Bh
Y2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IHN0
ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDQyICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVy
aW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3Ry
aW5nLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4y
LjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNDMg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2Nj
LTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1l
bnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJp
bmcuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2V4Y2VwdGlvbl9zdXBwb3J0LmgiIDEgMwoj
IDQ2ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9leGNlcHRpb25fc3VwcG9ydC5oIiAzCm5hbWVzcGFjZSBz
dGQgewoKCgogIGV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIgKl9fc3RyKTsK
ICBleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvcihjb25zdCBjaGFyICpfX3N0cik7CiMgNjMgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL2V4Y2VwdGlvbl9zdXBwb3J0LmgiIDMKfQojIDM4ICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYXRvbWlj
aXR5LmgiIDEgMwojIDIzICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVm
IGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0
ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193
b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0
OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAg
ICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDog
IjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0
ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBf
X21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUw
LCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21l
bSkgOiAibWVtb3J5Iik7Cn0KCnN0YXRpYyBpbmxpbmUgY2hhcgpfX2F0dHJpYnV0ZV9fICgoX191
bnVzZWRfXykpCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyogX19wLCBsb25nIF9f
b2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7CiAgY2hhciBfX3JldDsKICBsb25nIF9fcmVhZHZhbDsK
CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBjbXB4Y2hnbCAlMywgJTE7IHNldGUgJTAi
CiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1xIiAoX19yZXQpLCAiPW0iICgqX19wKSwgIj1h
IiAoX19yZWFkdmFsKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoX19uZXd2YWwpLCAi
bSIgKCpfX3ApLCAiYSIgKF9fb2xkdmFsKSk7CiAgcmV0dXJuIF9fcmV0Owp9CiMgMzkgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewojIDgxICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7
CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX25vcm1h
bF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVm
IF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4gY29uc3RfaXRl
cmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh
dG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTE2ICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNf
YWxsb2M7CiMgMTM0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0
IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAg
ICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5j
ZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19z
aGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAg
ICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMg
PSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7
IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRh
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRo
aXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19z
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAg
IF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9B
bGxvYyYgX19hbGxvYzIpCiAgICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2Fs
bG9jMSA9PSBfX2FsbG9jMikgPwogICAgICAgICAgICBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShf
X2FsbG9jMSk7IH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXpl
X3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25z
dCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRk
KCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwog
ICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikg
dGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAg
ICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAg
ICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAg
ICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiMgMjA2ICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIGlubGluZSBzdGF0aWMg
Ym9vbAogICAgICAgIF9TX2V4Y2Vzc19zbG9wKHNpemVfdCwgc2l6ZV90KTsKCiAgICAgIH07CgoK
ICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9j
X2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9j
KF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07Cgog
ICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNf
Y2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2Nf
aGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVw
X3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlw
ZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQq
CiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5f
TV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoK
ICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
X01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAg
ICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQo
KSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAg
ICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBkbyB7IGlm
IChfX3BvcyA+IHRoaXMtPnNpemUoKSkgX19vdXRfb2ZfcmFuZ2UoIl9fcG9zID4gdGhpcy0+c2l6
ZSgpIik7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwog
ICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19v
ZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBf
X3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAo
X01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2No
YXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAg
ewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAg
ICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwg
aXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9f
azIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hh
clQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAg
eyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sx
LCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2sy
IC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU
KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRy
YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAg
ICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw
ZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRp
YyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAg
ICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u
c3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9j
JiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBf
X2JlZ2luLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBf
TV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJl
dHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w
ZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJu
IHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQog
ICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRh
KCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4g
aXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3Rf
aXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Io
X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsg
fQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAg
ICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlz
LT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkg
Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9z
aXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j
KTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXpl
KF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25z
dCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVz
ZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkg
eyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVm
ZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y
W10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJl
dHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAg
ICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGRvIHsgaWYgKF9fbiA+
PSB0aGlzLT5zaXplKCkpIF9fb3V0X29mX3JhbmdlKCJfX24gPj0gdGhpcy0+c2l6ZSgpIik7IH0g
d2hpbGUgKDApOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAg
cmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBkbyB7IGlm
IChfX24gPj0gc2l6ZSgpKSBfX291dF9vZl9yYW5nZSgiX19uID49IHNpemUoKSIpOyB9IHdoaWxl
ICgwKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwog
ICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4g
dGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3Ir
PShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAg
eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
Yyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19z
dHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhf
Q2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEs
IF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3Ry
Ll9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4g
dGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf
X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCks
IF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9f
cCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwg
X19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9J
bnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19i
ZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBl
IF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIGl0ZXJh
dG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f
cCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUg
X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBl
IF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9N
X2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01f
Y2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3My
LCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7
CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBfX3MgKyBfX24pOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+
aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks
IF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBf
TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o
KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf
dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg
fQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAg
ICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBf
TV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0
dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXpl
X3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo
X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCkt
Pl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkp
OwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f
cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBf
X24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAg
ICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsKICAgICAgICByZXR1cm4g
dGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAg
ICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xk
KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9N
X3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9Cgog
ICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndk
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAg
ICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf
Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0
b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9f
ZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29u
c3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf
QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2Nv
bnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9B
bGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cgog
ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBf
Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv
cyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0
cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsK
ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJt
aW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0No
YXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxv
Y2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBs
dXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRh
KCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBy
ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19j
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9f
YywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9v
ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90
X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg
PSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19z
dHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
cG9zKSBjb25zdAogICAgICB7CiAgICAgICAgZG8geyBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkp
IF9fb3V0X29mX3JhbmdlKCJfX3BvcyA+IHRoaXMtPnNpemUoKSIpOyB9IHdoaWxlICgwKTsKICAg
ICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAgfQoKICAg
ICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAg
ICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6
ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
bWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQog
ICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAg
ICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNv
bXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIp
IGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0
OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIgPSBucG9z
KSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKgogICAgICBf
U19maW5kKGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQsIF9DaGFyVCBf
X2MpOwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5
X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25z
dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwog
ICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19z
aXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5h
cHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
IDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
Pihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFy
ZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7
IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
ID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQq
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zdHIpOwoKfQojIDQ0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwoK
CiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyAzMCAiL2NzL3Ny
Yy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZl
eHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDEgMwojIDM1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25maWcuaCIgMSAzCiMgMzYgIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4
cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
cmVsb3BzLmgiIDEgMwojIDM3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDM0ICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQgewoKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0
eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFp
cigpIDogZmlyc3QoX1QxKCkpLCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBfVDEmIF9f
YSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBs
YXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBf
X3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cgp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g
X194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1
cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5m
aXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp
IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWly
PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEo
X194IDwgX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5l
IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihjb25zdCBfVDEgX194LCBjb25zdCBfVDIgX195KQoK
Cgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDM5ICIvY3Mvc3Jj
L2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgojIDEgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQ0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRh
bC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYt
MjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgNDUgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyA0NiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50
YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQ3ICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2Nj
LTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL25l
dyIgMSAzCiMgNDggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCiMg
MSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA1MyAiL2NzL3NyYy9nY2Mv
Z2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2UuaCIgMSAzCiMgNTYgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFs
L0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0y
Mi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNTcgIi9j
cy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZCB7CgoK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFz
cyBfVHA+CmlubGluZSB2b2lkIF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2Fy
ZEl0ZXIyIF9fYiwgX1RwKikgewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAg
Kl9fYiA9IF9fdG1wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zv
cndhcmRJdGVyMj4KaW5saW5lIHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9y
d2FyZEl0ZXIyIF9fYikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjEgKSA9IF9N
dXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRl
cjEgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiAp
ID0gX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0Zvcndh
cmRJdGVyMiA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9F
UlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBl
ICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlID46
Ol9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBlX1k7IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2Nv
bnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19pdGVyX3N3
YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfVHAgKSA9IF9Bc3NpZ25hYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfQXNz
aWduYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
X1RwIF9fdG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBfX3RtcDsKfQojIDk4ICIvY3Mv
c3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp
bmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgZG8g
eyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsg
cmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9U
cCApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IF9UcCA+IDo6
X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1p
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewoKICBp
ZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewoKICBpZiAoX19jb21w
KF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQojIDEzNSAiL2NzL3NyYy9nY2Mv
Z2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyCl9fY29w
eShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9E
aXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24g
PiAwOyAtLV9fbikgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
ICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg
X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0
LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKSB7CiAgcmV0dXJuIF9fY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX190cnVlX3R5cGUpIHsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogIHJl
dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX3RydWVfdHlwZSkgewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikgewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg
ICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9PdXRwdXRJdGVy
KF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1
dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz
ZV90eXBlKSB7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
OwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jl
c3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
cmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRl
ciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIg
PiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJ
dGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KIyAzMzIgIi9jcy9zcmMvZ2NjL2djYy0yLjk2
ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xh
c3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQojIDM2NCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmlt
ZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgX0NhdDsKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6ZGlm
ZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CgogIHN0YXRpYyBfQmlkaXJlY3Rpb25h
bEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAg
ICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXQo
KSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf
X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0
aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog
X19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsK
ICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0p
OwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1
ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U
cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICA6OmNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+
CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
dCwgX0JJMiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZp
YWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlh
bD4KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlf
YmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkky
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsKfQoKdGVtcGxhdGUgPHR5cGVu
YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRw
dXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f
ZmFsc2VfdHlwZSl7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgpp
bmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19m
aXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBf
X2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKSB7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CSTEgKSA9
IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQkkxID4gOjpf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQkkyICkgPSBfTXV0YWJsZV9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQkkyID4gOjpfTXV0YWJsZV9C
aWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QkkxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf
dHlwZSApID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJ
MT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5
cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+
OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFs
X2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7Cn0KIyA0NjEgIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0
ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog
IGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxfSW5w
dXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JBSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxf
UkFJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2Nv
dW50LAogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpIHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Owog
IHJldHVybiBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlcj4KX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0
ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJ
dGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRl
ciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQp
Owp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZp
bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg
X192YWx1ZSkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVf
Rm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpf
TXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
ICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
T3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091
dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lk
IGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykgewogIHVuc2lnbmVkIGNoYXIg
X190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsK
fQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKSB7CiAgc2lnbmVk
IGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hh
ciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpIHsKICBjaGFyIF9fdG1w
ID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt
cCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5l
IHVuc2lnbmVkIGNoYXIqIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKSB7
CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsg
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBzaWduZWQgY2hhciogZmlsbF9u
KGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2lnbmVkIGNoYXImIF9fYykgewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19j
KTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxp
bmUgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19j
KSB7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0
ICsgX19uOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkg
PSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpf
SW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkg
PSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5Q29tcGFy
YWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRv
IHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZh
bHVlX3R5cGUgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID4gOjpfRXF1
YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2Zp
cnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0g
X0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lu
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0
dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUg
Ym9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
SW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBf
SW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5w
dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIx
Pjo6dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRp
b248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6
Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFs
dWVfdHlwZSA+IDo6X0VxdWFsaXR5Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAg
ICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBi
b29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVy
MSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+
IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlw
ZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNv
bXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoK
ICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+
Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+IDo6
X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAq
X19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwog
IH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9
CgppbmxpbmUgYm9vbApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19m
aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0
IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0
ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0
dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlu
bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj
b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo
YXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK
ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg
ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g
IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9
CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4x
ID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3Qy
IC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp
cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl
c3VsdAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9f
bGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25z
dCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikg
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyKQp7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNv
bXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194
KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0g
X0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFi
bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICByZXR1
cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp
cnN0MiwgX19sYXN0Mik7Cn0KCn0KIyAzMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50
YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRo
bS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0
ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3Qv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvY3Mvc3JjL2djYy9n
Y2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMv
bmV3IiAxIDMKIyAzNSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQgewojIDQ2ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9U
MSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9fdmFs
dWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSog
X19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1Rw
KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJveV9h
dXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19m
YWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
aW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJh
dG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBj
bGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFs
X2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rl
c3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUg
dm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9p
ZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9u
ZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUgdm9p
ZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2No
YXJfdCosIHdjaGFyX3QqKSB7fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBf
Q29uc3RydWN0KF9fcCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2
b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0
cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp
bmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QpIHsKICBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgMzIgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIu
OTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzQgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMK
IyAzNSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkIHsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5
cGUpCnsKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyCl9f
dW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3Vy
ID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICBy
ZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIp
OyB0aHJvdzsgfTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRp
YWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX3Jlc3VsdCkp
Owp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly
c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3
Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBf
X2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVy
PgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBm
b3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpCiAgICAg
IF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0SXRl
ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVz
dHJveShfX3Jlc3VsdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFp
cjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9u
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0g
X19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3
YXJkSXRlcj4oCiAgICAgICAgICAgICAgICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2Zp
cnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4KdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRp
YWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkK
ewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19j
dXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAg
fQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGlu
ZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9f
bGFzdCwgX194LCBfSXNfUE9EKCkpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmly
c3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJzdCwg
X19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmly
c3Q7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgIF9D
b25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4u
KSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5p
bml0aWFsaXplZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxp
bmUgX0ZvcndhcmRJdGVyCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9m
aWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KIyAyMzAg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxp
bmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5IHsK
ICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsK
ICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1
dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9f
cmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9f
cmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK
ICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0Mik7CiAgdHJ5IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9f
bGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQy
KTsgdGhyb3c7IH07Cn0KCn0KIyAzMyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5o
IiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0y
Mi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyAzNCAiL2Nz
L3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkIHsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3JhcnlfYnVmZmVy
KHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgz
NjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7
CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1RwKikgbWFsbG9jKChz
aXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0
dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsK
ICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9y
YXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1
ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CiMgNjcgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1w
YnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90
PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4g
X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShf
X3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFz
cyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xl
bjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9j
YXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZl
ciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2Yo
X1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGls
ZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAq
IHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAg
X01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0
IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3Qg
X1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVm
ZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyBy
ZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZl
cjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1w
b3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QpIHsKCgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCgogICAg
dHJ5IHsKICAgICAgX01fbGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
TV9sZW4pOwogICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDAp
CiAgICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAg
fQogICAgY2F0Y2goLi4uKSB7IGZyZWUoX01fYnVmZmVyKTsgX01fYnVmZmVyID0gMDsgX01fbGVu
ID0gMDsgdGhyb3c7IH07CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95
KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9
Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYp
IHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAoKICAg
ICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJh
dG9yPjo6dmFsdWVfdHlwZQoKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1
YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3Jh
cnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJz
dCwgX19sYXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyAzNCAiL2NzL3Ny
Yy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnby5oIiAxIDMKIyAzNCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGlu
dXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEg
Ii9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDEgMwojIDMzICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQgewoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19w
dXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAg
X0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hv
bGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkg
ewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwog
ICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0g
MSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Rp
c3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0
IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFz
dCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGlu
ZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNp
ZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2
b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug
X19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1
ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCoo
X19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7
CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsg
X19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh
bmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGRvIHsg
dm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNj
ZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
PiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJ
bmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9s
ZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihf
X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hp
bGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlm
IChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19z
ZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBf
X3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1
ZSwgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFs
dWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+
CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAg
X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLAogICAgICAgICAgICAg
X1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNp
ZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4s
IF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9
IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4
ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo
aWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBp
ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9f
c2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg
X190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAg
ICAgICAgICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0
X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCks
CiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p
ZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21w
KQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihf
X2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7
CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9S
YW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9p
ZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChf
X2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUg
KHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAo
KihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwog
ICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25j
ZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19tYWtlX2hlYXAoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4K
dm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBf
RGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19s
ZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
X3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLAogICAgICAgICAgICAg
ICAgICBfX2NvbXApOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50
LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
Q29tcGFyZT4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19j
b21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0
YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9fbWFrZV9oZWFwKF9fZmly
c3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwg
X19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yID4gOjpfTXV0YWJsZV9SYW5k
b21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKc29ydF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSgg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9f
Zmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9CgoKCgoKfQojIDM1ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkIHsKCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25z
dCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9
IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNz
VGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQogICAgICByZXR1cm4gX19i
OwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAg
ICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxz
ZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYK
X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywg
X0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBf
VHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUs
IGJvb2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYg
KF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAo
X19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwog
IGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9f
Y29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24g
Zm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9u
IF9fZikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9f
ZjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgq
X19maXJzdCA9PSBfX3ZhbCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0
SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9t
QWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAg
ICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
dHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3Ry
aXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0g
X192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19s
YXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0
dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAo
Kl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2Ug
MDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmlu
ZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlw
X2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9j
b3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkg
cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9f
Zmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVs
dDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
KQp7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194
KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgX1Rw
JiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9C
SU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX195ID0gX195OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBy
ZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewog
IGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9Q
cmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfUHJlZGljYXRlLCBib29s
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGU+OjpfX3Vu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9G
b3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRp
b248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID4g
OjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsK
ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh
c3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsK
ICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBh
ZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9v
bCAoKl9feCkoIF9CaW5hcnlQcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05f
RVJST1I8IF9CaW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hp
bGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwg
Kl9fbmV4dCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9
CiAgcmV0dXJuIF9fbGFzdDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24p
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgKSA9IF9F
cXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZv
aWQgKCpfX3gpKCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfVHAgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2b2lk
IGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNh
dGUgX19wcmVkLAogICAgICAgICAgICAgIF9TaXplJiBfX24pIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9J
bnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRlJiwgY29uc3Qg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NU
TF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAg
ICArK19fbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUp
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgKSA9IF9F
cXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZv
aWQgKCpfX3gpKCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfVHAgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwog
IHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw
ZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGlj
YXRlIF9fcHJlZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
Ym9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBf
UHJlZGljYXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGU+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJu
IF9fbjsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9y
d2FyZEl0ZXIxICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0Zv
cndhcmRJdGVyMSA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiAp
ID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjIg
PiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSYsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBi
b29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUs
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9f
YmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNv
bnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSYg
KSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAg
IHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsr
X190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwg
X19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19w
MSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz
dDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQo
X19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0
MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9
IF9fZmlyc3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBf
X2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsrX19w
ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJl
bnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmly
c3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVy
MSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQp7
CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX0ZvcndhcmRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9Gb3J3YXJkSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9p
ZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBf
QmluYXJ5UHJlZCYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIx
Pjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQmluYXJ5
UHJlZCwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1
ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5
cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f
Zmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2Fy
ZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJk
SXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
KSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNh
dGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Qx
OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9
PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19j
dXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJu
IF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAg
ICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9
CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRl
ciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl
ICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNv
bXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19jb3VudCA8PSAwKQogICAg
cmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdl
ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAg
ICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19p
ID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAg
aWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAg
X19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVybiBfX2xh
c3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwg
Y2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9y
d2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9y
d2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9CaW5hcnlQcmVkJiwgY29u
c3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBj
b25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWQsIGJv
b2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCBf
VHA+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBl
bHNlIHsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlf
cHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAg
ICB9CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0g
X19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19f
aTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJl
ZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQog
ICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2Ugewog
ICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJl
ZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAg
ICAgfQogICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xh
c3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0g
X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJ
dGVyMSA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIy
ICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9y
d2FyZEl0ZXIyID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJU
X0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5
cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUg
Pjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3Rf
Y29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3
YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRp
b24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFy
eU9wZXJhdGlvbiBfX3VuYXJ5X29wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciAp
ID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpf
SW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBf
X3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAg
ICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkgewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIg
KSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6
Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQog
ICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogIHJldHVy
biBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFs
dWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0Zvcndh
cmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFi
bGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VS
Uk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29s
ICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9v
bCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIF9U
cD46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9
IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9T
VExfQ09OVkVSVF9FUlJPUjwgX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVf
WTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0
ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9G
b3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX1NU
TF9DT05WRVJUX0VSUk9SPCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9Z
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9m
dW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7Cgog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVw
bGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
T3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091
dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgX1RwJiApID0gX1NUTF9CSU5BUllfT1Bf
RVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
Ojp2YWx1ZV90eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8
IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSwg
X1RwPjo6IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX195
ID0gX195OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBf
X29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
SW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9P
dXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9O
X0VSUk9SPCBfUHJlZGljYXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGU+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/
IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4p
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKCpfX3gpKCBf
R2VuZXJhdG9yJikgPSBfU1RMX0dFTkVSQVRPUl9FUlJPUjwgX0dlbmVyYXRvciwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX2dlbmVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRv
cj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IF9HZW5lcmF0b3IgX19nZW4pIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0g
X091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9P
dXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBf
X2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZG8geyB2
b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0
ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVy
ID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VS
Uk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5
cGUsIF9UcD46Ol9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAo
Kl9feSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVf
dHlwZSYsIGNvbnN0IF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9UcD46OiBf
X2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9IF9feTsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1
dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRl
ciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwg
X1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIg
KSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3
YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExf
QklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9P
UF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OnZhbHVlX3R5cGUsIF9UcD46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2
b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9FUlJPUjwgX1RwICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2Nv
bnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2ZpcnN0ID0g
ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2Zp
cnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVl
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0Zv
cndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05fRVJS
T1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9f
bGFzdCwgX19wcmVkKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19m
aXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVt
b3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1
dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKSB7
CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsK
ICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAg
ICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX191bmlxdWVfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191
bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0
b3JfdGFnKSB7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9J
bnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091
dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRw
dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpf
RXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0
dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikgewogIGRvIHsgYm9vbCAoKl9feCkoIF9CaW5h
cnlQcmVkaWNhdGUmLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5D
VElPTl9FUlJPUjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwgX1RwLCBfVHA+OjpfX2JpbmFyeV9m
dW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
X1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2Zp
cnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192
YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUg
X091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRl
cmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJl
ZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWRpY2F0
ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZT46Ol9f
YmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jl
c3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cmlu
bGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+
Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0Zv
cndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011
dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz
dCwgX19sYXN0KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0Zvcndh
cmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFi
bGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9T
VExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQmluYXJ5UHJlZGljYXRlLCBib29sLCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlv
bl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBfX2Zp
cnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJl
dHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVl
KQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAg
IHJldHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xh
c3QpCiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIgKSA9IF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X011dGFibGVf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewog
IGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlciApID0gX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19s
YXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2dj
ZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1
Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9f
biA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChf
X2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9f
Zmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIr
Kyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0
MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdf
bWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmly
c3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAg
aWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBl
bHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAg
fQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKSB7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyICkgPSBfTXV0YWJs
ZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rp
b25hbEl0ZXIgPiA6Ol9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1
cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9f
bWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBl
bHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nl
c3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21B
Y2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0Rp
c3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxl
IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sg
PT0gMCkKICAgIHJldHVybiBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3
YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1
bHQ7CiAgfQoKICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0
YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJz
dDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9f
bCkgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykg
ewogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihf
X3AgLSBfX2wpOwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3Ag
PSAqKF9fcCArIF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVs
c2UgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19q
ICsrKSB7CiAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAq
X19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9Cgog
ICAgKl9fcCA9IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fcm90
YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgpfT3V0cHV0SXRlciByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJk
SXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJk
SXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRw
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9f
cmVzdWx0KSk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3Rh
bmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgo
KSAlIF9fbjsKCn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUg
dm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg
aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkg
KyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRv
bU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRv
bUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ks
IF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9P
dXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0
LCBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVy
ICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVy
ID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0Rp
c3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVt
YWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGls
ZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20p
IHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwog
ICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9P
dXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0
LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJ
dGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJ
dGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
ZG8geyBfRGlzdGFuY2UgKCpfX3gpKCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwgY29uc3QgX0Rp
c3RhbmNlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1JhbmRvbU51bWJlckdlbmVy
YXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfRGlzdGFuY2UgX19yZW1haW5p
bmcgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0
YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAg
ICBpZiAoX19yYW5kKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJz
dDsKICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsK
ICAgICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0
YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0
KQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwog
ICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVt
YmVyR2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9t
X3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7
CiAgZG8geyBfRGlzdGFuY2UgKCpfX3gpKCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwgY29uc3Qg
X0Rpc3RhbmNlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1JhbmRvbU51bWJlckdl
bmVyYXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+OjpfX3VuYXJ5X2Z1bmN0aW9uX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfRGlzdGFuY2UgX19tID0g
MDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg
X19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9f
TSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBf
UmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5w
dXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0
ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011
dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9t
QWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3JhbmRvbV9zYW1w
bGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3Qs
IF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAg
ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVy
ICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fcmFu
ZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291
dF9maXJzdCwgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9f
b3V0X2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CgogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsK
CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsK
ICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAg
cmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICh0cnVlKQogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2Ug
aWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAg
ICAgYnJlYWs7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3By
ZWQoKl9fbGFzdCkpCiAgICAgICAgLS1fX2xhc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsK
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3
YXJkSXRlciBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJ
dGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
Rm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX1ByZWRp
Y2F0ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX3Vu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFj
ZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2Ug
X19sZW4pIHsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8g
X19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFk
dmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3Rh
YmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAgICAgICAgICAgICAgIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRk
bGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfRGlz
dGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYg
KF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBf
X2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkg
ewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAg
KytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1
bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAg
ICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAg
ICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlv
bl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9G
b3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVy
LCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAg
ICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19i
dWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQogICAgcmV0dXJuIF9faW5w
bGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6
ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
CmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJs
ZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllf
RlVOQ1RJT05fRVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0
aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAo
dHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0Owog
ICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0
OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9S
YW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGls
ZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xh
c3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsK
ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50
IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g
X19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xh
c3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpf
X2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBf
X2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAg
ICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAg
fQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfVHAqKSB7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19m
aXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwog
ICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2lu
c2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX1RwIF9f
dmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlf
YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192
YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3Zh
bCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNl
cnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop
IHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3Vh
cmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0
bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f
c3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9f
c3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo
X19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pIHsKICBfU2l6ZSBfX2s7
CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19r
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw
KSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJl
dHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3Qg
LSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9f
ZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJl
Pgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAg
ICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0
aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz
dCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBf
X2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFj
Y2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw
ZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3Nv
cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAq
IDIpOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l
IHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgq
X194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiApID0g
X1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVu
Y3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAg
aWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAg
ICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2NvbXApOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZv
aWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChf
X2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19m
aXJzdCwgX19taWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0
KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg
X19sYXN0LCBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
MSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgp2
b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3Np
emUpIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShf
X2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3RlcF9z
aXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogIG1l
cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXpl
LCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlz
dGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVz
dWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7Cgog
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0g
bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAg
ICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f
Zmlyc3QgKz0gX190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9f
bGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX3N0ZXBfc2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAg
ICAgICBfX3Jlc3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtf
c2l6ZSA9IDc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0
YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBf
X2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f
Y2h1bmtfc2l6ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9
IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50
ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9f
Zmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9z
aXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19i
dWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3Nv
cnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwog
ICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3Qg
LSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoK
ICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hp
bGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3Qs
IF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUg
Kj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2Zp
cnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBf
RGlzdGFuY2U+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2J1ZmZlcl9zaXplKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmly
c3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19s
ZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19z
dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogIH0K
ICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShf
X21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAt
IF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0
YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3Np
emUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxz
ZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
ciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3Rh
bmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19s
YXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikgewogIF9UZW1wb3JhcnlfYnVm
ZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChi
dWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFz
dCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1
Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUo
KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9h
dXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZl
cjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVm
LmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xh
c3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVm
LnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9
IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
ICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NU
aGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRl
ciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAo
Kl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9F
UlJPUjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBfX3N0YWJsZV9zb3J0X2F1eChfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikgewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7
CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyAr
K19faSkKICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwg
X19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw
ZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9N
dXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRv
bUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlICkg
PSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFu
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIG1h
a2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJ
dGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKF9fY29tcCgq
X19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwg
X1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmly
c3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHBh
cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJs
ZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3Qg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYg
KSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5
X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+
Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBf
X3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBf
X3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9f
bGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVz
dWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAr
K19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
YXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpf
X3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3Rh
bmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3Qg
LSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAg
ICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNz
SXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwK
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkgewogIGRv
IHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5k
b21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
ZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSApID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJs
ZV90b190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCko
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
KSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1Ro
YW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlID4g
OjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFs
X3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0g
X19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBf
X2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jl
c3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAg
KytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2Nv
bXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1
bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19y
ZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9U
cCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsK
ICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29t
cCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9S
YW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
dWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9s
YXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkg
PSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9J
bnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFu
ZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRl
ciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9F
UlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlICwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+
OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiApID0g
X1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVu
Y3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAg
cmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJz
dCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9f
bnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop
IHsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19m
aXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xh
c3QgLSAxKSkpKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0
OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011
dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9t
QWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9
IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5D
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9f
dW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2Zp
cnN0ID0gX19jdXQ7CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19j
b21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxl
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vz
c0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFy
ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJl
LCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19s
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7
CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChf
X2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9f
dmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJk
SXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJk
SXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VS
Uk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4gX19sb3dlcl9ib3Vu
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29t
cCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
aWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7
CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9
CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4K
aW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2Fy
ZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2Fy
ZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9F
UlJPUjwgX1RwLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1Rw
JiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9U
cD46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4g
MTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7
CiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxz
ZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xl
biA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRl
ciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKSB7CiAgZG8g
eyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IF9UcCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9Z
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9M
ZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhh
bkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3Rh
bmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0g
MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxm
OwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19o
YWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19t
aWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBf
X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog
IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSgg
X1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg
KSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBj
b25zdCBfVHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0Nv
bXBhcmUsIGJvb2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlz
dGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoK
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRk
bGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmICgqX19t
aWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJz
dDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChf
X3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAg
X19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgYWR2
YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlk
ZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBf
Rm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgZG8geyB2b2lkICgqX194KSggX0Zvcndh
cmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0Zvcndh
cmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVf
RVJST1I8IF9UcCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCBfVHAgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX2VxdWFsX3Jh
bmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0
ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
X19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2Uo
X19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg
ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlk
ZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93
ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNl
KF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUs
IF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8
X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciAp
ID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+
IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBf
VHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46
Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAg
ZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmICkgPSBf
U1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIF9UcCwgX1RwPjo6X19i
aW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29t
cCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJj
aChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJP
UjwgX1RwLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9UcCA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0
ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1Rw
ICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9
IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25z
dCBfVHAmLCBjb25zdCBfVHAmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBh
cmUsIGJvb2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19s
YXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBt
ZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lu
cHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lu
cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9T
QU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZh
bHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5
cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwoKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmlj
YXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUg
PiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19f
cmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZT4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVf
VFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVf
dHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+
OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194
KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+
Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIx
Pjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwg
Ym9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZT46Ol9fYmlu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
IHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKSB7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9
PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpf
X21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog
ICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0
OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFu
Y2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBf
X2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s
YXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZh
bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs
IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p
ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg
X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBp
ZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19m
aXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAg
fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0g
MDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg
X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK
ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu
MjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShf
X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp
cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3
X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp
OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g
X19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEs
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9C
aWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplKSB7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+
IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0g
Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVy
X2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7
CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAg
ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJu
IHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFj
a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fcmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg
ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx
OwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAg
IH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy
LAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9C
aWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3Qy
LCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9f
bGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3Qx
KSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy
LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1f
X3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg
ICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFw
dGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x
LCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKSB7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYg
X19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNv
cHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1
ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xl
bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsK
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4x
MSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4y
KSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0
LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f
bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQg
PSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0
X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx
LAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7
CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3Qs
IF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4x
IDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2Uo
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21w
KTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19t
ZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7
CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xl
bjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwg
Kl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf
Y3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8g
MjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1
dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXAp
OwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRp
dmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs
ZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19z
ZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopIHsKICBfRGlzdGFuY2UgX19sZW4x
ID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2Ug
X19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVt
cG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19s
YXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAg
X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu
MiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNp
emUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBf
X2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAq
LCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRl
ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDAp
CiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
bGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxp
bmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lk
ICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyICkgPSBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9NdXRh
YmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFi
bGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2Vf
bWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIgKSA9IF9NdXRhYmxlX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFs
SXRlciA+IDo6X011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFy
ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2
YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs
SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBh
cmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2
YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6
dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk
ZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
aXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJS
T1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBl
X1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyB2
b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVf
dHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhh
bkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxz
ZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAg
ICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0
SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRl
cjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVl
X3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBl
ICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIy
Pjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9C
SU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9fY29tcCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2
b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0
SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0
ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2Fz
X3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgdm9pZCAoKl9feCkoIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9MZXNz
VGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxz
ZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAg
KytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmly
c3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBk
byB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9J
bnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1
dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRw
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46
OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1
ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25z
dCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0g
X1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
YXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgq
X194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiAp
ID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6
X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBl
ICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0g
X1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
MT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZh
bHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVl
X3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytf
X2ZpcnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2Zp
cnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJu
IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0
SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
SW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5w
dXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5w
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
ZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCko
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NB
TUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFs
dWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlw
ZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJ
T05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+
Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVz
dWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNl
dF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIg
KSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4g
OjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBl
X1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5D
b21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVy
IHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIx
ICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4g
OjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VS
Uk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlw
ZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsg
Ym9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyMj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwg
X0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZh
bHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5
cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3Vs
dDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAg
ICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlcj4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9J
bnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1
dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSgg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FN
RV9UWVBFX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1
ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBl
ID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
MT46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4g
OjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQog
ICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVs
c2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBj
b3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlcgpzZXRf
c3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8g
eyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5w
dXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJ
dGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2
YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVf
dHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3Qg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9T
VExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
KytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19f
Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
Rm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
Rm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJh
YmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3Qp
CiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWF4X2Vs
ZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
Rm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
Rm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29u
c3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmLCBj
b25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYg
KSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgq
X19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVt
ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2
b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xl
c3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0
IDwgKl9fcmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0Zvcndh
cmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2
b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBf
Q29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJv
b2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmlu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19maXJz
dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVj
dGlvbmFsSXRlciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194
KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5
cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xl
c3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgq
X19pIDwgKl9faWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAg
ICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9f
aSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsK
ICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24o
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfQmlkaXJlY3Rpb25hbEl0ZXIgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
Ym9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZV
TkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf
X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2Nv
bXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg
aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGly
ZWN0aW9uYWxJdGVyICkgPSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0JpZGlyZWN0aW9uYWxJdGVyID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVf
dHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpf
TGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19s
YXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7
KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYg
KCpfX2lpIDwgKl9faSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Owog
ICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAo
X19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVl
OwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlv
bihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9CaWRpcmVjdGlvbmFsSXRlciApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllf
RlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9
IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7
CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkg
ewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9f
Y29tcCgqLS1fX2osICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7
CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAg
ICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJ
dGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZG8geyB2
b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJ
dGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJ
dGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUmLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBi
b29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5h
cnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RM
X0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6dmFsdWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgoKICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBf
X2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAo
Kl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBf
X2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0
SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgZG8geyB2b2lkICgq
X194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkg
PSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4g
OjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RM
X0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgoKICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBf
X2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAo
X19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJl
dHVybiBfX2xhc3QxOwp9CiMgMzA1MiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zvcndh
cmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9f
cmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19u
ZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf
X2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7
CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0
ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAg
IHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9f
bGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAog
ICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19j
b21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAg
ICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
fQogICAgfQogIH0KfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlv
bmFsSXRlcjEgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfQmlkaXJlY3Rpb25hbEl0ZXIxID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfQmlkaXJlY3Rpb25hbEl0ZXIyICkgPSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0aW9uYWxJdGVyMiA+IDo6X0JpZGlyZWN0aW9uYWxJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoK
ICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2Zp
cnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSks
IF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFz
dDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4g
X19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3Jy
ZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBf
X2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNs
YXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlcjEgKSA9IF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIxID4g
OjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIyICkg
PSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0
aW9uYWxJdGVyMiA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C
aWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19m
aXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJl
c3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFz
dDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh
bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5l
IF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIxICkgPSBfRm9y
d2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMSA+IDo6X0Zv
cndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiApID0gX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjIgPiA6Ol9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
Ym9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFs
dWVfdHlwZSYsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVf
dHlwZSYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X29wZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX09Q
X0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
MT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6
dmFsdWVfdHlwZT46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHJldHVybiBfX2ZpbmRf
ZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0
MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
KQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gp
KCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8
IF9CaW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19p
c19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlz
dGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxk
IDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3Rb
X19jaGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDAp
CiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRl
cmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdl
YWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlz
dGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxk
IDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9f
Zmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAx
KSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlw
ZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gX19m
aXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TdHJp
Y3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9TdHJp
Y3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vz
c0l0ZXIgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9S
YW5kb21BY2Nlc3NJdGVyID4gOjpfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9TdHJp
Y3RXZWFrT3JkZXJpbmcmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SPCBfU3RyaWN0V2Vha09yZGVyaW5nLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgcmV0dXJuIF9faXNf
aGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIg
KSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIg
PiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1
cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4
dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlm
ICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0
cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09y
ZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBk
byB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9f
eCkoIF9TdHJpY3RXZWFrT3JkZXJpbmcmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJS
T1I8IF9TdHJpY3RXZWFrT3JkZXJpbmcsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3Ig
KCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkg
ewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsK
ICB9CgogIHJldHVybiB0cnVlOwp9CgoKCgoKfQojIDM1ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4
cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
YWxnb3JpdGhtLmgiIDIgMwojIDQ3ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
MwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZy50Y2MiIDEgMwojIDQzICIvY3Mvc3JjL2dj
Yy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKyst
djMvYml0cy9zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9D
aGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVw
OjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgo
KG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQp
ICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5J
dGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCku
X01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAgICBzaXplX3R5
cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9m
KF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAgICBfX2J1Zltf
X2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9CiAgICAgICAg
X1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5IHsKCgoKICAgICAgICAgIGZvciAoOzspCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19y
LT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRh
dGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0g
X19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFz
dCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgKl9fcCsrID0g
Kl9fYmVnOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAg
ICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBf
X2EpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0
YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgICAg
X19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKC4uLikgewogICAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAg
IHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAg
ICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Ogog
ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3Rh
bmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09
IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsK
CgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAg
ICAgdHJ5IHsKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVn
LCBfX2VuZCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoICguLi4pIHsKICAgICAgICAgIF9fci0+
X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAgIF9fci0+
X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0g
X1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2Mo
KSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeSB7CiAgICAgICAg
aWYgKF9fbikKICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCks
IF9fbiwgX19jKTsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGgg
PSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsK
ICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9f
c3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19h
KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBf
X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi
YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAog
ICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf
TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19h
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNv
bnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3Mg
KyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBj
b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19z
ICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu
ZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f
ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywg
X0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAg
ICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5n
ZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg
ICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9j
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xl
YWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAg
ICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSAr
IF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSAr
IF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xk
X3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9j
YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9SZXAqIF9fciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyAr
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVj
aCk7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgICAgIF9fci0+
X01fZGlzcG9zZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
IH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRh
KF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYm
IF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3Zl
KF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAg
fQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9s
ZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpf
U190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAg
IGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
KQogICAgICAgIHsKICAgICAgICAgIGRvIHsgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkg
X19sZW5ndGhfZXJyb3IoIl9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSIpOyB9IHdoaWxlICgwKTsK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAg
IF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNp
emUoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01f
ZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsK
ICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01f
c2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQog
ICAgICAgIF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5n
ZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAg
ICBfQ2hhclQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0
YSgpKTsKICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01f
aWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3Rt
cDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7
CiAgICAgICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQojIDM1MCAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RyaW5nLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxs
b2MmIF9fYWxsb2MpCiAgICB7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIGRvIHsgaWYgKF9fY2FwYWNpdHkg
PiBfU19tYXhfc2l6ZSkgX19sZW5ndGhfZXJyb3IoIl9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSIp
OyB9IHdoaWxlICgwKTsKCgoKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19wbGFj
ZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1Jl
cCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19j
YXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5n
dGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUo
Y29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9SZXAq
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAgICAg
IGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3Ro
KTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoICguLi4pIHsKICAgICAgICAgICAgX19yLT5f
TV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5f
TV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sCgoKCgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19leGNlc3Nfc2xvcChz
aXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAgICAgcmV0dXJuIDIgKiAoX19zIDw9IDE2
ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKQogICAgewogICAgICBkbyB7IGlmIChfX24gPiBtYXhfc2l6ZSgpKSBfX2xlbmd0aF9lcnJv
cigiX19uID4gbWF4X3NpemUoKSIpOyB9IHdoaWxlICgwKTsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0aGlzLT5h
cHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCiAg
ICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9N
X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAog
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg
ICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4g
dGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkp
OwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBz
aXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9
IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0
PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwoKICAgICAgICBkbyB7IGlmIChfX2Rt
YXggPD0gX19kbmV3KSBfX2xlbmd0aF9lcnJvcigiX19kbWF4IDw9IF9fZG5ldyIpOyB9IHdoaWxl
ICgwKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAg
ICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgogICAgICAgIGlmIChfX2RuZXcp
CiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsK
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg
c2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNr
KF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
dHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgog
ICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19s
ZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9f
c3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f
Zm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6
CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4g
dGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAg
dGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5k
KCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBf
X3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6
OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRz
OjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5y
ZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBf
X2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9f
c3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBf
X3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAg
cmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIs
IF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAg
ICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGRvIHsgaWYg
KG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikgX19sZW5ndGhfZXJy
b3IoIm1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMiIpOyB9IHdoaWxl
ICgwKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9f
bjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIs
IF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
biwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBkbyB7IGlmIChfX3BvcyA+IHRo
aXMtPnNpemUoKSkgX19vdXRfb2ZfcmFuZ2UoIl9fcG9zID4gdGhpcy0+c2l6ZSgpIik7IH0gd2hp
bGUgKDApOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9f
biA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgY29uc3QgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBfU19maW5kKGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19l
bmQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHJldHVybiBmaW5kX2lmKF9fYmVnLCBfX2VuZCwg
X0NoYXJfdHJhaXRzX21hdGNoPF9DaGFyVCwgX1RyYWl0cz4oX19jKSk7CiAgICB9CgoKICB0ZW1w
bGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgc3RyaW5nOjpfU19maW5kKGNvbnN0IGNoYXIqIF9f
YmVnLCBjb25zdCBjaGFyKiBfX2VuZCwgY2hhciBfX2MpOwojIDYwMSAiL2NzL3NyYy9nY2MvZ2Nj
LTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RyaW5nLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBj
b25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9f
biA8PSB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29t
cGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9f
eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAg
ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fZW5kID0gX19kYXRhICsgX19zaXplOwogICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX3AgPSBfU19maW5kKF9fZGF0YSArIF9fcG9zLCBfX2VuZCwgX19jKTsKICAgICAg
ICAgIGlmIChfX3AgIT0gX19lbmQpCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAg
ewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBf
X3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXpl
KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAg
ICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAg
ICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0
c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4g
X194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgY29uc3QgX0NoYXJUKiBfX2VuZCA9IF9fcyArIF9fbjsKICAgICAgZm9yICg7IF9fbiAm
JiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcCA9IF9TX2ZpbmQoX19zLCBfX2VuZCwgX01fZGF0YSgpW19fcG9zXSk7CiAg
ICAgICAgICBpZiAoX19wICE9IF9fZW5kKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAg
IHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBf
X3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcCA9IF9TX2ZpbmQoX19zLCBfX3MgKyBfX24sIF9NX2RhdGEoKVtfX3NpemVdKTsKICAg
ICAgICAgICAgICBpZiAoX19wICE9IF9fcyArIF9fbikKICAgICAgICAgICAgICAgIHJldHVybiBf
X3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBz
aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX24gJiYgX194cG9zIDwgdGhpcy0+
c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoX1NfZmluZChfX3MsIF9fcyArIF9fbiwgX01f
ZGF0YSgpW19feHBvc10pID09IF9fcyArIF9fbikKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9y
ICg7IF9feHBvcyA8IHNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAg
ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAg
ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7
CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX2ZpbmQoX19z
LCBfX3MgKyBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSA9PSBfX3MgKyBfX24pCiAgICAgICAgICAg
ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl
LS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm
ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg
IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9k
YXRhKClbX19zaXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1
cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICBkbyB7IGlmIChfX3BvcyA+IF9fc2l6ZSkgX19vdXRfb2ZfcmFuZ2UoIl9f
cG9zID4gX19zaXplIik7IH0gd2hpbGUgKDApOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1p
bihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNp
emUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAg
ICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
Y29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIp
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBkbyB7IGlmIChfX3BvczEg
PiBfX3NpemUpIF9fb3V0X29mX3JhbmdlKCJfX3BvczEgPiBfX3NpemUiKTsgfSB3aGlsZSAoMCk7
CiAgICAgIGRvIHsgaWYgKF9fcG9zMiA+IF9fb3NpemUpIF9fb3V0X29mX3JhbmdlKCJfX3BvczIg
PiBfX29zaXplIik7IH0gd2hpbGUgKDApOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o
X19zaXplIC0gX19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9f
b3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6
ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpICsgX19wb3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIu
ZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9f
cnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRh
KCksIF9fcywgX19zaXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0g
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
LAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgZG8geyBpZiAoX19wb3MgPiBfX3NpemUpIF9f
b3V0X29mX3JhbmdlKCJfX3BvcyA+IF9fc2l6ZSIpOyB9IHdoaWxlICgwKTsKCiAgICAgIHNpemVf
dHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAg
IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJh
aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBp
ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f
cjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQq
IF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVf
dHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0g
bWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1Ziwg
X19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsK
ICAgIH0KCn0KIyA0OCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyA0MCAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzkgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFs
L0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIg
MwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL2NzL3NyYy9n
Y2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAx
IDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAyIDMgNAoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMyA0CiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAyIDMgNAoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkg
PDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8
PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDgg
PyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgo
MykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRp
Z2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwK
ICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+
PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8
ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6
ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkg
PDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8
PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4
ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9
ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsK
IyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19jb25zdCB1bnNpZ25lZCBz
aG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3Rv
bG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1
bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAzIDQKfQojIDQzICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIu
Mi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMwojIDYw
ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3Qv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0
ZXJuICJDIiBpbnQgaXNhbG51bShpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCBpc2FscGhhKGlu
dCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlzYmxhbmsoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBp
bnQgaXNjbnRybChpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCBpc2RpZ2l0KGludCBfX2MpOwog
IGV4dGVybiAiQyIgaW50IGlzZ3JhcGgoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNsb3dl
cihpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCBpc3ByaW50KGludCBfX2MpOwogIGV4dGVybiAi
QyIgaW50IGlzcHVuY3QoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNzcGFjZShpbnQgX19j
KTsKICBleHRlcm4gIkMiIGludCBpc3VwcGVyKGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlz
eGRpZ2l0KGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IHRvbG93ZXIoaW50IF9fYyk7CiAgZXh0
ZXJuICJDIiBpbnQgdG91cHBlcihpbnQgX19jKTsKfQojIDQxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGU8dW5zaWduZWQg
aW50IF9OdW0sIGludCBfU2hpZnQgPSAoc2l6ZW9mKHVuc2lnbmVkKSAqIDgpLzIsCiAgICAgICAg
ICAgdW5zaWduZWQgaW50IF9NYXNrID0gKH4wdSA+PiBfU2hpZnQpID4KICAgIHN0cnVjdCBfQ291
bnRfb25lczsKCgoKICB0ZW1wbGF0ZTx1bnNpZ25lZCBpbnQgX051bSwgdW5zaWduZWQgaW50IF9N
YXNrPgogICAgc3RydWN0IF9Db3VudF9vbmVzPF9OdW0sIDAsIF9NYXNrPgogICAgewogICAgICBl
bnVtCiAgICAgIHsKICAgICAgICBfU19jb3VudCA9IF9OdW0KICAgICAgfTsKICAgIH07CgogIHRl
bXBsYXRlPHVuc2lnbmVkIGludCBfTnVtLCBpbnQgX1NoaWZ0LCB1bnNpZ25lZCBpbnQgX01hc2s+
CiAgICBzdHJ1Y3QgX0NvdW50X29uZXMKICAgIHsKICAgICAgZW51bQogICAgICB7CiAgICAgICAg
X1NfaGFsZmNvdW50ID0gX0NvdW50X29uZXM8X051bSwgX1NoaWZ0LzIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKF9NYXNrXigofl9NYXNrKT4+KF9TaGlmdC8yKSkpID46Ol9T
X2NvdW50LAogICAgICAgIF9TX2NvdW50ID0gKF9TX2hhbGZjb3VudCZfTWFzaykgKyAoKF9TX2hh
bGZjb3VudD4+X1NoaWZ0KSZfTWFzaykKICAgICAgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGNsYXNzIGFsbG9jYXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4gY2xhc3MgdmVjdG9yOwogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVy
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJU
LCBjb25zdCBsb2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hh
cj47CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFt
ZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0Owog
IHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9T
dGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbGxhdGU8
Y2hhcj47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9i
eW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wg
X0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsK
CgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVz
c2FnZXNfYnluYW1lOwoKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRl
ZiBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFz
cyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3Qg
bG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9v
bAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRl
ID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMHgwMjAwOwogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0
IGNhdGVnb3J5IG51bWVyaWMgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGlt
ZSA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDB4MjAwMDsK
ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRh
cnkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8
IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGlubGluZQogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAg
ICBpbmxpbmUKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAg
ZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3N0ZF9uYW1lKTsKCiAgICBsb2NhbGUo
Y29uc3QgbG9jYWxlJiBfX290aGVyLCBjb25zdCBjaGFyKiBfX3N0ZF9uYW1lLCBjYXRlZ29yeSBf
X2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgY29uc3QgbG9jYWxlJiBf
X29uZSwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIGlubGlu
ZQogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9
KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcik7
CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7
IHJldHVybiAhKG9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAg
ICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYg
X19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29u
c3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAg
cHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFz
c2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3QgaW50
IF9TX2NhdGVnb3JpZXNfbnVtID0gX0NvdW50X29uZXM8YWxsPjo6X1NfY291bnQ7CiAgICBzdGF0
aWMgY29uc3QgaW50IF9TX2ZhY2V0c19udW0gPSAyNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxl
KF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxp
emUoKQogICAgeyBpZiAoIV9TX2NsYXNzaWMpIGNsYXNzaWMoKTsgfQoKICAgIHN0YXRpYyBpbnQK
ICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShpbnQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpf
SW1wbAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8
ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0OwogICAgdHlwZWRlZiB2ZWN0b3I8c3RyaW5nLCBhbGxvY2F0
b3I8c3RyaW5nPiA+IF9fdmVjX3N0cmluZzsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAg
IGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAg
ICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6
ZV90IF9NX3JlZmVyZW5jZXM7CiAgICBfX3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgX192ZWNf
c3RyaW5nKiBfTV9jYXRlZ29yeV9uYW1lczsKICAgIGJvb2wgX01faGFzX25hbWU7CiAgICBzdHJp
bmcgX01fbmFtZTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xs
YXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsK
ICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAg
c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRp
YyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3Qg
bG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2
b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyArK19NX3JlZmVyZW5jZXM7
IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAg
IHsKICAgICAgaWYgKF9NX3JlZmVyZW5jZXMtLSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
Li4uKSB7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBs
Jiwgc2l6ZV90IF9fcmVmcyk7CiAgICBfSW1wbChjb25zdCBfSW1wbCYsIGNvbnN0IHN0cmluZyYs
IGNhdGVnb3J5LCBzaXplX3QgX19yZWZzKTsKICAgIF9JbXBsKHNpemVfdCBfX2ZhY2V0cywgc2l6
ZV90IF9fcmVmcywgYm9vbCBfX2hhc19uYW1lLAogICAgICAgICAgc3RyaW5nIF9fbmFtZSA9ICIq
Iik7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29y
aWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0
ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQK
ICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7Cgog
ICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsK
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9N
X2ZhY2V0X2luaXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G
YWNldDo6aWQsIF9fZmFjZXQpOyB9CgogICAgdm9pZAogICAgX01fY29uc3RydWN0X2NvbGxhdGUo
Y29uc3QgY2hhciopOwoKICAgIHZvaWQKICAgIF9NX2NvbnN0cnVjdF9jdHlwZShjb25zdCBjaGFy
Kik7CgogICAgdm9pZAogICAgX01fY29uc3RydWN0X21vbmV0YXJ5KGNvbnN0IGNoYXIqKTsKCiAg
ICB2b2lkCiAgICBfTV9jb25zdHJ1Y3RfbnVtZXJpYyhjb25zdCBjaGFyKik7CgogICAgdm9pZAog
ICAgX01fY29uc3RydWN0X3RpbWUoY29uc3QgY2hhciopOwoKICAgIHZvaWQKICAgIF9NX2NvbnN0
cnVjdF9tZXNzYWdlcyhjb25zdCBjaGFyKik7CgogICAgY2F0ZWdvcnkKICAgIF9NX25vcm1hbGl6
ZV9jYXRlZ29yeV9uYW1lcyhjb25zdCBzdHJpbmcmLCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgog
IGxvY2FsZTo6bG9jYWxlKCkgdGhyb3coKQogIHsKICAgIF9TX2luaXRpYWxpemUoKTsKICAgIChf
TV9pbXBsID0gX1NfZ2xvYmFsKS0+X01fYWRkX3JlZmVyZW5jZSgpOwogIH0KCiAgbG9jYWxlOjps
b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpCiAgeyAoX01faW1wbCA9IF9fb3Ro
ZXIuX01faW1wbCktPl9NX2FkZF9yZWZlcmVuY2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCog
X19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEp
OwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAg
ICBfTV9pbXBsLT5fTV9oYXNfbmFtZSA9IGZhbHNlOwogICAgICBfTV9pbXBsLT5fTV9uYW1lID0g
IioiOwogICAgfQoKICBsb2NhbGU6On5sb2NhbGUoKSB0aHJvdygpCiAgeyBfTV9pbXBsLT5fTV9y
ZW1vdmVfcmVmZXJlbmNlKCk7IH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmll
bmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3Rl
Y3RlZDoKICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsK
CiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQoKSB7IH07CgogIHByaXZhdGU6CiAgICBzaXplX3QgX01f
cmVmZXJlbmNlczsKCiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAg
ICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25z
dCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoK
CiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmll
bmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNf
ZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CiAgcHVibGljOgogICAgaWQoKSB7fTsKICBw
cml2YXRlOgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBzaXpl
X3QgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAg
IGlkKGNvbnN0IGlkJik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29u
c3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBf
X2xvYykgdGhyb3coKTsKCn0KIyA0MyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwv
TGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMK
IyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyAzNyAiL2NzL3NyYy9nY2Mv
Z2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYz
L2JpdHMvaW9zX2Jhc2UuaCIgMwpuYW1lc3BhY2Ugc3RkIHsKCgoKCgogIGVudW0gX0lvc19GbXRm
bGFncyB7IF9TX2lvc19mbXRmbGFnc19lbmQgPSAxPDwxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRm
bGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAg
eyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3Nf
Rm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdz
KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9
KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0g
X19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0Zt
dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f
YjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9f
YSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoK
ICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfU19pb3Nfb3Blbm1vZGVfZW5kID0gMTw8MTYgfTsKCiAg
aW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3Nf
T3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog
IG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1v
ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRp
Y19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9k
ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5t
b2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQog
IHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w
ZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4o
X0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8
aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfU19pb3NfaW9zdGF0ZV9lbmQg
PSAxPDwxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0
ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19j
YXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf
SW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQog
IHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19J
b3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3Rh
dGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUg
X0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRl
IF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0
ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy
ZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv
cl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9
IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9z
dGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkp
OyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX1NfaW9zX1NlZWtkaXJfZW5kID0gMTw8MTYgfTsK
CgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1
YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNpdAogICAgICBm
YWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpOwoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVy
ZSgpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3co
KTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBj
aGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZs
YWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgcmln
aHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs
YWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3
cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9z
X0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3Rh
dGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2Zi
aXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlv
c3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3Rh
dGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lv
c19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVu
bW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUg
PSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9k
ZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25z
dCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMg
Y29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBz
dGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1
bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0
IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9
IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwoj
IDIxNCAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0
ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAg
ewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZl
bnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9z
X2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxi
YWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01f
cHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdz
OwoKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xp
c3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAg
aW50IF9NX2luZGV4OwogICAgICBpbnQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlz
dChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAg
ICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9N
X2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2
b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7ICsrX01fcmVmY291bnQ7IH0KCiAgICAgIGlu
dAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX01fcmVmY291bnQtLTsgfQog
ICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBf
TV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rp
c3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZv
aWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgfTsKCiAgICBzdGF0aWMgY29u
c3QgaW50IF9TX2xvY2FsX3dvcmRzID0gODsKICAgIF9Xb3JkcyBfTV93b3JkX2FycmF5W19TX2xv
Y2FsX3dvcmRzXTsKICAgIF9Xb3JkcyBfTV9kdW1teTsKICAgIF9Xb3JkcyogX01fd29yZHM7CiAg
ICBpbnQgX01fd29yZF9saW1pdDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBf
X2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5p
dCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNs
YXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CiAg
ICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIGZpbGVi
dWYqIF9NX2NvdXQ7CiAgICAgIGZpbGVidWYqIF9NX2NpbjsKICAgICAgZmlsZWJ1ZiogX01fY2Vy
cjsKCgoKCgogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsg
cmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFn
cyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBf
TV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUg
Zm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3Mg
X19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJu
IF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2Zt
dGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxh
Z3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZs
ICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAg
ICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBp
bmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lz
aW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9f
cHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAg
X01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5s
aW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAg
ICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAg
ICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7
CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRo
X3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3Qg
bG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyBy
ZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJv
dygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9X
b3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAg
ICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJu
IF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQg
X19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQp
CiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93X3dvcmRz
KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jh
c2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgogIHByaXZhdGU6CiAgICBpb3Nf
YmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0
IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhh
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2Uo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2Up
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNl
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jh
c2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9p
bnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bv
aW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93
cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz
aG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBz
aG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNo
b3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3No
b3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz
aG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tp
cHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3
cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdz
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdz
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNl
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2Fz
ZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJj
YXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBw
ZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5p
dGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5p
dGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Vu
aXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6
dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
aW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0
dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVz
dGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRl
Yyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlv
c19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMs
IGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDQ0ICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2
ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzcgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFs
L0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu
aCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL2NzL3Ny
Yy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45
NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zZndkLmgiIDEgMwojIDM5ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgi
IDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDAgIi9jcy9z
cmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIu
OTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMv
bG9jYWxlZndkLmgiIDEgMwojIDQxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgi
IDIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIy
LWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQyICIvY3Mvc3Jj
L2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0YXRpYyBzdHJlYW1z
aXplCiAgICBfU19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aW9zLAogICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0
cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUg
aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBv
c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZf
dHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVh
bWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBf
U19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9f
aW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4s
X19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBj
aGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZTsKCgogICAgICBp
bnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoK
CgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1
cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9l
bmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9N
X2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKICAgICAgY29u
c3QgX19jdHlwZV90eXBlKiBfTV9idWZfZmN0eXBlOwoKCgoKCgogICAgICBpbnRfdHlwZSBfTV9w
YmFja19zaXplOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOwogICAgICBjaGFyX3R5cGUqIF9N
X3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAg
ICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0
ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAg
ICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX01fcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAg
ICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAg
ICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tf
ZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9N
X3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRy
dWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVz
dHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAg
ICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAg
ICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90eXBlIF9f
cGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90eXBlIF9f
c2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9f
cGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNr
X2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJh
Y2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tf
ZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9f
bnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAg
IF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQojIDE4MyAiL2NzL3Ny
Yy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1
cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9t
b2RlICYgaW9zX2Jhc2U6OmluOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgICBp
ZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19u
OwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsKICAgICAg
ICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190ZXN0aW4p
CiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAgfQojIDIw
NyAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICAgIHZvaWQKICAgICAg
X01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYg
aW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVm
KTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICB0aGlzLT5z
ZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9zZXRfZGV0
ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdGluID0g
X01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUg
JiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgIHsKICAgICAg
ICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAg
ICAgICBpZiAoIV9fdGVzdG91dCkKICAgICAgICAgICAgICBfTV9idWZfc2l6ZSA9IHN0YXRpY19j
YXN0PGludF90eXBlPihfX29mZik7CiAgICAgICAgICB9CiAgICAgICAgaWYgKF9fdGVzdG91dCkK
ICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CgogICAgICB9Cgog
ICAgICBib29sCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAg
IGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikK
ICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPT0g
X01faW5fZW5kOwogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAg
IF9fcmV0ID0gX01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0
X2VuZDsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2aXJ0
dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3VuaWZp
ZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3NpemVf
b3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICAg
IF9NX2J1Zl9mY3R5cGUgPSBfX251bGw7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFs
c2U7CgogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAm
X19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAg
ICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAg
ICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1
Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVs
c2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAg
ICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAog
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4g
fCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dh
eSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBf
X3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz
ZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3As
IF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3lu
YygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAg
ICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8
IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3Bi
YWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19y
ZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigp
OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21h
bnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAg
ICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDog
dGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoK
ICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19y
ZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqZ3B0cigpKTsKICAgICAgICBl
bHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7
IH0KCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAg
ICBpbnRfdHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMo
Y2hhcl90eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9f
cywgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAg
OiBfTV9idWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChz
dGF0aWNfY2FzdDxpbnRfdHlwZT4oODE5MikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksCiAgICAg
IF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCks
IF9NX291dF9jdXIoMCksCiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9w
ZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVf
aW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSksIF9NX3BiYWNrKF9fbnVsbCksCiAgICAgIF9N
X3BiYWNrX2N1cl9zYXZlKF9fbnVsbCksIF9NX3BiYWNrX2VuZF9zYXZlKF9fbnVsbCksIF9NX3Bi
YWNrX2luaXQoZmFsc2UpCiAgICAgIHsgX01fYnVmX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlw
ZV90eXBlPih0aGlzLT5nZXRsb2MoKSk7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNr
KCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdw
dHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAg
ZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1
bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGco
Y2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQp
CiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0g
X19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9k
ZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAg
ICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFy
X3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAg
Y2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAg
ICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0K
CiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoK
ICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVu
ZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAg
ICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNl
OjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8
IGlvc19iYXNlOjpvdXQ7CgoKCgoKICAgICAgICBfTV9idWZfc2l6ZSA9IG1heChfTV9idWZfc2l6
ZSwgc3RhdGljX2Nhc3Q8aW50X3R5cGU+KF9fcGVuZCAtIF9fcGJlZykpOwogICAgICB9CgoKCiAg
ICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7
CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xv
Y2FsZSAhPSBfX2xvYykKICAgICAgICAgewogICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xv
YzsKICAgICAgICAgICBfTV9idWZfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9N
X2J1Zl9sb2NhbGUpOwogICAgICAgICB9CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0
cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJl
YW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAg
ICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlv
c19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsg
cmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUK
ICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShv
ZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4g
MDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVy
biAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVy
ZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVh
bCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRoaXMtPnVuZGVy
ZmxvdygpID09IF9fcmV0OwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAm
JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CgogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVz
dHBlbmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAg
ICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAg
ICAgICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAg
ICAgIH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9
IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9
CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVy
ZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRz
X3R5cGU6OmVvZigpOyB9CiMgNTAwICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgi
IDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90
eXBlJik7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19z
dHJlYW1idWZfdHlwZSYpOwoKICAgIH07Cgp9CiMgNDUgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhw
ZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
b3MuaCIgMiAzCiMgMSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDMzICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2
ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3Ni
dWZfaXRlci5oIiAxIDMKIyAzNSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGlu
dXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKCgoKICAgIDogcHVibGljIG91dHB1dF9p
dGVyYXRvcgoKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgICAgaW5s
aW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgp
CiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZChmYWxzZSkgeyB9CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCiAgICAg
IDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQoZmFsc2UpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsg
fQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93
KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBi
b29sCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVk
OyB9CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJv
b2wgX01fZmFpbGVkOwojIDk0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51
eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zYnVmX2l0ZXIuaCIgMwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5s
aW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAg
ICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9z
YnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkKICAgICAgX01fZmFpbGVkID0gdHJ1ZTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDEzNSAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBl
cmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9p
dGVyLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBjbGFz
cyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRv
cl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7
CgogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1idWZpdGVyX3R5cGU7CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQog
ICAgICA6IF9NX2lzdHJlYW1idWYoX19udWxsKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01faXN0cmVh
bWJ1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRv
cihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01faXN0cmVhbWJ1ZihfX3Mp
LCBfTV9jKC0yKSB7IH0KCgoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25z
dAogICAgICB7CgogICAgICAgIGNoYXJfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faXN0cmVh
bWJ1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90eXBlPigtMikpCiAgICAgICAgICBfX3Jl
dCA9IF9NX2M7CiAgICAgICAgZWxzZSBpZiAoX01faXN0cmVhbWJ1ZikKICAgICAgICAgIF9fcmV0
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9pc3RyZWFtYnVmLT5zZ2V0YygpKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJhaXRz
X3R5cGU6OmVvZigpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIF9faXN0
cmVhbWJ1Zml0ZXJfdHlwZSYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBpZiAo
X01faXN0cmVhbWJ1ZikKICAgICAgICAgIF9NX2lzdHJlYW1idWYtPnNidW1wYygpOwogICAgICAg
IF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgogICAgICBjb25z
dCBfX2lzdHJlYW1idWZpdGVyX3R5cGUKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICBpZiAoX01faXN0cmVhbWJ1ZikKICAgICAgICAgIF9NX2MgPSBfTV9pc3RyZWFtYnVmLT5z
YnVtcGMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBib29sCiAgICAg
IGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKQogICAgICB7CiAgICAgICAg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNl
b2YgPSAhX01faXN0cmVhbWJ1ZiB8fCBfTV9pc3RyZWFtYnVmLT5zZ2V0YygpID09IF9fZW9mOwog
ICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9pc3RyZWFtYnVmCiAgICAgICAgICAgICAgICAg
ICAgICB8fCBfX2IuX01faXN0cmVhbWJ1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1
cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAg
ICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlw
ZSYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAhX01faXN0cmVhbWJ1ZiB8fCBfTV9p
c3RyZWFtYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5f
TV9pc3RyZWFtYnVmCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2IuX01faXN0cmVhbWJ1Zi0+
c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwg
KCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKICAgIHByaXZhdGU6CgoKCgoKCgog
ICAgICBzdHJlYW1idWZfdHlwZSogX01faXN0cmVhbWJ1ZjsKICAgICAgaW50X3R5cGUgX01fYzsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKfQoj
IDM0ICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRl
c3QvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNz
IGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp
bnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlw
ZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZf
dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYg
Y3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJUPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9D
aGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVm
IG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKCgogICAg
cHJpdmF0ZToKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAg
ICAgIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9zdHJl
YW1idWY7CiAgICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCiAgICAgIGNvbnN0IF9f
Y3R5cGVfdHlwZSogX01faW9zX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9N
X2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAgIHB1
YmxpYzoKCiAgICAgIGlubGluZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5
cGVfaW9zKHZvaWQpCiAgICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIGlubGlu
ZSBjb25zdCBfX251bWdldF90eXBlKgogICAgICBfTV9nZXRfZm51bWdldCh2b2lkKQogICAgICB7
IHJldHVybiBfTV9mbnVtZ2V0OyB9CgogICAgICBpbmxpbmUgY29uc3QgX19udW1wdXRfdHlwZSoK
ICAgICAgX01fZ2V0X2ZudW1wdXQodm9pZCkKICAgICAgeyByZXR1cm4gX01fZm51bXB1dDsgfQoK
ICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkg
PyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgaW5saW5lIGJvb2wK
ICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9Cgog
ICAgICBpbmxpbmUgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fc3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBjbGVhcihpb3N0
YXRlIF9fc3RhdGUgPSBnb29kYml0KQogICAgICB7CiAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkp
CiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOwogICAgICAgIGVsc2UKICAg
ICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAgICAgICAgaWYg
KCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgICAgdGhyb3cg
ZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7CiAg
ICAgIH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkK
ICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAg
aW5saW5lIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3Rh
dGUoKSA9PSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBlb2YoKSBjb25zdAogICAgICB7
IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUg
Ym9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAm
IChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgYmFk
KCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsg
fQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgaW5saW5lIHZvaWQKICAgICAgZXhjZXB0aW9u
cyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNl
cHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgaW5saW5lIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fdGllOyB9CgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAg
ewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7
CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9
CgogICAgICBpbmxpbmUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJk
YnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNv
bnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgaW5saW5lIGNoYXJfdHlwZQogICAgICBmaWxs
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmlsbDsgfQoKICAgICAgaW5saW5lIGNoYXJfdHlw
ZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlIF9f
b2xkID0gX01fZmlsbDsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19v
bGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0
KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7Cgog
ICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoK
ICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf
X3NiKTsKICAgIH07Cgp9CiMgNDYgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMg
MzggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVz
dC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQ+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJU
LCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxf
Q2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyZWFt
KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpCiAgICAgIHsgX01fZm51bXB1dCA9IF9f
bnVsbDsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsK
CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUm
ICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2Um
KSk7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24p
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAg
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl
OjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAm
IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAg
cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0K
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f
bikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihfX24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50
IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZs
YWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNl
OjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w
ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihf
X24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5z
aWduZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo
c3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxs
cCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIp
OwoKICAgIHByaXZhdGU6CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShj
b25zdCBfX29zdHJlYW1fdHlwZSYpOwoKICAgICAgYmFzaWNfb3N0cmVhbShjb25zdCBfX29zdHJl
YW1fdHlwZSYpOwoKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50
cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9U
cmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShi
YXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAg
ICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1
bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5y
ZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBf
TV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAg
ICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg
X19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f
Yyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj
aGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0
YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0No
YXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25z
dCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0
IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29z
LnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
ZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBf
X29zLnB1dChfVHJhaXRzOjpfU19lb3MoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1
cm4gX19vcy5mbHVzaCgpOyB9Cgp9CiMgMzkgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVu
dGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVh
bS5oIiAyIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4x
Ni0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzNyAi
L2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3MuaCIgMSAzCiMgMzggIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIg
MwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxh
dGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgNDUgIi9jcy9zcmMv
Z2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJp
bWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyA0NiAiL2NzL3NyYy9nY2MvZ2NjLTIuOTZleHBlcmltZW50YWwvTGludXgyLjIu
MTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKIyAxICIv
Y3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDQwICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Zsb2F0LmgiIDMKIyAxICIvY3Mvc3JjL2djYy9nY2MtMi45NmV4cGVyaW1lbnRhbC9M
aW51eDIuMi4xNi0yMi1sYXRlc3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45Ny9p
bmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgNDEgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVu
dGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQu
aCIgMiAzCiMgNDcgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2
LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkIHsKCiAgICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlIHsKICAgICAgICByb3VuZF9pbmRl
dGVybWluYXRlID0gLTEsCiAgICAgICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgICAgIHJv
dW5kX3RvX25lYXJlc3QgPSAxLAogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAg
ICAgICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICAgIH07CgogICAgZW51bSBmbG9h
dF9kZW5vcm1fc3R5bGUgewogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICAg
ICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICAgICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgICB9OwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IG51bWVyaWNfbGltaXRzIHsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgICAgICBzdGF0
aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhy
b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBy
b3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0
aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
CiAgICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1RwIGRlbm9y
bV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
ZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19p
bmZpbml0eSgpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfcXVpZXRf
TmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdf
TmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1fbWlu
KCk7CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4gewogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGlj
IGJvb2wgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgc3Rh
dGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9
CiAgICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxj
aGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgp
OyB9CiAgICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEy
NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0
YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMg
Y2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNo
YXI+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu
dW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg
fQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjU1OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hh
ciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gKC0zMjc2NyAtMSk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgbWF4KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMTU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
ICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAg
IHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z
aWduZWQgc2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSAxNjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l
eGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRl
PD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3IC0xKTsgfQogICAgICAgIHN0YXRpYyBpbnQg
bWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gMDsgfQogICAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgICAg
c3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+
IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAoMjE0NzQ4MzY0NyAqIDJVICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSAzMjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l
eGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGlt
aXRzPGxvbmc+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAo
LTIxNDc0ODM2NDdMIC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0
YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAg
IHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAg
c3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9u
ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPiB7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAxKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51
bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLTEpOyB9CiAgICAgICAg
c3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gOTIyMzM3MjAz
Njg1NDc3NTgwN0xMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGxv
bmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGlj
IGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0
YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0K
ICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25n
IGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICg5
MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSA2NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu
dW1lcmljX2xpbWl0czxmbG9hdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSA3OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAtMzc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAx
Mjg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDAp
OyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7
IH0KICAgICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJs
ZSBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7
IH0KICAgICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx
Ljc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDUzOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0
YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0
OTI1MDMxMzFlLTE2OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAtMTAyMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gLTMwNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9
CiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK
ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0
aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQz
MTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQog
ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAxLjBMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
LTE2MzgxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs
ZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKfQojIDM5ICIvY3Mvc3JjL2djYy9nY2Mt
Mi45NmV4cGVyaW1lbnRhbC9MaW51eDIuMi4xNi0yMi1sYXRlc3QvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZp
cnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6
CgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9m
Zl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90
eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2lzdHJlYW1i
dWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+
IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7
CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGlj
OgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQg
PSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3Ry
ZWFtKCkKICAgICAgewogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgICAg
X01fZm51bWdldCA9IF9fbnVsbDsKICAgICAgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAg
ZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z
X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFz
ZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
Pj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1
bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg
ICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBp
bnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0
KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxp
bmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIGdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNo
YXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0
KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53
aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5s
aW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xu
JykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19u
ID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRf
dHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAg
cmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAg
ICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2Zm
X3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJh
c2ljX2lzdHJlYW0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50
cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3Mg
PSBmYWxzZSk7CgogICAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBw
cml2YXRlOgogICAgICBib29sIF9NX29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf
Q2hhclQmIF9fYyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiBzdGF0
aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2lu
ID4+IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh
clQqIF9fcyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4g
Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6
IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFt
X3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVh
bSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cgp9CiMgNDAgIi9jcy9zcmMvZ2NjL2djYy0y
Ljk2ZXhwZXJpbWVudGFsL0xpbnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3N0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKICBleHRlcm4gaXN0cmVhbSBj
aW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVy
biBvc3RyZWFtIGNsb2c7CiMgNTUgIi9jcy9zcmMvZ2NjL2djYy0yLjk2ZXhwZXJpbWVudGFsL0xp
bnV4Mi4yLjE2LTIyLWxhdGVzdC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAz
CiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMyAiL2NzL3NyYy9nY2MvZ2Nj
LTIuOTZleHBlcmltZW50YWwvTGludXgyLjIuMTYtMjItbGF0ZXN0L2luY2x1ZGUvZysrLXYzL2lv
c3RyZWFtIiAyIDMKIyAzICIvdS9sc2gvc3BhY2UvZ2x1ZS9hdHRyaWIvdGVzdC5DIiAyCg==

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