public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: other/10294: ICE when declaring a variable within switch statement
@ 2003-04-02 21:59 ehrhardt
  0 siblings, 0 replies; 2+ messages in thread
From: ehrhardt @ 2003-04-02 21:59 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, sbdep

Synopsis: ICE when declaring a variable within switch statement

State-Changed-From-To: open->closed
State-Changed-By: cae
State-Changed-When: Wed Apr  2 21:59:51 2003
State-Changed-Why:
    I can confirm this with 3.2.3, the condition is that the
    class has a destructor. A reduced testcase is:
    
    struct vector
    {
      vector () {}
      ~vector() {}
    };
    int main (int argc)
    {
            switch (argc) {
                    vector c;
            case '3':
                    break;
            }
            return 0;
    }
    
    However, this is fixed in 3.3 and 3.4 and 3.2 gives a reasonable
    error message before the ICE, i.e. this will not give the
    Internal Compiler Error message on the release, instead it will
    say something like "confused by earlier error. Bailing out."
    The summary of all this is, that this bug probably won't be fixed
    for 3.2 anymore.
    
       regards   Christian
    

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10294


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

* other/10294: ICE when declaring a variable within switch statement
@ 2003-04-02  7:16 sbdep
  0 siblings, 0 replies; 2+ messages in thread
From: sbdep @ 2003-04-02  7:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10294
>Category:       other
>Synopsis:       ICE when declaring a variable within switch statement
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Apr 02 07:16:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Stephen Depooter
>Release:        gcc version 3.2.3 20030316 (Debian prerelease)
>Organization:
>Environment:
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux
Thread model: posix
>Description:
When declaring a variable that requires initialization within a switch statement, I get an ICE on compilation.
It might be limited to variables that are templated but maybe not.  I did it with a std::string and a vector<int> but I couldn't get it to occur with a simple class of my own.

>How-To-Repeat:
switch (ch) {
                case 'a':
                        std::string def;
                        break;
                                                                                                                                         
                default:
                        break;
        }
>Fix:
Enclosing the case section within braces fixes it.
I realize that variables requiring initialization are suposed to be in braces, however, it still shouldn't ICE
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="test.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.ii"

IyAxICJ0ZXN0LmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg
InRlc3QuY3BwIgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMSAzCiMgNDQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
Mzg2LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvaTM4Ni1saW51eC9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAyIDMKIyAzMTQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2dudS9zdHVicy5oIiAxIDMKIyAzMTUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyA0
MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL29zX2RlZmluZXMuaCIgMiAz
CiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIg
MiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hh
clQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoK
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2No
YXJfdD47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDcg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9jaGFyX3RyYWl0cy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVm
IiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxNTEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMTMgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQg
aW50IHNpemVfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiAiQyIgewoK
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq
bWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZv
aWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2Ms
IHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNo
ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBz
dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBp
bnQgKl9fY3R5cGVfdG91cHBlcjsKCgogIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xv
Y2FsZV90OwojIDExNSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IHN0
cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxl
X3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu
IHNpemVfdCBzdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAo
X19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoK
ZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0
cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0
IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl
bGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0
cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4
dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5
c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNp
emVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0
IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9f
Y29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBf
X21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3Jj
LCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJv
ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19j
b25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAo
aW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu
IGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xs
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp
bnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJu
Y2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu
IGludCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNlY21wX2wgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVz
dHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4g
Y2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
KnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAz
NzkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2NzdHJpbmciIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6
OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpz
dHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3Ry
Y29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3Ry
Y3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNl
dDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNo
cjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9f
bikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBf
X24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciog
X19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNo
YXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9f
YnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoK
ICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwg
aW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNo
YXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAg
c3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDQ2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9mcG9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRz
L2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMv
YysraW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMSAzCiMgNDggIi91
c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgNDQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg
MwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191X2xvbmc7CgoKdHlwZWRl
ZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsK
dHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcg
bG9uZyBpbnQgX19xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IF9fdV9xdWFkX3Q7CiMgMTI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXNpemVzLmgiIDEgMwojIDEyOSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZGV2
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
Z2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19pbm9fdDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9faW5vNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19tb2RlX3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90
Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19vZmY2NF90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0
eXBlZGVmIHN0cnVjdCB7IGludCBfX3ZhbFsyXTsgfSBfX2ZzaWRfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX2Nsb2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3JsaW02NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X2lkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
dXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190OwoKdHlwZWRlZiBpbnQg
X19kYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKdHlwZWRlZiBpbnQgX19rZXlf
dDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoK
dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj
bnRfdDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IF9fZnNibGtjbnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2ZpbGNudF90
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2ZpbGNudDY0X3Q7CgoKCgp0eXBl
ZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX19vZmY2NF90IF9fbG9mZl90Owp0eXBlZGVmIF9f
cXVhZF90ICpfX3FhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90OwoKCnR5cGVkZWYgaW50
IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CiMgNDYgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCiMgNzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qg
X0lPX0ZJTEUgX19GSUxFOwojIDgxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMv
aW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAz
CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNTQgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoK
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRf
dCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsK
IyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBf
X29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVm
IHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0df
ZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCgojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5j
bHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05W
X05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBU
WV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwK
ICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9S
LAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNU
ID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xv
YWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgq
X19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBf
ZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy
ICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiB3aW50X3Qg
KCpfX2djb252X2J0b3djX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgdW5zaWduZWQgY2hh
cik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252
X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYg
dm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90
cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90
cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5k
X2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9f
Z2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21v
ZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9f
dG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9idG93Y19mY3QgX19idG93
Y19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBf
X2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRf
ZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBp
bnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0
YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsK
CgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21i
c3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7
Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwog
IHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8g
X19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1
Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90
OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElf
XykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
U0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9f
YnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMiAzCiMgMTYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsg
c3RydWN0IF9JT19GSUxFOwojIDE3MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2
b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5
NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewog
IF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAg
X19jb2RlY3Z0X25vY29udgp9OwoKCgoKc3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19j
b2RlY3Z0X2Rlc3RyKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jl
c3VsdCAoKl9fY29kZWN2dF9kb19vdXQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdj
aGFyX3QgKiosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVj
dnRfZG9fdW5zaGlmdCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFy
ICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3Qg
X0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwog
IGludCAoKl9fY29kZWN2dF9kb19lbmNvZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBp
bnQgKCpfX2NvZGVjdnRfZG9fYWx3YXlzX25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsK
ICBpbnQgKCpfX2NvZGVjdnRfZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJz
dGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqLCBzaXplX3QpOwogIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3Ry
dWN0IF9JT19jb2RlY3Z0ICopOwoKICBfR19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBf
X2NkX291dDsKfTsKCgpzdHJ1Y3QgX0lPX3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRf
cHRyOwogIHdjaGFyX3QgKl9JT19yZWFkX2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwog
IHdjaGFyX3QgKl9JT193cml0ZV9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2No
YXJfdCAqX0lPX3dyaXRlX2VuZDsKICB3Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAq
X0lPX2J1Zl9lbmQ7CgogIHdjaGFyX3QgKl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2Jh
Y2t1cF9iYXNlOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19z
dGF0ZTsKICBfX21ic3RhdGVfdCBfSU9fbGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQg
X2NvZGVjdnQ7CgogIHdjaGFyX3QgX3Nob3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAq
X3dpZGVfdnRhYmxlOwp9OwoKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAg
Y2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVh
ZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAg
Y2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1
Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwog
IGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBz
dHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CgoKCiAgaW50IF9mbGFnczI7
CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg
X0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm
NjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3Qg
X0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVz
ZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0
cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf
c3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nv
b2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3Np
emVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBl
ZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBp
bnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoK
Cgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9f
aW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2Zu
IGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xv
c2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwog
IF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3Nl
X2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29r
aWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29r
aWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2ll
X2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoK
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf
X3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJ
TEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4
dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
SU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9J
T19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAo
X0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChf
SU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAo
X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CiMgNDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192
ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBj
b25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBp
bnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklM
RSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr
b2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9f
b2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgp
OwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgp
OwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4
dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0
aHJvdyAoKTsKIyA1MTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm
d3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmlj
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJp
Y3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lP
X0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJl
ZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgODIgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRl
ZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgOTUgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBm
cG9zX3Q7CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTQ4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIHN0cnVjdCBfSU9fRklM
RSAqc3RkaW47CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZG91dDsKZXh0ZXJuIHN0cnVjdCBf
SU9fRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAq
X19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpf
X29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICp0
bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxODAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19z
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDIwMiAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
Y2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiBp
bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDI0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBGSUxFICpmb3BlbjY0IChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUg
KmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBf
X21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3Bl
biAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cg
KCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9f
YnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf
X3NpemVsb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRm
IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxl
biwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKCmV4dGVy
biBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAy
LCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4u
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAy
LCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMp
KSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp
KSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7
CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKCgpleHRl
cm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhy
b3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZnB1
dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAo
aW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpmZ2V0
cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0NzAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFy
ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu
IF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGlt
aXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0
cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG
SUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9j
a2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXpl
X3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50
IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCiMgNTM3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19v
ZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxs
byAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDU1MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBv
c190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTcyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
My4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f
c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf
X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm
Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl
YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNs
ZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRlcm4gaW50IHN5c19uZXJyOwpl
eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBf
c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CiMg
NjA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNo
YXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpz
dHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFj
ayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IG9ic3Rh
Y2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2ODYgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDUz
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6
ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6
ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRj
OwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAg
dXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2lu
ZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6
OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6Zndy
aXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwog
IHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2lu
ZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6
cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRi
dWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2Fu
ZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7
CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50
ZjsKfQojIDE1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6
dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6
OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2
c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMSAzCiMgOTggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
c3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZf
bnNlYzsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIg
MwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoK
ZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2Fy
ZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2
b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQoKCgoKCgoKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7
CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQu
aCIgMiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3Bp
ZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2No
ZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVj
dCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2NoZWRfc2V0YWZmaW5p
dHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVkIGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNjaGVkX2dldGFmZmluaXR5IChfX3BpZF90IF9fcGlkLCB1bnNpZ25lZCBsb25n
IGludCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBp
bnQgKl9fbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX19j
bG9ja190IGNsb2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgp0eXBlZGVm
IF9fdGltZV90IHRpbWVfdDsKCgoKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVm
IF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlw
ZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgpz
dHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBp
bnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5Owog
IGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBf
X2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAg
ewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0
X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRf
dDsKCgoKCgoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
ZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRt
ICpfX3RwKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZV9sIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9f
dHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikg
dGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2Nv
bnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0
IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9f
dHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGlt
ZXIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1
Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y
ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3Qg
dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsK
ZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4
dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoK
CmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDMw
NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRt
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpf
X3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChf
X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAq
X19yZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9f
Y2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBj
bG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChj
bG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNs
b2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk
LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9f
ZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVy
aWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJp
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJp
ZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
aXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3Bl
YyAqX192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4g
KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKIyAzNzggIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRl
IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzOTMgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jl
c2J1ZnApIHRocm93ICgpOwoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRv
bWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFs
WygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0
X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVkZS9z
aWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzc4ICIvdXNyL2luY2x1
ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9i
aXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAz
CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCnR5cGVkZWYgaW50
IF9fYXRvbWljX2xvY2tfdDsKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50
IF9fc3RhdHVzOwogIF9fYXRvbWljX2xvY2tfdCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVm
IHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19z
Y2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9f
aW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQg
X19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6
ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVh
ZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhy
ZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRf
Y29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0
aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRf
ZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50
IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewog
IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsK
ICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRf
d2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndf
a2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYg
c3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcnds
b2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoK
CnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwog
IGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3Ig
X19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBp
bnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFU
RV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVB
RF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQ
VEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05Q
LAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVD
S19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05P
Uk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUg
PSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sg
PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0g
UFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJF
QURfTVVURVhfQURBUFRJVkVfTlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFU
RSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9D
S19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAg
UFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9S
V0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAx
MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQg
X19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9
OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJ
U0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NB
TkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTYzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZHAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVz
dHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRf
cm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVz
dHJpY3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3Ro
cmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJl
YWRfZXhpdCAodm9pZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3Ro
LCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRk
ZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVz
dHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2Nv
bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5o
ZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19p
bmhlcml0KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3Bl
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25z
dCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRzdGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBf
X3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y
ZXN0cmljdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy
LCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFt
IChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVh
ZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBf
X211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211
dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211
dGV4X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJv
eSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z
ZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpf
X2F0dHIsIGludCBfX2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0
cmljdCBfX2tpbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5p
dCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25k
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRf
Y29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0
IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpf
X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhy
ZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2Nv
bmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpf
X3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190
ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9j
a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGlt
ZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGlt
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRy
X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0
cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrYXR0cl9nZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVm
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChw
dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9j
a190ICpfX2xvY2ssIGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3NwaW5fZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19s
b2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFk
X3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5f
dW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBf
X2JhcnJpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVh
ZF9iYXJyaWVyYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYXR0ciwgdW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBw
dGhyZWFkX2JhcnJpZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJy
aWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh
dHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRf
YmFycmllcmF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBw
dGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFk
X2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9f
a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rp
b24pICh2b2lkICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAo
cHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNw
ZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRo
cmVhZF9nZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFk
X29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgq
X19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9f
b2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90
IF9fY2FuY2VsdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNh
bmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf
YnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh
bnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYz
MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkg
KHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19hcmcpIHRocm93ICgpOwojIDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g
dm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0
Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f
bmV3bWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJp
Y3QgX19vbGRtYXNrKXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFk
X3QgX190aHJlYWRpZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMiAzCiMgNjcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBp
bnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQojIDM4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIg
MwoKdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFk
X29uY2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJl
YWRfbXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsg
cHRocmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lm
aWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRl
eF9sb2NrIAojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrIAojcHJhZ21hIHdlYWsg
cHRocmVhZF9tdXRleF91bmxvY2sgCiMgODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfYWN0
aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29uc3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIg
PSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRy
ICE9IDA7Cn0KIyA0MzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhy
LWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFk
X29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0
aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAg
ICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChf
X2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0
aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpwdHIpCnsKCiAgaWYgKHB0
cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDApOwogIGVsc2UKICAgIHJl
dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhy
ZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7Cn0KCnN0
YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90
IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkpOwp9CgpzdGF0aWMgaW5s
aW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0
IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhf
dCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJl
YWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5s
aW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4
KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4
X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBp
bnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAg
aWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9j
ayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91c3IvaW5jbHVkZS9jKysv
My4yL2kzODYtbGludXgvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRl
ZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBl
ZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBv
czsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklM
RSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQg
X19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAw
eDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVm
dCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3
cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIw
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4
MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4
MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zs
b2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQg
PSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFy
IiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGlt
ZSIgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNp
bmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5n
IDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6Omdt
dGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg
MwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyA4OCAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMKCgp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKCgoKIyAxMTMgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCmV4dGVybiAiQyIgewoKCgoKc3RydWN0IHRtOwoKCgoKCgoKCgpleHRl
cm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAo
KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3
Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2Fz
ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
d2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCB3Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgd2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtX2wgKHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3
Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpf
X3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdj
aGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJf
dCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4
dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3
Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0
YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdjaGFy
X3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g
d2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2No
YXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3Qg
X19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
ZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9f
Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAog
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwg
X19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVy
biB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHdp
bnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRf
dCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90
ICpfX3BzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNp
emVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qg
d2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAg
ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRo
cm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmlj
dCBfX3BzKSB0aHJvdyAoKTsKCiMgMzI0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgpleHRl
cm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0
b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19w
cykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmlj
dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX253Yywgc2l6
ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmlj
dCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2Yg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0NDMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVy
biBsb25nIGludCB3Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IHdjc3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90
IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGRfbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg
X193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv
dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3dj
c3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTYzICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qg
d2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2No
YXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19mcCwgaW50IF9fbW9k
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3cHJpbnRmIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7Cgpl
eHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h
cmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50IGZ3c2NhbmYg
KF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRl
cm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgoKCgoKCgpleHRlcm4gaW50IHZm
d3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2Nh
bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKZXh0ZXJuIHdp
bnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdl
dHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFy
ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193Yywg
X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3Qg
X193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hh
ciAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3
cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVu
Z2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4
dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3
aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxv
Y2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191
bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWVfbCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CiMgNzM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp9
CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCiMgNjkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsK
fQojIDEzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwogIHVz
aW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVzaW5n
IDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNpbmcg
OjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5nIDo6
bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNpbmcg
OjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNpbmcg
Ojpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1c2lu
ZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7CiAg
dXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21iOwog
IHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsKICB1
c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsKICB1
c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwogIHVz
aW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsKICB1
c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1c2lu
ZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVzaW5n
IDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5nIDo6d21lbWNweTsKICB1c2luZyA6
OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2luZyA6OndwcmludGY7CiAgdXNpbmcg
Ojp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NjaHIo
d2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2FzdDxj
b25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlubGlu
ZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJl
dHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoK
ICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJfdCog
X19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No
YXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hhcl90
KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3N0
cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3
bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJf
dCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0IHdj
aGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7
CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3RvdWxs
Owp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNpbmcg
X19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0NiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToK
ICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1
YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01f
c3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3Qg
PSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19z
dGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlw
ZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19z
dCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7
IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m
ZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09
KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAg
ICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAg
ZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190
OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAg
ICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAg
ICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25z
dCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29m
ZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1v
ZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZv
aWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9
CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVm
IGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8
Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2Zm
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf
X2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0
IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBp
bnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog
X19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25z
dCBjaGFyX3R5cGUqIF9fcyk7CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBm
aW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9f
YSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwg
Y29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlw
ZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGlj
IGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAg
IHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25z
dCBpbnRfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCk7Cgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsK
ICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7
CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBl
OwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1v
ZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVx
KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl
dHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNo
YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx
IDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlw
ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy
biBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBs
ZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9
CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlw
ZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoK
ICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0
IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt
Y3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBh
c3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBl
JiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBf
X2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUo
Y29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVy
biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw
ZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2Mg
PT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNo
YXJfdHJhaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgd2ludF90IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBv
ZmZfdHlwZTsKICAgICAgdHlwZWRlZiB3c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVm
IG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNo
YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2My
OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAg
ICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJf
dHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBp
bnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog
X19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24p
OyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9f
cykKICAgICAgeyByZXR1cm4gd2NzbGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0
IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBpbnRfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3Zl
KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko
Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAg
IHsgcmV0dXJuIHdtZW1jcHkoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUg
X19hKQogICAgICB7IHJldHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0
aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJl
dHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2lu
dF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwg
Y29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg
ICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90
eXBlPigoMHhmZmZmZmZmZnUpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9l
b2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBl
b2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAg
X0NoYXJUIF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykg
OiBfTV9jKF9fYykgeyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0
JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0OCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9jbGltaXRzIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIg
MwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiMgMTEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL2xp
bWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8zLjIuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGlt
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3Iv
aW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0
cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAi
L3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMK
IyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNs
dWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5f
bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91
c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCiMgMTMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
My4yLjMvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Ns
aW1pdHMiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgi
IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUv
Yml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsK
ICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3Owog
ICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQg
X193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9f
d2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50
IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAg
ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMg
NDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTMgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0g
ZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg
aW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxs
ZGl2X3Q7CgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9f
Y3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBh
dG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0
IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
X19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpf
X25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
c3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25n
IGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgojIDIyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBsb25nIGludCBzdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90
IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBzdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQg
X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwojIDQwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBfX3VfY2hh
ciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2lu
dDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlw
ZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlw
ZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5
cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlw
ZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0
eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CiMg
MTA1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoK
CnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJf
dDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7
CiMgMTM3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX3VzZWNvbmRzX3Qg
dXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDE0OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsK
dHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsK
dHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsK
Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVf
aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50
IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMTYg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0
cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBf
X3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBsb25nIGlu
dCBfX2ZkX21hc2s7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBz
dHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChf
X2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRf
bWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoK
CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl
YWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK
ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJp
Y3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dy
aXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk
cywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3Qg
X190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJp
Y3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjIwICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtz
aXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2Zz
YmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsK
IyAyNTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBi
bGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBf
X2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w
dGhyZWFkdHlwZXMuaCIgMSAzCiMgMjY3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
Cn0KIyA0MTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGlu
dCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVk
IGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2ln
bmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChj
aGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsK
ICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7
CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwog
ICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJh
bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVz
dHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQp
IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBk
b3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50
IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVk
IHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJv
dyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10p
IHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNp
Z25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVy
YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNy
YW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl
cikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVh
bGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91
c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4
dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1Nzcg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXpl
X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0
ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1l
bnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAo
dm9pZCkpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykg
KGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0
dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJu
IGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFs
dWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAo
X19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52
ICh2b2lkKSB0aHJvdyAoKTsKIyA2NjEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
Y2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjc4ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRo
cm93ICgpOwojIDY4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0
ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHN5c3RlbSAo
X19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNh
bm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA3
MTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv
bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9f
Y29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAo
X19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2Nv
bXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBh
cik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u
ZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt
ZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9t
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNzc2ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50
ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJu
IGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9f
YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
cWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAog
ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg
X19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChf
X2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRv
d2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9f
Y29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODU4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9u
cCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tl
bnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0
c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGlu
dCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChk
b3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjps
ZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7
CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcg
Ojpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhp
dDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVz
aW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6
bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJh
bmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7
CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwog
IHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJz
KGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihs
b25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNp
bmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMo
bG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGlu
ZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9f
eCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBs
b25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9
IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcg
bG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24g
LyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9s
bDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3Vs
bDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4
eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6
YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAg
dXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5n
IF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBf
X2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDY4ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbmV3IiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbmV3IiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsK
CgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhy
b3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhj
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9u
KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAg
fTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2
b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90
ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBz
ZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhw
ZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3co
KTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9l
eGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQoj
IDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVz
cGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBw
dWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxs
b2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25z
dCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoK
ICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA3
OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQq
KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBv
cGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK
dm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg
dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qs
IHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoK
aW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Owpp
bmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoK
fQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pb3Nmd2QiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4
Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMg
MzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZv
aWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWlu
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1l
bnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9z
X2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
b3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19p
b3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0
cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxv
YyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0
eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJp
bmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYg
YmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJl
YW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFy
PiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAg
dHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1
ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdp
b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4g
d2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7
CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry
ZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+
IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cgp9
CiMgNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz
dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl
Y29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25z
dCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30K
CgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1Ux
LCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsK
ICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNv
bmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmly
c3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWly
PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEo
X194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg
X1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7
CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KCgppbmxpbmUg
cGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBfX3kpCgoKCnsKICByZXR1cm4g
cGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
dHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90
cmFpdHMuaCIgMwojIDkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgi
IDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk
IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90
cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxj
aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9u
ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19u
b3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5h
bWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRl
cmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
PiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBz
dGQKewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0
X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGlj
IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307
CiMgMTAwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0g
X1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoK
ICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVm
IF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBl
OwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
cj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4g
ewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
c3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAg
ICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBy
ZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQog
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5h
bWVzcGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAg
cmV0dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsK
ICB9CiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1
bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRp
c3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7
CgogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBf
RGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19u
LS0pICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Is
IHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAo
X19uLS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBf
RGlzdGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7
CgogICAKICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9JbnB1
dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ksIF9f
biwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewog
ICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICBwdWJsaWM6CgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIHJldmVyc2Vf
aXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHsgfQoKCgoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiBfX3gpCiAgICAgIDogY3Vy
cmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+
CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYg
X194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9y
X3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KCgoKCgoKICAgICAg
cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKICAgICAgICBfSXRlcmF0
b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAqLS1fX3RtcDsKICAgICAgfQoKCgoK
CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr
KCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAg
ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICAtLWN1
cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAgICAgICAgKytjdXJyZW50Owog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
IG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0K
CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90
eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0g
X19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRp
ZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50IC09IF9fbjsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAg
ICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg
ICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg
eyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMgMjY5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3ku
YmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195
IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAg
ICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f
eC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3Jf
dGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBf
Q29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFp
bmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVm
ZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3Zh
bHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNr
X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5l
ciYgX194KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194
KTsgfQojIDM5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRl
cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv
aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQog
ICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2lu
c2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAg
IH07CiMgNDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAg
IHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJs
aWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4K
ICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0
eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0
b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAg
ICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9f
dmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192
YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
ICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
CgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9J
dGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2Vy
dGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9
Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3Ry
YWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAg
IDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpp
dGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRl
cmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
KCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9f
bm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7
IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFs
X2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19p
KQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UK
ICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBv
aW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAg
ICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7
IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3Ir
KyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAg
ICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyBy
ZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0o
aW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAg
cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAg
IHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRl
cmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog
ICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90
eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlw
ZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl
bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz
ZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v
bAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS
LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz
ZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMu
YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSB0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlm
ZmVyZW5jZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgLSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24p
OyB9Cn0KIyA3NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIx
IF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVl
VHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1w
OwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYg
X19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAg
IF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf
X2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu
IF9fYTsKICAgIH0KIyAxNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg
bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBp
ZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNv
bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMg
MjA0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm
CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f
YTsKICAgIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBf
X24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsr
X19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f
Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog
X19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihf
VHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg
cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBf
X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw
ZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwog
ICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h
bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFz
dC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6
X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQp
CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
aXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19j
b3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlf
YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1f
X2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0g
Ki0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAg
ICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewog
ICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w
eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog
ICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9O
dW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8
Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAg
ICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jl
c3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVu
YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9f
Zmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1
ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3Bh
dGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK
ICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf
QkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK
ICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ
MiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xh
c3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRf
aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2Vf
dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9C
STI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1
dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAg
fQojIDQ3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg
IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v
cm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19O
b3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAg
IH0KIyA1MzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9U
cD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24g
PiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYg
X19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJz
dCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNp
Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hh
ciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly
c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7
CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBj
b25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp
cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp
OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hh
cioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVu
c2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u
LCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19m
aXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxs
KF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19u
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAg
ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewog
ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp
cnN0ICsgX19uOwogICAgfQojIDYwNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgfQojIDY0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0
ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQog
ICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2Zp
cnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0
MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5
OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK
ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0K
IyA3NjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mgog
ICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVu
MSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3Qy
IC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f
Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8g
X19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29u
c3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJl
KChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7
CgoKCgoKCiAgfQoKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o
IiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh
ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl
cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f
ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyA4OSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhj
ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4
Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291
dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDkw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVj
dCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9s
YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf
Y291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50
KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBU
SFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sg
PSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBf
X2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9j
b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog
ICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4
X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAt
LV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50
X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15Pgog
ICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhf
dCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFk
X211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7
MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1
bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVk
IGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVj
dDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwog
ICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3Ry
dWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211
dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9p
ZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2so
KQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9Cgog
ICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211
dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAg
IF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4
X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJl
X2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xv
Y2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xv
Y2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0K
IyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBl
ZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJp
YnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21p
Y193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVz
dWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAg
ICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAg
IDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJp
YnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3Jk
KiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRs
ICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpf
X21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDQgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJsaWM6CiAg
ICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiA6Om9w
ZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9OwojIDEyNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBf
X2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0
ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgogICAgICBzdGF0
aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgogICAgICBzdGF0aWMgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0
YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9p
ZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChf
X3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgoK
ICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBz
aXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2Mo
X19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0g
MCwgMCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3op
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQgKCog
X19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZv
aWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KICAgIH07CgoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7
CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0Pjo6CiAgICBfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAg
IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7Cgog
ICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0
KF9fbXlfbWFsbG9jX2hhbmRsZXIgPT0gMCwgMCkpCiAgICAgICAgICAgIF9fdGhyb3dfYmFkX2Fs
bG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jl
c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K
ICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjoKICAgIF9TX29v
bV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215
X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzsp
CiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2Nf
aGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg
ICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv
YyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2lu
dGVyZmFjZTsKIyAyMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fc2lt
cGxlX2FsbG9jCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBp
ZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9j
YXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9Cgog
ICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZSgpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBf
QWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0
aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxv
Y2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICAgIH07CiMgMjcwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAg
Y2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtfU19l
eHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs
b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19y
ZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAg
ICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu
dCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVh
bF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g
X19uIiwgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyOTEsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf
cCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQqCiAg
ICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
eikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9T
X2V4dHJhOwogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9
PSBfX29sZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g
X19vbGRfc3oiLCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDMwMCwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh
ciopIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19z
eiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19z
ejsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQogICAg
fTsKIyAzNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w
bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNsYXNzIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgZW51bSB7X0FMSUdOID0gOH07CiAg
ICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9N
QVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09iagogICAgICB7CiAgICAgICAgdW5p
b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx
XTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05G
UkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogICAgICBzdGF0
aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK
ICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKICAg
ICAgc3RhdGljIHNpemVfdAogICAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgICAg
eyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9B
TElHTiAtIDEpKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBfU19mcmVlbGlzdF9pbmRl
eChzaXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTiAtIDEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAgc3RhdGljIHZvaWQqCiAg
ICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGljIGNoYXIqCiAgICAgIF9T
X2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICAgIHN0cnVj
dCBfTG9jawogICAgICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVf
YWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAgICB+X0xvY2soKSB7IGlm
IChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0K
ICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgICBmcmllbmQgc3RydWN0
IF9Mb2NrOwoKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgcHVi
bGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAg
IHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlmIChfU19mb3JjZV9uZXcg
PT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9O
RVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEp
OwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9yY2VfbmV3ICE9IDApID8g
MCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDQwOSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgICAgICAgICB9CgogICAgICAgIGlmICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwg
KF9TX2ZvcmNlX25ldyA+IDApKQogICAgICAgICAgX19yZXQgPSBfX25ld19hbGxvYzo6YWxsb2Nh
dGUoX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0
aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog
ICAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7
CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAg
ICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g
X19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9f
cmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo
X19yZXQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg
ICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGlm
ICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNlX25ldyA+IDApKQogICAg
ICAgICAgX19uZXdfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIGVsc2UKICAg
ICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1Nf
ZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAg
ICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2Nr
X2luc3RhbmNlOwogICAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9m
cmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICAgIH0K
ICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwogICAgfTsKCiAgdGVtcGxhdGU8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRl
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu
c3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4g
ZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg
Y2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ogog
ICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAgewogICAg
ICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFy
dF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICAg
IHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7CiAgICAg
ICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsKICAg
ICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAgIF9f
dG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBfU19z
dGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5
dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5
dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUq
IF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs
aXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRf
ZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAg
ICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxvY2F0ZShf
X2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAg
ICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3Qp
IF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp
c3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Owog
ICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAg
ICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpz
KTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf
X25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAg
ICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9m
cmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuIF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVt
cGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24p
CiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19j
aHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl
X2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwog
ICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19u
b2JqcykKICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19m
cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9P
YmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiop
KF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewog
ICAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2Jq
ID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2Jq
cyAtIDEgPT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAt
PiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xp
c3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CgoKCiAgdGVtcGxhdGU8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OgogICAgcmVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2
b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9z
eiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVT
KQogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgaWYgKF9TX3Jv
dW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpCiAgICAgICAgcmV0dXJu
KF9fcCk7CiAgICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlf
c3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1j
cHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xk
X3N6KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICA9
IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1w
bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRl
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgICBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU
U107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD4gX19hbGxvYzsK
ICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwwPiBfX3NpbmdsZV9jbGll
bnRfYWxsb2M7CiMgNjQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAg
IHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv
aW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3Qg
X1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhy
b3coKSB7fQogICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0
b3I8X1RwMT4mKSB0aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAg
ICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9f
eDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShz
aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0
ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9
IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAq
PihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJl
dHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVy
IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24g
KiBzaXplb2YoX1RwKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0
IHRocm93KCkgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo
X192YWwpOyB9CiAgICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg
fQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAg
ICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVj
dCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAg
fTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8
X1QyPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlw
ZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDc0
MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yCiAgICB7
CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu
dGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CgogICAgICBfX2FsbG9j
YXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f
YSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs
bG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBfX2FsbG9jYXRv
cihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgICAgICA6
IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgfl9f
YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgogICAgICBhZGRyZXNzKHJlZmVy
ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAg
ICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoK
CiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAw
KQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAg
ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl
b2YoX1RwKSkpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAg
ICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfX3VuZGVy
bHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3Qo
LTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KHBvaW50ZXIg
X19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KCiAgICAgIHZv
aWQKICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yPHZvaWQsIF9B
bGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3Ry
dWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90
aGVyOyB9OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0Fs
bG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLF9BbGxvYz4m
IF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5k
ZXJseWluZ19hbGxvYzsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
X0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxs
b2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5f
X3VuZGVybHlpbmdfYWxsb2M7IH0KCgoKCgoKCiAgdGVtcGxhdGU8aW50IGluc3Q+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikK
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m
LAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNv
bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAg
ICB7IHJldHVybiBmYWxzZTsgfQojIDg5NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4K
ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6
OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wg
X0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0
b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4K
ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsK
ICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j
PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsK
ICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBf
X2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
ICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19p
bnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1w
bGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAg
ICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRv
cjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoK
CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD47Cn0KIyA1NiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1
Y3QuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9f
dmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsg
fQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25z
dHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgp
OyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19k
ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9G
b3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAg
IHsgX19wb2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAg
ICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W
YWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAg
IF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgNTcgIi91c3IvaW5j
bHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAg
ICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICAg
ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwog
ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl
c3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDEwNiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9G
b3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5l
IGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNo
YXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19m
aXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0g
X19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29u
c3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp
cnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9f
cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl
KQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXpl
ZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAg
ICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj
dCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVk
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmly
c3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf
Rm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVybiBmaWxsX24oX19maXJzdCwg
X19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAg
ewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYq
X19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4u
LikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg
ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAg
ICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwg
X0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg
X19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBf
X3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAg
ICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19zdG9y
YWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19z
dG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgog
ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p
ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9p
dGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3Rv
cmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg
IHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1l
bnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9G
b3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg
KytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkK
ICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U
cD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1w
OwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAz
CgoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAz
CnRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1w
b3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRp
ZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8g
c2l6ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1Rw
Kikgc3RkOjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYg
KF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9f
bGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+
KChfVHAqKTAsIDApOwp9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90
ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVt
cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KIyAxMjAgIi91c3IvaW5jbHVkZS9j
KysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgdm9pZAogIHJldHVybl90
ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQogIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwogIH0KIyAx
MzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogIHN0cnVjdCBhdXRvX3B0cl9yZWYKewogICBfVHAxKiBfTV9wdHI7CgogICBleHBsaWNpdAog
ICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKQogICA6IF9NX3B0cihfX3ApIHt9Cn07CiMgMTc1ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNs
YXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRl
ZiBfVHAgZWxlbWVudF90eXBlOwoKCgoKCgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRf
dHlwZSogX19wID0gMCkgdGhyb3coKQogIDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygp
CiAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHIoYXV0b19w
dHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMg
MjI2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0ciYKICBvcGVyYXRv
cj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgp
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0ciYKICAgIG9w
ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9f
YS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjYzICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAy
NzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVy
YXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVu
dF90eXBlKgogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQoj
IDI5NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIGdl
dCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgcmVsZWFzZSgpIHRocm93KCkKICAg
IHsKICAgICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0cjsKICAgICAgX01fcHRyID0gMDsK
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQojIDMyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt
b3J5IiAzCiAgdm9pZAogIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAg
ewogICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01f
cHRyOwogICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxlbGVtZW50
X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1
dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhy
b3coKQogICAgewogICAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKQogICAgICAg
IHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3JlZi5fTV9w
dHI7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKfTsKCn0K
IyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAxMDEgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9B
cmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJn
IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJp
bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5
cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3Vs
dF90eXBlOwp9OwojIDEyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBf
X3k7IH0KfTsKIyAyMjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJu
ICFfX3g7IH0KfTsKIyAyNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUs
IGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxp
Y2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5v
dDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJl
ZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJp
bmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0
ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQo
X194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz
dF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJu
ICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYg
X19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoj
IDM0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJv
dGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBf
X3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1
ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5k
MXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0
dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsK
cHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlv
biYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3Ao
X194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv
cGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpi
aW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwog
IHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoj
IDQzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoK
ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAo
Kl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9Bcmcs
IF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpw
dWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQog
ICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBf
QXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5s
aW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9m
dW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2Jp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBj
b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBl
bmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw
ZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZp
cnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4K
ewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6
OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3Mg
bWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7
IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f
dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9U
cDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikg
Y29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf
bWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0
IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp
IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv
bnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90
KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w
ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVm
X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m
dW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkg
Y29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkg
Y29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lk
LCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZh
dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAo
X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAo
X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn
KSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f
ZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9U
cDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBf
X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7
IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBj
b25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVt
X2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBt
ZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8
X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1f
ZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1Jl
dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1Jl
dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z
dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJn
KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt
ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp
KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z
dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf
X2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgoKCm5hbWVzcGFj
ZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
OjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVy
OwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgYmFz
aWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0
ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg
ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jh
d19ieXRlc19hbGxvYzsKIyAxNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3Ry
aW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAg
ICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBf
TV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNf
d29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkg
Y29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29s
CiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu
Y2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAg
eyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFy
YWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAg
ICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9j
YXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0
b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtf
X3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19h
bGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
ICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAgICAg
ICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAgIH0KCgogICAg
ICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYp
OwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAt
MSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAg
dm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAg
X0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAg
X19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZk
YXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3Qg
X0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9B
bGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCog
X19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19k
YXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgog
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+
KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBs
dXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVv
ZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yo
c2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEo
X0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoK
ICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRl
cnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IK
ICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoK
ICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9N
X2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAg
ICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9N
X2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXpl
X3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXpl
KCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVj
ayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAg
aXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikg
Y29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXpl
KCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m
ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBf
X3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0
b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w
LCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9y
ICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
X1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikK
ICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Rf
aXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJz
KF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIp
CiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9D
aGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5
KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAg
ICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBf
U19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9T
X2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAg
ICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25z
dCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwog
ICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2Ep
OwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo
KSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBf
QWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRl
cmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0Fs
bG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bv
c2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv
cGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWdu
KF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0No
YXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwg
X19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9N
X2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAg
ICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25z
dF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAg
ICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo
KSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVu
ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMt
PnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4o
KSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAg
ICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9p
ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAg
ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVw
KCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9f
cmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRo
aXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVy
biB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVy
YXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtf
X3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3Bv
cykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19f
cG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBf
X24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0
dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6
ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFr
KCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0
dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3Bl
cmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVy
biB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5k
KF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5k
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xh
c3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRo
aXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0cnNp
emUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24i
KTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsK
ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ry
c2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgp
ICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
YXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg
aWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv
cigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg
ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19z
KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2llbmQo
KSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgaWYg
KF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRhKCks
IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlcCgp
LT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwg
X19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2li
ZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAg
aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0
aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0
SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVw
bGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9
IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgY29u
c3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3My
OwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkgKyBf
X3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z
ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAg
ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhfc2l6
ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNv
bnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3Qg
X0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01f
cmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgICBl
bHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9f
cyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwogICAg
ICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBfX3Ag
PSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3ApCiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAgICAg
IGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19w
LCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBfX24s
IF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z
ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19w
b3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVy
YXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAg
ICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJl
Z2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShz
aXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19u
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAg
ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEo
KSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg
IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAg
c2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBs
YWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAg
ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwg
c2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy
VCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBf
X3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBs
YWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBfX3Bv
czsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBf
X3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5tYXhf
c2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxl
c3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxj
b25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVy
biBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9fcyAr
IF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9yZXBsYWNlKF9N
X2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9j
YXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9f
bjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9f
c3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv
ciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z
dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBf
X3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBf
X2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwK
ICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r
MikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19p
MiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19r
MSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAg
ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9f
aTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsK
ICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf
TV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVy
YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsKCgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAg
ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9f
YmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwog
ICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D
aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVy
biBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAg
ICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNv
bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBf
X3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAg
IHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAg
ICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5z
aXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6
X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNv
bnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAg
ICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3Bvcywg
X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp
bmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19z
dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0No
YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz
dF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2Zp
cnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9v
Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w
b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh
c3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAg
YmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUg
X19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUo
KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIp
OwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9
CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25z
dAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19s
ZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFf
X3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7
CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAg
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg
X19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykg
Y29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAog
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxv
YygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAg
ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRv
cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg
ewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhz
KTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAg
ICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190
eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jo
cyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j
b21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1
cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAog
ICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxn
b3JpdGhtIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAzCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgNjQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAg
dm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBf
VHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19m
aXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3Bh
cmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQog
ICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcHVz
aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAg
ICAgCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBf
X2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVU
eXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAg
ICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsg
X19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog
ICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICoo
X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUg
dm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh
bmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fYWRqdXN0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRl
eCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKICAgIHsK
ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNl
IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp
IDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgICAgICBfX3NlY29uZENo
aWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19z
ZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAg
IF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBp
ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUlu
ZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJz
dCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2
b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp
c3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChf
X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1
ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg
IGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qg
LSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2Us
CiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBf
X2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1
ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9f
aG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl
eCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAo
X19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRD
aGlsZCAtIDEpKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19o
b2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f
c2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xl
bikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3Nl
Y29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7
CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5k
ZXgsIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVU
eXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2xh
c3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19s
YXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIp
LzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg
X19wYXJlbnQsIF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAg
ICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsK
CgogICAgIAoKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBf
RGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOwogICAgICAg
IGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lk
CiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19s
YXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwogICAgfQoK
fQojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIK
ewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAg
X1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29y
aWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+
IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBf
TV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYg
KF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoK
ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQog
IHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkg
ewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoK
cHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBw
dHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47
IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsg
cmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAg
IGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBf
VHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01f
YnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAg
ICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0
cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsK
ICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl
ciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoK
fQojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1l
c3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoK
ICAgICAKICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAg
ICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1
cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYg
KF9fYSA8IF9fYykKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2Mp
CiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9
CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBf
X2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBf
X2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsK
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAo
X19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7
CiAgICB9CiMgMTUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVu
Y3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpf
X2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Q
cmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwK
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg
ICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmly
c3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3Vu
dCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAg
ICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAg
ICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBp
ZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoK
ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf
X2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0g
X19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0
LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMg
MzI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4
dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg
ewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMg
NDExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg
ICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRl
cjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19s
YXN0MikKICAgICAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsK
CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7
ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChf
X2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAg
ICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xh
c3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50
ID09ICpfX3ApIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg
ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwog
ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0Zv
cndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zvcndh
cmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9
PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJl
ZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwg
X19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIx
IF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp
IHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9f
cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVy
biBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmly
c3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsK
CiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAg
ICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAg
ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xh
c3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4g
X19maXJzdDE7CiAgICB9CiMgNTk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy
LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19j
b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAg
aWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAg
ICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50
IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytf
X2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09
IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAg
IH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3Zh
bCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKICAgICAg
ICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24o
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBf
SW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgX0JpbmFyeVBy
ZWQgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fY291bnQg
PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJz
dCwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdl
ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0
OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g
IT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICAgICArK19faTsK
ICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAg
ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9f
aSwgX192YWwpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgKytfX2k7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY5NyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3
YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3Qy
KTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJ
dGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h
cnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9v
cCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFu
c2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsr
X19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9f
Zmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzk2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9U
cCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBf
X25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRp
Y2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAg
fQojIDg1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3
X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl
ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAg
ICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKICAgIH0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9f
Z2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBy
ZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJl
bW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7
CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWUpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0
dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAg
IH0KIyAxMDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0g
X19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9P
dXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh
c3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFs
dWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9
CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQg
PT0gKl9fZmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0
dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
ICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVy
VHlwZSgpKTsKICAgIH0KIyAxMTcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90
YWcpCiAgICB7CgogICAgIAoKCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBf
X3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9f
YmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9f
Zmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5h
cnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091
dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCiAgICAgICAgIAoK
CiAgICAgICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7CiAgICB9
CiMgMTI5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
X0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg
ewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwg
X19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg
ICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwg
X19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAg
ICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p
ZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAg
ICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0OSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAg
ICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJldmVyc2VfY29weShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgLS1fX2xhc3Q7
CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMzk5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0Vs
ZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5n
RWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxl
IChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBf
X247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICBy
ZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47
CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAg
ICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAo
X19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3
aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19m
aXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21p
ZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAg
ICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlm
ICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAg
cmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRk
bGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f
bGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJz
ZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47
CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
ICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBf
X2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7
CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFu
Y2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsg
X19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsK
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19r
IDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k
OyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAg
ICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAg
X19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAg
ICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewog
ICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsK
ICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg
dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk
bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5
cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIF9PdXRwdXRJdGVyCiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0
KSk7CiAgICB9CiMgMTYxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg
X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0
OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s
aW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9f
Zmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2
NjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJl
ckdlbmVyYXRvciYgX19yYW5kKQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg
aWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog
ICAgICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgICAgIHN3YXAoKl9fZmlyc3QsICpf
X25leHQpOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRp
b24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
IHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAg
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBp
ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlv
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9f
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAg
ICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9y
d2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxl
LCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5k
KSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJs
ZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
dWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBf
X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsg
KytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAg
Kl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAg
ICAgICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIs
IF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIg
X19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlk
ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAg
ICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAg
IHJldHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFydGl0aW9u
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAg
ICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7
CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlwZT4gX19i
dWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgICAg
ICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmly
c3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAgICB9CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19fZmlyc3Q7
CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAg
ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9S
YW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29tcChfX3Bp
dm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3Qg
PCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTkyOSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgZW51bSB7IF9NX3RocmVz
aG9sZCA9IDE2IH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCiAgICB7CiAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX3Zh
bCA8ICpfX25leHQpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3Qg
PSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFs
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGlu
ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
ICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAg
ICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAt
LV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CgogICAgICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX2Zp
cnN0KSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg
ICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwpOwogICAgICB9CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47Cgog
ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19s
YXN0OyArK19faSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX2Nv
bXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf
X2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsLCBf
X2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJkZWRf
bGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19s
YXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVl
VHlwZSgqX19pKSwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg
ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCk7CiAgICAgICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0KTsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOwogICAgICAgIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsK
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp
bmxpbmUgX1NpemUKICAgIF9fbGcoX1NpemUgX19uKQogICAgewogICAgICBfU2l6ZSBfX2s7CiAg
ICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkgKytfX2s7CiAgICAgIHJldHVy
biBfX2s7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9TaXplPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAg
ICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAt
LV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAg
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBfX2ludHJvc29ydF9sb29w
KF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogICAgICAgIF9fbGFzdCA9IF9fY3V0Owog
ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW50cm9z
b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBpZiAoX19kZXB0aF9saW1pdCA9
PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1p
dDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl
ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9f
aW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAg
ICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQojIDIxNjYgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp
ICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICB9CiAgICB9CiMgMjE5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19s
YXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0K
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f
Zmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVybjsK
ICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s
YXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwg
X19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg
X19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz
dGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAq
IF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3Rl
cCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp
cnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAg
ICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0g
bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogICAgICBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAg
ICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf
X21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf
X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0
ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsK
ICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
IF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwog
ICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0
KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z
aXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAg
ICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVu
a19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJz
dCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0
LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1
bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVu
a19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1
bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog
ICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5r
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hp
bGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2Zp
cnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUg
Kj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwg
X19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Q
b2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rp
c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJf
bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBf
TV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xl
bikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIs
IF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg
X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl
cF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJz
dCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg
X19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJn
ZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg
ICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9E
aXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv
aW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkg
ewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAg
fQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0
YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+
CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg
IF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5j
ZVR5cGUoYnVmLnNpemUoKSkpOwogICAgfQojIDI0NjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1Jh
bmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBp
ZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAy
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAo
X19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3Qp
CiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUo
Kl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBh
cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoX19jb21wKCpfX2ks
ICpfX2ZpcnN0KSkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwg
X1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogICAgfQojIDI1NzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jl
c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAg
ICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jl
c3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAg
ICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAg
ICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3Vs
dF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5j
ZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRf
cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAg
c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1
cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nl
c3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw
ZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAg
ICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s
YXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs
dF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s
YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0
LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo
X19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3RfaGVh
cChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAg
IHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwog
ICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7
CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBf
X2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAg
ICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQojIDI3
MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAg
ICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0g
X19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICB9CiMgMjc2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK
ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK
ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAg
ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx
OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBf
X2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBw
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0
YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsK
ICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpf
X21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s
ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgfQojIDI5MDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5
cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl
IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu
ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf
X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9f
Y29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAg
IGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0
OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu
Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAg
X19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m
aXJzdCwgX192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2Fy
ZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBw
YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0K
IyAzMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf
RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQs
IF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p
ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg
ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwg
X19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1
MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2Vh
cmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAg
ICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwp
OwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMg
MzA4MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9f
aSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJl
dHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDMxMTUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpf
X2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVz
dWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAg
IAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
fQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVu
MSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSAr
IF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAg
ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAg
ICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChf
X2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dl
cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIg
PSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsK
ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl
ID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAg
ICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBp
ZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChf
X2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwog
ICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsK
ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0
LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwg
X19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNl
KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq
X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRs
ZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9
IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRk
bGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y
LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVu
MiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNv
cHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh
c3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBf
X2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQp
CiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5
X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIs
IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCAr
K19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAg
IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwog
ICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQp
OwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAg
IC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xh
c3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAg
ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qx
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAg
LS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p
bnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQog
ICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVy
X3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAg
ICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x
MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p
ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0g
ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAg
ICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAg
ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u
ZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m
aXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0
X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21l
cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNv
bmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg
ICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAg
ICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1
ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAg
X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAg
IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwog
ICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s
YXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAg
ICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25k
X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUo
X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAg
ICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3
X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90
eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNl
VHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7
CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn
aW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsKICAgIH0KIyAzNTU5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9t
ZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh
bHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg
ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rp
c3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBf
VGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f
bGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVz
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAg
ICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09
IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAK
CiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19f
cmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91
bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly
c3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBj
b3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRl
cnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f
Zmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h
bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBf
T3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19m
aXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg
IGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp
ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ugewog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpf
X3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19m
aXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29t
cCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9G
b3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJz
dCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo
X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK
ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg
KCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19p
LCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAg
cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
IH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09
IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg
LS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewog
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxl
ICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf
X2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0Owog
ICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAo
ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks
IF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICBy
ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAt
LV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g
X19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg
KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dh
cChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg
ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihf
SW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRl
cikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJz
dF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0
MTsKICAgIH0KIyA0MjAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy
PgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx
LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdf
cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg
X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFy
eVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy
ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3
X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAg
IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh
c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg
X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg
X19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jl
c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh
bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0
ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp
cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0
MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S
ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f
cmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAg
ICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg
ICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0
LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg
ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l
IF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMiAz
CiMgNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBf
UmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQp
KSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVv
ZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0
cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1w
dHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAg
ICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19p
IDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAg
ICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9
CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoKCiAgICAgICAg
ICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3Ag
PSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0No
YXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAg
ICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsK
ICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAg
ICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBf
X2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZk
YXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEo
KSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg
ICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBp
ZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9T
X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0
KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJh
dHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCgogICAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAg
ICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0K
ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJv
eShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xl
bmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6
Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
bGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQog
ICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3Jl
ZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK
ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19u
XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBs
dXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3Io
KSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z
dHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChz
aXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAg
IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxv
YygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9j
aGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk
KF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQog
ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j
JiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19h
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9J
bnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAo
KSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2Fs
bG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9k
aXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBf
X2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkg
KyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2Fs
bG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXpl
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9N
X3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19u
ZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFy
VCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAo
X01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAg
ICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoK
ICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUg
LSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAg
ICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9f
bmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19j
cmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwg
X19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19y
LT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBf
TV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19t
dWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBl
Ojptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAg
ICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgp
LT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBf
UmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7
CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkp
CiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUi
KTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVz
ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9j
YXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2Es
IF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f
YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0
cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+
X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK
ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQog
ICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBf
TV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAg
ICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAx
KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAg
YmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAg
ICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2Mp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoK
CiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7
CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh
clQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNp
Y19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXplID0gNDA5NjsKICAg
ICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNvbnN0IHNpemVfdCBf
X21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAgICAgaWYgKChfX3Np
emUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUgLSAoKF9fc2l6ZSAr
IF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAgICAgICAlIF9fcGFn
ZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsK
ICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNp
emVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+IF9fc3VicGFnZXNp
emUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19z
dWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdl
c2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkg
Kz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNp
dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KCgoKICAg
ICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19z
aXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9N
X2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg
ICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAg
ICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0gX01fbGVuZ3RoICsg
X19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAgICAgIChfX3BhZ2Vz
aXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJU
KSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7CiAgICAgIGlmIChf
X3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9jYXAgPiBfX3BhZ2Vf
Y2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAg
PiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXF1ZXN0
ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UKICAgICAgICBfX3Ig
PSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsKCiAgICAgIGlmIChf
TV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJhaXRzX3R5
cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQog
ICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+
X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQog
ICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0aGlzLT5hcHBlbmQo
X19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCiAgICAgICAg
dGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYK
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3Jl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7
CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9N
X3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkp
OwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUg
X19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBf
X2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykK
ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2Ui
KTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAg
X01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQog
ICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7Cgog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNp
emVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBf
X3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog
ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5f
TV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
CiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3Bv
cywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko
KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf
c2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19u
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0
cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgo
X19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9f
bGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9f
bGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w
ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUg
X19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0
ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwg
X19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9f
b2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+
c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFz
aWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24y
KTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgp
ICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHko
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK
ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkg
LSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4g
X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyAr
K19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBl
IF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFp
dHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9f
cCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3Ms
IF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQog
ICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUp
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAg
ICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAg
ICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRz
X3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBf
X3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9z
KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp
bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg
ICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np
emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBf
TV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19f
eHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3Mg
PCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9N
X2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0
YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBt
aW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz
aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh
dGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAg
ICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9f
c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9f
c2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z
aXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUs
IF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo
KSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRh
dGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3Jz
aXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNv
bnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAg
IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwog
ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1
cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9f
cnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4g
PSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAg
ICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq
IF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIp
OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK
ICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJl
dHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAg
X0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAg
ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19i
eXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHko
X19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0No
YXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0
b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+
JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNo
YXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz
aWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3
Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcm
KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hh
cl90PiYsIHdzdHJpbmcmKTsKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAy
IDMKIyAyICJ0ZXN0LmNwcCIgMgoKaW50IG1haW4oKSB7CiAgICAgICAgY2hhciBjaCA9ICdhJzsK
CiAgICAgICAgc3dpdGNoIChjaCkgewogICAgICAgICAgICAgICAgY2FzZSAnYSc6CiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGRlZjsKICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgfQp9Cg==


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

end of thread, other threads:[~2003-04-02 21:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-02 21:59 other/10294: ICE when declaring a variable within switch statement ehrhardt
  -- strict thread matches above, loose matches on Subject: below --
2003-04-02  7:16 sbdep

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