public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/6427: compiler generates incorrect call to compiler generated copy ctor
@ 2002-04-25  7:27 nathan
  0 siblings, 0 replies; 2+ messages in thread
From: nathan @ 2002-04-25  7:27 UTC (permalink / raw)
  To: ben.dorman, gcc-bugs, gcc-prs, nobody

Synopsis: compiler generates incorrect call to compiler generated copy ctor

State-Changed-From-To: open->closed
State-Changed-By: nathan
State-Changed-When: Thu Apr 25 07:27:48 2002
State-Changed-Why:
    not a bug. There is an invokation of the copy ctor
    to copy the temporary object into the (compiler's) throw
    structure. See [15.1] 

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


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

* c++/6427: compiler generates incorrect call to compiler generated copy ctor
@ 2002-04-23  9:06 ben.dorman
  0 siblings, 0 replies; 2+ messages in thread
From: ben.dorman @ 2002-04-23  9:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6427
>Category:       c++
>Synopsis:       compiler generates incorrect call to compiler generated copy ctor
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 23 09:06:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Ben Dorman
>Release:        3.0.3
>Organization:
>Environment:
gnu-linux-i686 kernel 2.4.2-2
>Description:
[Report submitted earlier through gcc bug which generated
incorrect e-mail address. ]

Following function generates the error:
  void FITS::open (RWmode mode)
  {

  int status=0;


  status = ffopen(&m_FITSImpl->fptr(), m_FITSImpl->name().c_str(), mode, &status);

  const std::string diag (m_FITSImpl->name());
  bool silent = s_verboseMode;
  if (status != 0)
  {
          if (status == 104) throw CantOpen(diag,silent);
          else throw FitsError(status);
  }


  }


  CantOpen is declared as follows, with explicit keyword
added to demonstrate problem (removing copy ctor declaration
restores compilation but apparently does not change the problem,
according to ddd traces).

# 677 "FITS.h"
      class CantOpen : public FitsException
      {
        public:


            CantOpen (const string& diag, bool silent = false);
            explicit CantOpen(const CantOpen&);

        protected:
        private:
        private:
      };

Compilation of FITS.cxx yields:

c++ -DHAVE_CONFIG_H -I. -I. -I. -I./..  -I/home/dorman/cpp/include  -g -v -save-temps -Wall -c FITS.cxx
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/specs
Configured with: ../gcc-3.0.3/configure --enable-threads --prefix=/usr
Thread model: posix
gcc version 3.0.3
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/cpp0 -lang-c++ -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -I. -I. -I. -I./.. -I/home/dorman/cpp/include -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=3 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Wall -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ -DHAVE_CONFIG_H FITS.cxx FITS.ii
GNU CPP version 3.0.3 (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include"
ignoring duplicate directory "."
ignoring duplicate directory "."
#include "..." search starts here:
#include <...> search starts here:
 .
 ..
 /home/dorman/cpp/include
 /usr/include/g++-v3
 /usr/include/g++-v3/i686-pc-linux-gnu
 /usr/include/g++-v3/backward
 /usr/local/include
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/cc1plus -fpreprocessed FITS.ii -quiet -dumpbase FITS.cxx -g -Wall -version -o FITS.s
GNU CPP version 3.0.3 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0.3 (i686-pc-linux-gnu)
	compiled by GNU C version 3.0.3.
FITS.cxx: In member function `void CCfits::FITS::open(CCfits::RWmode)':
FITS.cxx:544: no matching function for call to 
   `CCfits::FITS::CantOpen::CantOpen(CCfits::FITS::CantOpen)'
FITS.cxx:104: candidates are: CCfits::FITS::CantOpen::CantOpen(const 
   std::string&, bool = false)
make: *** [FITS.o] Error 1

Where the custom ctor should clearly be called.

>How-To-Repeat:
see above
>Fix:
compilation is restored by removing copy ctor declaration,
but problem is still present and causes unexpected results
in exception handling.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="FITS.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="FITS.ii"

IyAyMyAiRklUUy5jeHgiCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Nk
ZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEg
MwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50
cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMv
ZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAx
OTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMTk5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMw
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp
bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp
b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x
dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9f
dV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcg
X19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlu
a190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7
CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3Vf
bG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191
X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9f
ZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29u
ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f
c3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xv
Y2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlf
dDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBs
b25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw
ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n
IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk
ZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoK
dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg
X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw
ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0
eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry
dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu
bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl
YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9f
ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g
X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl
X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk
cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz
Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK
ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp
bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4
YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2Nr
OwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0
aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0
ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFk
X3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9f
cHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50
IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFk
X2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVz
ZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsK
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy
X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MiAzCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK
CnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoK
CnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vj
b25kc190OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgp0eXBlZGVmIF9faW50cHRy
X3QgaW50cHRyX3Q7CgoKCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90OwojIDI2MCAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3Mg
KF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2Zm
X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19vZmY2NF90
IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb3NlIChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lk
ICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCB3cml0
ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19u
Ynl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBzc2l6ZV90IHB3
cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkgdGhyb3cgKCk7CiMgMzQwICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQg
Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf
dCBfX29mZnNldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2Zk
LCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAo
aW50IF9fcGlwZWRlc1syXSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhy
b3cgKCk7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGlu
dCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf
X3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9f
aW50ZXJ2YWwpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdXNsZWVwIChfX3VzZWNvbmRz
X3QgX191c2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90
IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm
Y2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3Qg
X19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBj
aGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaGRp
ciAoaW50IF9fZmQpIHRocm93ICgpOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZHVwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19m
ZCwgaW50IF9fZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVy
biBjaGFyICoqZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpf
X3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpf
X2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9f
ZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hh
ciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2Nv
bnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19h
cmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4
ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAyNSAiL3Vz
ci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAoK
ICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9NQVgs
CgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05fUkVT
VFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9QQ19T
WU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBfUENfU09D
S19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1JfWEZFUl9T
SVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9YRkVSX1NJ
WkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdf
TUFYLAoKICAgIF9TQ19DSElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9V
UFNfTUFYLAoKICAgIF9TQ19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0Nf
VFpOQU1FX01BWCwKCiAgICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAg
ICBfU0NfUkVBTFRJTUVfU0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAg
ICBfU0NfVElNRVJTLAoKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJ
WkVEX0lPLAoKICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9T
Q19NQVBQRURfRklMRVMsCgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0Us
CgogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgog
ICAgX1NDX1NFTUFQSE9SRVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBf
U0NfQUlPX0xJU1RJT19NQVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RF
TFRBX01BWCwKCiAgICBfU0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoK
ICAgIF9TQ19NUV9QUklPX01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUs
CgoKICAgIF9TQ19SVFNJR19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NF
TV9WQUxVRV9NQVgsCgogICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoK
CgoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNf
U0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNf
TUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgog
ICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1Nf
TkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9T
Q18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAg
IF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAg
X1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwK
CiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9T
Q19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1ND
X1BJSV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBf
U0NfUElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lf
TSwKCiAgICBfU0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVB
RF9TQUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VU
UFdfUl9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1F
X01BWCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhS
RUFEX0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURf
VEhSRUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhS
RUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywK
CiAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVD
VCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNf
Q09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAg
ICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01B
WCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoK
ICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5f
RU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAg
IF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoK
ICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9C
SVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01B
WCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklU
LAoKICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFY
LAoKICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9N
QVgsCgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRf
TUFYLAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05M
X0FSR01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9T
Q19OTF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAg
IF9TQ19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBf
U0NfWEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1ND
X1hPUEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JF
QUxUSU1FX1RIUkVBRFMsCgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVS
UywKCiAgICBfU0NfQkFTRSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFO
R19TVVBQT1JUX1IsCgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwK
CiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVW
SUNFX1NQRUNJRklDLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdN
VCwKCiAgICBfU0NfRklGTywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVT
LAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19N
T05PVE9OSUNfQ0xPQ0ssCgogICAgX1NDX01VTFRJUExFX1BST0NFU1MsCgogICAgX1NDX1NJTkdM
RV9QUk9DRVNTLAoKICAgIF9TQ19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xP
Q0tTLAoKICAgIF9TQ19TUElOX0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VY
X1ZFUlNJT04sCgogICAgX1NDX1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFX
TiwKCiAgICBfU0NfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VS
VkVSLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9S
LAoKICAgIF9TQ19USU1FT1VUUywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAg
X1NDX1VTRVJfR1JPVVBTLAoKICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywK
CiAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9T
Q18yX1BCU19NRVNTQUdFLAoKICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUCwK
CiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVAoKICB9OwoKCgoKCmVu
dW0KICB7CiAgICBfQ1NfUEFUSAoKCgoKICAgICwKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwK
CiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElO
VEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgog
ICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUwoKCgoKICAgICwKICAg
IF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAsCgogICAgX0NTX1hCUzVfSUxQMzJf
T0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSUJTLAoKICAgIF9DU19Y
QlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfQ0ZM
QUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0lM
UDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgog
ICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9M
REZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfWEJTNV9MUDY0
X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAg
IF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJ
R19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MKCgogIH07CiMgNTAx
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAo
X19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGludCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAiL3Vzci9p
bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3Bp
ZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9f
cGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu
dCBzZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MwpleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRf
dCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRfdCBnZXR1
aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIHRocm93
ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9f
Z2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3VwcyAo
aW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ3Jv
dXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXR1
aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAoX191
aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0
ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lkIChf
X2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3Qg
X19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGVnaWQg
KF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAoX19j
b25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19w
YXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUp
IHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2dldG9wdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiAi
QyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsK
IyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0
ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNsdWRl
L2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAq
X19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvZ2V0
b3B0LmgiIDMKfQojIDcyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgoKCmV4dGVy
biBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlkIChsb25nIGludCBfX2lk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgKGNoYXIgKl9fbmFtZSwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZo
YW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIg
Kl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hv
cnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGVuZHVzZXJz
aGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBkYWVtb24gKGludCBfX25vY2hkaXIsIGludCBfX25vY2xv
c2UpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3Bh
dGgpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3By
b21wdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc3luYyAoaW50IF9fZmQpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzeW5jICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUg
KHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp
bnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJv
dyAoKTsKIyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRl
NjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJv
dyAoKTsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0
ZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGdldGR0YWJsZXNpemUgKHZvaWQpIHRocm93ICgpOwojIDg2NiAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzCmV4dGVybiBpbnQgYnJrICh2b2lkICpfX2FkZHIpIHRocm93ICgpOwoKCgoKCmV4
dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSB0aHJvdyAoKTsKIyA4ODcgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19z
eXNubywgLi4uKSB0aHJvdyAoKTsKIyA5MDcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl
cm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90IF9fbGVuKSB0aHJvdyAo
KTsKIyA5MTcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGlu
dCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTM4ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXks
IF9fY29uc3QgY2hhciAqX19zYWx0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAo
Y2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQg
c3dhYiAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBf
X3RvLAogICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVk
ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv
aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0
aHJvdyAoKTsKCgp9CiMgMjQgIkZJVFMuY3h4IiAyCgoKCgoKCiMgMSAiVGFibGUuaCIgMQojIDMw
ICJUYWJsZS5oIgojIDEgImNvbmZpZy5oIiAxCiMgMzEgIlRhYmxlLmgiIDIKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL3NzdHJlYW0iIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZysrLXYz
L3NzdHJlYW0iIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NzdHJlYW0uaCIg
MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3N0cmVhbS5oIiAzCgojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIg
MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAx
IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19k
ZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5n
ZndkLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3
ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47
CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKICB0eXBlZGVm
IGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQxICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAz
CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2luY2x1
ZGUvZysrLXYzL2NzdGRpbyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3
ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVm
LmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZf
dDsKICB1c2luZyA6OnNpemVfdDsKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRpby5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8u
aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMzcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNDUgIi91c3IvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRl
ZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg
X19GSUxFOwojIDczICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwoj
IDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDMxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07
CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3Qg
X19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7
CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
NyAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMK
IyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYu
aCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgpl
bnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIs
CiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExf
T1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5Q
VVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJS
T1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdO
T1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVf
dCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5
cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIg
Kik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1
Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7
CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2Nv
bnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVj
dCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7
CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25z
dCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1l
OwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0
X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9f
bWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVl
ZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9p
ZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNo
YXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2Zs
YWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91
c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgog
IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0
IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAg
Kl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh
IFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5
cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAg
ICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg
X19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0df
aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGlu
X3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMK
IyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3Qg
X0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lP
X2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u
ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkxICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2Rl
Y3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVj
dnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRf
ZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq
X19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq
KiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191
bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwog
IGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29k
ZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz
dGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgq
X19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9f
Y29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAo
Kl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3Qg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lP
X2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0
Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAg
d2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJf
dCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpf
SU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVm
X2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jh
c2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwog
IF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2
dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92
dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBf
SU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7
CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBf
SU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsK
CiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAq
X0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBf
SU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZf
dCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQg
Y2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190
ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZz
ZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBfSU9fd2lkZV9k
YXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBz
aXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19G
SUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9f
d3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9f
aW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoK
CnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYg
X19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9m
biBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3Nl
ZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlv
bl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0
ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3Nl
Owp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5j
dGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoK
CmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19j
ZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4g
IkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJm
bG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxv
dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50
X3QpIHRocm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf
SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp
bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq
X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
IyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J
T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhy
b3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQg
Kiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19G
SUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9J
T19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4g
dm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf
dCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRl
cm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoj
IDUwMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9J
T19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3
aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBf
YXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NCAiL3Vzci9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRlZiBf
X2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODggIi91c3IvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190
IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM3ICIvdXNyL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzggIi91c3IvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJu
IEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoj
IDE1MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBj
aGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhy
b3cgKCk7CiMgMTY4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OCAiL3Vzci9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg
KnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNs
b3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzIgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZy
ZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21h
Z2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAo
dm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVm
bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3Np
emVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxF
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0
KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFz
cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpl
eHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpl
eHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0
ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy
biBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg
Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChG
SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGlu
dCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xp
c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2Nh
bmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZn
ZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZw
dXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2Nr
ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFy
X3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGlu
dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAo
KTsKIyA0MzYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJp
Y3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl
c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3Qg
Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBz
aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxv
Y2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9f
cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CiMgNDk5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19v
ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3Mp
IHRocm93ICgpOwojIDUzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu
My9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0s
IF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRf
dCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2
NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3Mp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19j
b25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlz
dFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0
IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21t
YW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3Nl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNo
YXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRm
IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0
IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwojIDY0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
aW8uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7
CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwog
IHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNp
bmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6
OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJl
YWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7
CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAg
dXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcg
OjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0
Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7
CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1
c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVz
aW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2lu
ZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMg
MTQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBf
X2dudV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5n
IDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9j
eHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4
Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzIgIi91c3IvaW5j
bHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0
ZGRlZiIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2No
ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAg
ICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3Iv
aW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEg
MwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQog
IHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJu
IGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFj
aywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsK
Cgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4
dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0
cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBf
X3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVk
dWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQg
X19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21p
biAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9p
bnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoK
fQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgpleHRlcm4gIkMi
IHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMiAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf
X2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGlt
ZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19j
bG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg
MwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3Vy
OwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dk
YXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2Zm
OwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwog
IHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBp
dF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1l
X3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0
aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0g
Kl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3Rw
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUg
KF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g
KmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK
CgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJp
Y3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0
IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0
IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3Ig
KF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGlt
ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
X190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGlt
ZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAo
dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0
aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0
aHJvdyAoKTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1l
Z20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwg
KHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3ll
YXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50
IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUg
KGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qg
c3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2Nr
X25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpf
X2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lk
X3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAq
X19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVz
dHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGlt
ZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGlt
ZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3Ry
dWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1l
cl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVj
dCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9f
cmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3Iv
aW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAz
MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5o
IiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBs
b25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNp
Z3NldF90OwojIDM3MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9pbml0c3Bpbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoK
ZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRI
UkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51
bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9
OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VT
UwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9S
RUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVU
RVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRF
WF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVD
VVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJS
T1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1B
TAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9O
UAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NF
U1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAs
CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVG
RVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0g
UFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv
dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF
QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg
UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK
fTsKIyAxNjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2Ny
ZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAo
KTsKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190
aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0
dmFsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl
dHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90
IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
ZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBh
cmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy
LCBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgaW50IF9fc2NvcGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBf
X2d1YXJkc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
c2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZv
aWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpf
X3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0
YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fc3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0
cl9ucCAocHRocmVhZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xp
Y3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2dldGNvbmN1cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0
Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X3RpbWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0
ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0
aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRw
c2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19j
b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpf
X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBw
dGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25kX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ry
b3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9f
cmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211
dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3Ry
aWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0
IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3
bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
dGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxv
Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3
bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJl
YWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRo
cmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9u
cCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
cHJlZikgdGhyb3cgKCk7CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBp
bnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19w
c2hhcmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kg
KHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlu
bG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJf
aW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVk
IGludCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ry
b3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBw
dGhyZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFk
X2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFy
cmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9z
ZXRwc2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0
ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmll
cikgdGhyb3cgKCk7CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQg
cHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlf
dCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9f
cG9pbnRlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0
aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250
cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9p
ZCkpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGlu
dCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJl
YWRfc2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYx
MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJl
YWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3Bf
cmVzdG9yZSAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3Ro
cmVhZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19j
bG9ja19pZCkgdGhyb3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5o
IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBw
dGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykg
dGhyb3cgKCk7CiMgNjU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9f
cHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJl
bnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2
b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFk
c19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5
X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNl
X3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJh
Z21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3By
YWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVj
aWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVh
ZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFrIHB0
aHJlYWRfbXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sKIyA4
MCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs
dC5oIiAzCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhy
ZWFkX2NyZWF0ZTsKCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkK
ewogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDM4ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGlj
IGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQg
KCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJu
IHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0
aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXks
IHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtl
eSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhy
ZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVh
ZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu
bGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICBy
ZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpf
X2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRo
cmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3Nl
dHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1
cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApf
X2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f
Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4
KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211
dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRf
YWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91
bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZl
X3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBz
dHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJk
aWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5
cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKCiAgdHlwZWRlZiBGSUxFIF9fY19m
aWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9f
aW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw
MDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQg
PSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg
PSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAg
fCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAw
MDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9h
dGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g
MHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0MCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
d2NoYXIuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u
ZmlnLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5o
IiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3RpbWUuaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7
CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVz
aW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcg
OjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6
OnN0cmZ0aW1lOwp9CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgi
IDIgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19t
YnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0
IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRo
cm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChf
X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2Fz
ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBz
dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBp
bnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAq
X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChf
X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No
YXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
X193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90
ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFy
X3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu
IHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3Nj
aHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9f
Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4g
KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
cGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90
ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpf
X25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0
IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVs
aW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25s
ZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAo
X19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdj
aGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFy
X3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj
aGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXpl
X3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAg
ICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0
ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0
cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyOTggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVy
biBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBf
X2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93
Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVf
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3Qg
X19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
d2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3
Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg
aW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3
Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSkgdGhyb3cgKCk7CiMgNDA3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDQwOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoK
CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3Vs
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2Nz
dG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl
IF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl
X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50
ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193
Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTI5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRl
cm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19z
cmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0
LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dw
cmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3Ms
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5m
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo
KSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUg
Kl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSk7CgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hh
cl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90
IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFy
X3QgX193Yyk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVh
bSk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSk7
CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpOwoKCmV4dGVybiB3aW50X3Qg
ZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGZwdXR3
Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIHdp
bnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0
ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKTsKCgoKZXh0ZXJuIHdj
aGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApOwojIDY4MSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKfQojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hh
ci5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMiAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Ondp
bnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3
czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwog
IHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAg
dXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAg
dXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAg
dXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsK
ICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2Fu
ZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndw
cmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondj
c2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3Nj
cHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3Ns
ZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25j
cHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0
b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7
CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwog
IHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsK
ICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoK
ICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9f
cCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf
dCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoK
ICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJy
ayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3
Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJf
dCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3Ap
LCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIo
d2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXpl
X3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19w
KSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6
d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6
d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDEgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFt
b2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAg
X19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAg
IHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoK
CiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkp
IHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19z
dGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAg
ICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZw
b3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBf
X29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAg
ICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRo
aXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9Cgog
ICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAg
ICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBf
X3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3Bv
cykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAg
Ym9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01f
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01f
cG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAg
dHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0
ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
c2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg
MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nm
d2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lv
czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog
ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j
ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmlu
Z3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBi
YXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVh
bWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJh
c2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+
IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0
eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVm
PGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
ZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lv
czsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3
aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsK
ICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJl
YW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4g
d29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0K
IyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3Mg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2
aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdo
YXQoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1Ymxp
YyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9
CiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2
b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVk
X2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5h
dGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVu
ZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5NSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRp
b24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyA0MSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz
dHJpbmcuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAz
CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
Km1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpf
X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lk
ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpf
X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK
ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMK
IyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19s
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVf
dCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9f
Y29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRl
cm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJj
c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25z
dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0
IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs
aW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRy
KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9p
ZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVu
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19u
ZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBz
aXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIg
KnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJy
b3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rl
c3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpf
X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcg
aW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9f
IGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg
X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3As
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJm
cnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9p
ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1l
IChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCn0KIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5n
LmgiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNp
bmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5n
IDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6
OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6
OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjpt
ZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjpt
ZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVf
dCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9f
YywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNo
YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0
PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGlu
ZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVy
biBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7
IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9f
czEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25z
dCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFy
KgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVp
bHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0
MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwog
ICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYg
b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0
aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNv
bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy
biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwg
X19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEo
X19zMVtfX2ldLCBfX3MyW19faV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBf
X3MyW19faV0pID8gLTEgOiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0
aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19f
cDsKICAgICAgICByZXR1cm4gKF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s
IGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5
cGUqIF9fcCA9IF9fczsgc2l6ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAg
aWYgKCpfX3AgPT0gX19hKSByZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikg
bWVtbW92ZShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0
YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5
cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHko
X19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hh
cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw
ZSBfX2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBf
X3MgKyBfX247ICsrX19wKQogICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0
dXJuIF9fczsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5
cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0K
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUm
IF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
ZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQog
ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg
ICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJl
dHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9
OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAg
ICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9m
Zl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGlj
IHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2My
KQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25z
dCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4g
X19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9f
czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVt
Y21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3Ro
KGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9f
cywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAg
IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy
X3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJf
dHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShf
X3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWdu
KGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAg
c3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0
IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19j
MSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVv
ZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3Ry
YWl0czx3Y2hhcl90PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5
cGU7CiAgICAgIHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0
YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg
ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs
IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoK
ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAg
ICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBl
KgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFy
X3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3Mx
LCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf
dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl
dHVybiB3bWVtY3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkK
ICAgICAgeyByZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4g
Y2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlw
ZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAg
c3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0
IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0
YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
KDB4ZmZmZmZmZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNv
bnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkp
ID8gMCA6IF9fYzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFy
VCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01f
YyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19h
KSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgi
IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAx
IDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEg
MwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9j
YWxlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0KIyA0
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4z
L2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDE0NCAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp
bS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3
ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUv
Yml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9p
bmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl
bl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRlL2Jp
dHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAx
MjYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p
bmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3Ry
aW5nLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAz
CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pdGVyYXRvci5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy
YXRvci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2MrK2NvbmZpZy5oIiAxIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy
YXRvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzCiMgNjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNjMgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY5ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNzEgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAyIDMKCgpuYW1lc3BhY2Ug
c3RkCnsKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0
b3JfdGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRl
cmF0b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
Zm9yd2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5
cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0
cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2Fy
ZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq
IHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
Q2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAg
ICAgY2xhc3MgX1BvaW50ZXIgPSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0
IGl0ZXJhdG9yIHsKICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMg
ewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50
ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0
eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsK
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiBy
ZWZlcmVuY2U7Cn07CiMgMTcyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfdHlwZXMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7
CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29u
c3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxp
bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRl
cmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRl
Z29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0
IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1
ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlw
ZShfX2kpOyB9Cgp9CiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3Iu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1
bmNzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfZnVuY3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr
LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz
CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgi
IDIgMwojIDcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg
dm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9f
Zmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJl
dHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl
KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNl
CiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9t
QWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0
YW5jZSBfX24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kp
KTsKfQoKfQojIDY1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjMg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRv
ciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVm
IF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5l
ciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBl
JiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
IG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+
CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBj
b250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAg
dHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
dm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30K
ICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5
cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+
cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZy
b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGlu
dCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxp
bmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250
YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRv
ciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
ZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBp
bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVy
Ojp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRl
ciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQog
IGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0
aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgpp
bmxpbmUKaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9f
eCwgX0l0ZXJhdG9yIF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0
ZXIoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz
cyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
ID0gcHRyZGlmZl90PgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5
cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IsIF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJl
bmNlLCBfRGlzdGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVm
IF9SZWZlcmVuY2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Io
KSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3Bl
cmF0b3IqKCkgY29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJl
bnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAt
LWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7
CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg
X195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg
X195KQp7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KIyAyMjIgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFz
cyByZXZlcnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UK
ICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICBy
ZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9y
X3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9T
ZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194
KQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgewog
ICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAg
cG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAg
X1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
LS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsK
ICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp
bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4g
X190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg
ewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3Ir
PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0o
ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0
IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8
IF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Cm9w
ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9f
bik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hh
ciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBf
RGlzdCA9IHB0cmRpZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlw
ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNv
bnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwoKICBpc3Ry
ZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQogIGlzdHJlYW1f
aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgp
OyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQog
IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Cgog
IGlzdHJlYW1faXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlz
dHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf
X3RtcDsKICB9CgogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBj
b25zdAogICAgeyByZXR1cm4gKF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9z
dHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7IH0KCnByaXZhdGU6CiAgaXN0cmVhbV90eXBlKiBfTV9z
dHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fb2s7CgogIHZvaWQgX01fcmVhZCgpIHsK
ICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAg
IGlmIChfTV9vaykgewogICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICBfTV9vayA9
ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJv
b2wKb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz
LCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No
YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiBfX3guX01fZXF1YWwoX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFz
cyBfRGlzdD4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9U
cCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFt
X2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiAh
X194Ll9NX2VxdWFsKF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xh
c3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpj
bGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBl
ZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
KSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihv
c3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICA6IF9NX3N0cmVhbSgmX19z
KSwgX01fc3RyaW5nKF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShj
b25zdCBfVHAmIF9fdmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChf
TV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBv
c3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQpw
cml2YXRlOgogIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIGNvbnN0IF9DaGFyVCogX01fc3Ry
aW5nOwp9OwojIDQ0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAz
CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KY2xhc3Mg
X19ub3JtYWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAg
ICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0ZWQ6CiAg
X0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5cGVkZWYg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIgcG9pbnRl
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7
CgogIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAg
ZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3Vy
cmVudChfX2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5lIF9fbm9y
bWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYg
X19pKQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNlCiAgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgogIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVyYXRvcl90
eXBlJgogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5v
cm1hbF9pdGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJh
dG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRv
cl90eXBlCiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1
cnJlbnQtLSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90
eXBlJiBfX24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5vcm1hbF9p
dGVyYXRvcl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAg
eyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90
eXBlCiAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0
dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1hbF9pdGVy
YXRvcl90eXBlJgogIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBf
TV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBl
CiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJu
IF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogIGRpZmZlcmVuY2VfdHlw
ZQogIG9wZXJhdG9yLShjb25zdCBub3JtYWxfaXRlcmF0b3JfdHlwZSYgX19pKSBjb25zdAogIHsg
cmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQoKICBjb25zdCBfSXRlcmF0b3Im
CiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KfTsKCgoKdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkg
PT0gX19yaHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9
KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CgoKCnRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9f
cmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0
ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMg
PCBfX3Jocyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4Kb3Bl
cmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46
OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCnsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KCn0KIyA2NiAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
bWVtb3J5LmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5o
IiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm
aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy
IHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihj
b25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikg
e30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8
X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp
CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z
ZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3ku
Zmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu
ICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194
KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDEzOSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGlu
ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVy
biBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA2NyAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVf
dHJhaXRzLmgiIDIgMwojIDg2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMu
aCIgMwp0ZW1wbGF0ZSA8Ym9vbCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsKdHlwZWRlZiBfQm9v
bDx0cnVlPiBfX3RydWVfdHlwZTsKdHlwZWRlZiBfQm9vbDxmYWxzZT4gX19mYWxzZV90eXBlOwoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEwICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxz
aWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBz
aG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBs
b25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190
eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBj
aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3Qg
X0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07
CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0
ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDcyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0
cy5oIiAxIDMKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz
NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIv
dXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFu
LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMzcgIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAx
IDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAg
ICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAg
ICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9f
d19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dh
aXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBf
X3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAg
IHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQg
cmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7
CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dl
dF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9f
bnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0
cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0
IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg
KCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo
cm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRl
cm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRv
ZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dy
b3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0
b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgp
OwojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25n
IGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIg
Kl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf
Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1
X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5
cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5
cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CiMgNjgg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoK
CnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRfdDsKIyAxMTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90
OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKCgoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7
CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE4NCAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykp
KTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dv
cmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjMg
Ii91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3QgdGlt
ZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsK
ICB9OwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBsb25n
IGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFz
ayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRf
c2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50
IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2
YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAg
ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoK
Cn0KIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Js
a2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0
eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1MSAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Js
a2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRf
dDsKCgp9CiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9u
ZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNp
Z25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0
ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK
ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0
YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl
cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21f
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0
YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jl
c3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZv
aWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBp
bnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpy
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g
dm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWdu
ZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRo
cm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3
XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAo
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
ZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm
ZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg
c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUg
KHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRy
KSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNy
L2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2lu
Y2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9j
YSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0OCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21l
bWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6
ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4g
dm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p
ZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBl
eGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAo
X19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChj
aGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjQg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3Rl
bXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1w
bGF0ZSkgdGhyb3cgKCk7CiMgNjQxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGlu
dCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjczICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhy
b3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAq
LCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5f
dDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25z
dCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0
ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAg
ICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGlu
dCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBp
bnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK
ZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGlu
dCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcg
bG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u
ZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0
ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0
X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24s
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4p
IHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hh
ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMg
ODA5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIg
KipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29u
c3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2Nv
bnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0
IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBf
X2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJv
dyAoKTsKCgoKCgp9CiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o
IiAyIDMKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcg
OjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7
CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNp
bmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJl
ZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVz
aW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2lu
ZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJl
YWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRv
bDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21i
czsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0
dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9f
aikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEyNSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjps
bGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBs
b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25n
IGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1f
X3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9f
ZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAl
IF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBf
X24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7
IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1
c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1
c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxk
aXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwog
IHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcg
X19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251
X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9j
eHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDc0ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA3NSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMSAz
CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9jc3RkZGVmIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12
My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFk
X2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0
aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1
Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0
eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5k
bGVyKG5ld19oYW5kbGVyKTsKfQojIDc2ICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMwp2b2lk
ICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQg
Km9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lk
IG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs
IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9p
ZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQg
Km9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4g
cGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpw
bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQoKfQojIDc2ICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA3OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfdHlwZXMuaCIgMSAzCiMgNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDEgMwojIDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MSAzCiMgODEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgODIgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs
IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G
b3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9f
YjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz
cyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2Es
IF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1
ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9U
cCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwog
IF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3Qg
X1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg
KF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYg
KF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1Rw
JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChf
X2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxNjYgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9f
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIK
X19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJz
dDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9f
Zmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1
bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu
bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3Qs
IF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAg
cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg
ICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVy
KF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1
dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz
ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
OwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jl
c3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
cmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+
OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICot
LV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3Rh
bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1
bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg
ICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0
ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg
IF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dh
cmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRj
aDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1Rw
KiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3Qg
cHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAt
IF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQg
LSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1Rw
KiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1
bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190
cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2Jh
Y2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFs
X2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl
KSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNr
d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv
cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1
dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1h
bCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBf
QkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9y
bWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5l
IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz
dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9y
bWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291
bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1
dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1
dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxf
UkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf
T3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9u
KF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQp
IHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFp
cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1Np
emUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1
cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVl
OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciog
X19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0
KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChz
aWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg
bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0
IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19s
YXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2Zp
cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24o
dW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz
dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsK
ICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19m
aXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEs
IF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19m
aXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJz
dDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3Qx
OwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0
ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEs
IGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09
ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYg
KCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNl
OwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg
IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19m
aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsr
X19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICBy
ZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19m
aXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25z
dCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBf
X2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8
IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hh
ciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7
CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFy
ZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJu
IC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICAr
K19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp
IHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJl
dHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0
cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9f
bGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo
X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1
bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9f
bGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
X19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j
LmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93
X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVu
dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7
Cn0KIyA1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNTkgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmlu
Zy5oIiAxIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2Fzc2VydC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwoj
IDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQg
X19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpf
X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9f
Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vy
cm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpf
X2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgMzggIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGhyZWFkcy5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJl
YWRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv
Z3Roci5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDIgMwojIDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKIyA5NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDMKc3RydWN0IF9SZWZjb3VudF9CYXNlCnsKCgoKCiAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoK
CiAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgoKCiAgX19ndGhyZWFkX211dGV4X3Qg
X01fcmVmX2NvdW50X2xvY2s7CiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9j
b3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAw
LCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9s
b2NrID0gX190bXA7CgoKCgoKICAgIH0KIyAxNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCiAgdm9pZCBfTV9pbmNyKCkgewogICAgX19ndGhyZWFkX211dGV4X2xv
Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICsrX01fcmVmX2NvdW50OwogICAgX19ndGhyZWFk
X211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogIH0KICBfUkNfdCBfTV9kZWNyKCkg
ewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIHZvbGF0
aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICByZXR1cm4gX190bXA7CiAgfQojIDE5MiAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyAzMTMgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgpz
dHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsKICBlbnVtIHsgX19sb3dfbWF4ID0gMzAsIF9faGlnaF9t
YXggPSAxMDAwIH07CgoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7CiAgc3RhdGljIHVuc2lnbmVk
IF9fbGFzdDsKfTsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBfU1RMX211dGV4X3Nw
aW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sb3dfbWF4OwoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+Ojpf
X2xhc3QgPSAwOwojIDM0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDMKc3RydWN0IF9TVExfbXV0ZXhfbG9jawp7CgoKCgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9N
X2xvY2s7CiAgdm9pZCBfTV9pbml0aWFsaXplKCkgewojIDM3MSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBfTV9hY3F1aXJlX2xvY2soKSB7CgoK
CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgfQogIHZvaWQgX01fcmVsZWFz
ZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAgfQoj
IDQ4MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyA1MjEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX2F1
dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBfU1RMX2F1dG9fbG9jayhf
U1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5f
TV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxl
YXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f
bG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7Cn07Cgp9CiMg
NjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgOTcgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVt
cGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh
dGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQq
IF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9j
X2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYg
KDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJu
IF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQg
PSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0
ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAg
fQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSko
KQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsK
ICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsK
ICB9Cgp9OwoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6
X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9t
YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgw
ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAg
ICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9j
KF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0
ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9f
bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7
CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
OwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2Jh
ZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9f
cmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o
X19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1h
bGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1w
bGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19u
ICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAg
eyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAh
PSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAg
IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9j
YXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
PgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoK
CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNo
YXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0
cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg
KGludCkgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBf
U19leHRyYTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBf
X24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyMTksIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50
KSBfU19leHRyYSk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp
emVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0g
KGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz
aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiLCAyMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19y
ZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRf
c3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3
X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNzAg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh
dGU6CgoKICBlbnVtIHtfQUxJR04gPSA4fTsKICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICBl
bnVtIHtfTkZSRUVMSVNUUyA9IDE2fTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6
ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x
KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogIHVuaW9uIF9PYmogewogICAgICAgIHVu
aW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb
MV07CiAgfTsKCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtdOwoKICBzdGF0
aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0
dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsK
ICB9CgoKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAgc3RhdGljIGNo
YXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKICBzdGF0
aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3Rh
dGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nf
bm9kZV9hbGxvY2F0b3JfbG9jazsKCgoKCgogICAgY2xhc3MgX0xvY2s7CiAgICBmcmllbmQgY2xh
c3MgX0xvY2s7CiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBf
TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJl
X2xvY2soKTsgfTsgfQogICAgICAgICAgICB+X0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25v
ZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH07IH0KICAgIH07CgpwdWJsaWM6
CgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jl
dCA9IDA7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgX19yZXQg
PSBtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX09i
aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoK
ICAgICAgX09iaiogX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgIGlmIChfX3Jlc3Vs
dCA9PSAwKQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAg
ICBlbHNlIHsKICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xp
c3RfbGluazsKICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogICAgcmV0
dXJuIF9fcmV0OwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90IF9fbikKICB7CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgbWFs
bG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgIGVsc2UgewogICAgICBfT2JqKiB2
b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19uKTsKICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAg
IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICAgIH0KICB9
CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBz
aXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0
cnVlLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+
IHNpbmdsZV9jbGllbnRfYWxsb2M7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9ieXRl
cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2Zy
ZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRl
cykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9m
cmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxz
ZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMgPSAoaW50KShf
X2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19u
b2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRf
ZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVs
c2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAyICogX190b3Rh
bF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgaWYgKF9f
Ynl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s
aXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3Rf
aW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkg
LT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0KICAgICAgICBfU19z
dGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgaWYgKDAg
PT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICBf
T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoK
ICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgICAgX19pIDw9IChz
aXplX3QpIF9NQVhfQllURVM7CiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3QpIF9BTElH
TikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0
YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7
CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAg
ICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAg
ICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAg
ICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9f
biwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2Jq
KiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2Jq
OwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAg
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0
ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0g
MTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg
IF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBp
ZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f
ZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i
ajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxi
b29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhy
ZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6
KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9f
b2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhf
QllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAg
ICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0
dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9z
eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHko
X19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7
CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0g
eyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgoKCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiMgNTU1ICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2Nh
dG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9j
YXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+
JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVz
cyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBh
ZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBf
VHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJu
IF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl
b2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0
ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRo
cm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv
bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192
YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0
ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy
biBmYWxzZTsKfQojIDYzMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsK
ICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiBy
ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm
IF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7
CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19h
bGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f
YSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxv
Yykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9j
YXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9j
KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoK
ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog
IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g
MCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3Vu
ZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsK
ICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7
IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9
CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf
dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u
c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv
aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj
bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f
X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl
cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUg
PGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1
cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDc2MSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6
OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4K
ewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBz
aW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8
X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5z
dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAg
ICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190
cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19h
bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwK
ICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0
b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19h
bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCn0KIyA1MSAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMg
NjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CiMgNzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0Lmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0
KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9f
dmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9U
MSogX19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+
X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJv
eV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwg
X19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0
ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
X3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2
aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFs
X2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp
bmUgdm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUg
dm9pZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwg
bG9uZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUg
dm9pZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveSh3
Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAg
X0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUg
dm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfRGVz
dHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5s
aW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoKfQojIDUyICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNTMgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpw
YWlyPF9UcCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19s
ZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihf
VHApKSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19s
ZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICog
c2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCos
IHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4g
cGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1Rw
KikgMCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICBy
ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAg
ZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1Rw
PgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdp
bmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9N
X2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9N
X2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBz
aXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg
ICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9N
X2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsK
ICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVy
KGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIo
Y29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24o
X01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29u
c3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N
X2J1ZmZlcjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9Cgog
IF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAg
ICB0cnkgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4g
MCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAg
ICB9CiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9s
ZW4gPSAwOyB0aHJvdzsgfTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ry
b3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwog
IH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVy
Jikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAg
ICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1
YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3Jh
cnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJz
dCwgX19sYXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyA1NCAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF91bmluaXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpf
X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25z
dHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCgu
Li4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90
eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlh
bGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9f
cmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAo
X19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHko
Y29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0
LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3Vs
dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2Fy
ZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19j
b3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2Zp
cnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg
X19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhy
b3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3
YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykg
ewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVy
biBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAg
IF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j
b3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0Zv
cndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlh
bGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFs
aXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsK
ICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBf
X2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAg
ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmls
bChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5p
bml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwg
X19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRl
cgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5
cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9f
dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUp
CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9f
biA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAg
ICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1
cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFs
aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf
X3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19Q
T0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2Zp
cnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxp
emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
eCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMgMjYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191
bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsg
X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3
YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwg
X0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gp
OwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhy
b3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5w
dXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21p
ZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0
cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAg
Y2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOyB0aHJvdzsgfTsKfQoKfQoj
IDU1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgNjMgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xh
c3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBf
TV9pdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gp
IDogX01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsg
cmV0dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBf
VHAmIF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv
ciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRv
cisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1Rw
PiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsK
Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7
CiAgIF9UcDEqIF9NX3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19w
KSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgog
IF9UcCogX01fcHRyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhw
bGljaXQgYXV0b19wdHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30KICBh
dXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0
aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0
b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRvX3B0ciYg
b3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJl
bGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCiAgfmF1dG9fcHRyKCkgeyBkZWxl
dGUgX01fcHRyOyB9CgogIF9UcCYgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1
cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7CiAgICBy
ZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJu
IF9NX3B0cjsKICB9CiAgX1RwKiByZWxlYXNlKCkgdGhyb3coKSB7CiAgICBfVHAqIF9fdG1wID0g
X01fcHRyOwogICAgX01fcHRyID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNl
dChfVHAqIF9fcCA9IDApIHRocm93KCkgewogICAgaWYgKF9fcCAhPSBfTV9wdHIpIHsKICAgICAg
ZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19wOwogICAgfQogIH0KCgoKCgpwdWJsaWM6
CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRy
KF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1Rw
PiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7
CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBh
dXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1Rw
Pih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1
dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+
cmVsZWFzZSgpKTsgfQp9OwoKfQojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmluZy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIg
MSAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQ2ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy12My9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNf
d29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNl
ZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBp
bnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBf
X3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAg
OiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwg
Im0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVy
biBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNl
ZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192
YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAg
ICAgICAgICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnki
KTsKfQoKc3RhdGljIGlubGluZSBjaGFyCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19j
b21wYXJlX2FuZF9zd2FwICh2b2xhdGlsZSBsb25nKiBfX3AsIGxvbmcgX19vbGR2YWwsIGxvbmcg
X19uZXd2YWwpCnsKICBjaGFyIF9fcmV0OwogIGxvbmcgX19yZWFkdmFsOwoKICBfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoImxvY2s7IGNtcHhjaGdsICUzLCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiPXEiIChfX3JldCksICI9bSIgKCpfX3ApLCAiPWEiIChfX3JlYWR2YWwp
CiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChfX25ld3ZhbCksICJtIiAoKl9fcCksICJh
IiAoX19vbGR2YWwpKTsKICByZXR1cm4gX19yZXQ7Cn0KIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3Jt
YWxfaXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRl
ZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0
ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy
YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsK
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6
b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3Np
emU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6
ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAg
X0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19s
ZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAg
ICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9N
X3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkK
ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01f
c2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9D
aGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAg
ICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVm
ZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9B
bGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgeyByZXR1cm4g
KCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikgPwogICAgICAgICAgICBf
TV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0KCgogICAgICAgIHN0YXRpYyBfUmVw
KgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lk
CiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAg
ICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N
X2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAg
IF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZf
TV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAg
fQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90
eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3Ry
aW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xv
cChzaXplX3QsIHNpemVfdCk7CgogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIg
OiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAg
ICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAg
cHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAg
ICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBz
aXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSld
OwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
ZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19w
KQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAq
CiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8
X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2li
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0
aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAg
ICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQo
KTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAg
ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAg
IHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7
CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5z
aXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l
d29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAg
IHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9y
IF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9
IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f
cCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh
cnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1Nf
Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRp
YyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9f
azEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEu
YmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlf
Y2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRy
YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMg
dm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEs
IGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs
IF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAg
ICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVw
KCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBf
c3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3Ry
aW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf
X2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAg
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNf
c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBi
YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Eg
PSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19l
bmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoK
ICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+
Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0o
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3Mp
IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoK
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsK
ICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3Rf
aXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRv
cihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAg
ICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMt
PnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7
IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu
ZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAg
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6
CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5f
TV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICBy
ZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6
ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2Nh
cGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9
IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUo
KSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5z
aXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChz
aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0K
CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAg
ewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAg
ICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhy
b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2Rh
dGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9f
bikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAg
ICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMt
PmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShj
b25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5h
cHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFw
cGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVu
ZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl
bmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0
aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog
ICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxh
Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihf
X3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9N
X2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBs
YWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZv
aWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK
ICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsg
dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAg
ICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9N
X2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+
cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAg
ICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv
cywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVy
YXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f
cCwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D
aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9f
cCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNp
emVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg
ICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g
PSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w
b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
X2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bv
c2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBf
X3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9
CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdp
bigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9N
X2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVy
biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9f
cG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90
eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNp
emVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl
Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBf
X3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bvcyks
IF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywg
X19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVf
dHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAg
ICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBf
X3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv
ciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19r
MiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxh
Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0
ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAg
IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJl
dHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
X19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90
eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2Es
IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2Vu
ZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19j
b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7
CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAg
ICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAg
ICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6
ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9N
X2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo
KTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1
cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBf
X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihf
Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBf
X3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywg
X19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBp
bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9f
bGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7
CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj
b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw
ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlw
ZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJl
KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoK
ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoK
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo
KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19z
dHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0No
YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAg
cmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90
eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k
KF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t
cGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19s
aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s
aHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1
cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs
CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
LCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
c3RyKTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDYw
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
YWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1
Zi5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDYzICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fcHVzaF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfRGlzdGFuY2Ug
X19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKewogIF9EaXN0
YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5k
ZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9f
aG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8g
MjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+
CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5j
ZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9f
Zmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAx
KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9p
ZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv
bXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hp
bGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJl
bnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0g
KF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBf
X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
Q29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsCiAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwg
X0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAg
ICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcHVzaF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAog
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hv
bGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7
CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJzdCArIF9f
c2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgIF9f
c2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19z
ZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRD
aGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg
LSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwg
X192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5j
ZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9E
aXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1RwKikKewogIF9fcG9wX2hlYXAo
X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICAgICAgIF9UcCgqKF9fbGFz
dCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9E
aXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1
c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJl
IF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3Rh
bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29u
ZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGls
ZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRD
aGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxk
ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9f
bGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNv
bmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQog
IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3Vs
dCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7
CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFu
Y2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fdmFs
dWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3BvcF9oZWFwKF9fZmly
c3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLAog
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnBvcF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8
IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0
YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2Fk
anVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFy
ZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZApt
YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgX192
YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAg
IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7
CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJz
dCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJl
bnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZAptYWtlX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAg
ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CnZvaWQgc29ydF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwg
X19sYXN0LS0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfQ29tcGFyZT4Kdm9pZApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoK
fQojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVz
cGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21l
ZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICBpZiAoX19hIDwgX19iKQogICAgaWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9f
YjsKICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAg
ICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVs
c2UgaWYgKF9fYiA8IF9fYykKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAm
Cl9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2Ms
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19jb21w
KF9fYSwgX19iKSkKICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwog
ICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UK
ICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJu
IF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNl
CiAgICByZXR1cm4gX19iOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G
dW5jdGlvbj4KX0Z1bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVy
IGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0
ID09IF9fdmFsKSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZp
bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9f
cHJlZCgqX19maXJzdCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRl
ciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3Vu
dAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQg
PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19m
aXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZh
dWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg
ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp
cnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsK
ICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp
cnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl
dHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Rw
PgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmRfaWYoX19maXJz
dCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3
YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewog
ICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19m
aXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFjZW50
X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xh
c3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0g
X19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFz
dDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1NpemU+CnZvaWQgY291bnRfaWYoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg
ICAgICAgICAgICAgX1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsr
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0
dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNv
dW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUg
X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKICBy
ZXR1cm4gX19uOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zv
cndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCgoKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChf
X2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVybiBm
aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogIF9Gb3J3YXJkSXRlcjIgX19w
MSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1
cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIF9f
Zmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog
ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkK
ICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewog
ICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAg
IGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg
fQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVk
PgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQg
X19wcmVkaWNhdGUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBp
ZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJu
IF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgKytfX3RtcDsK
ICBpZiAoX190bXAgPT0gX19sYXN0MikgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsK
ICAgIHJldHVybiBfX2ZpcnN0MTsKICB9CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog
IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f
Zmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0Mikp
CiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0
dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog
ICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxl
IChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytfX3AgPT0gX19s
YXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBf
X2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19maXJzdDE7CiAg
fQogIHJldHVybiBfX2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
SW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK
ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg
ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChf
X2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19f
aTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFz
dCwgX192YWwpOwogICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQ
cmVkPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlf
cHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fY291bnQgPD0gMCkKICAg
IHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgYnJlYWs7
CiAgICAgICsrX19maXJzdDsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9
IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g
IT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICsrX19pOwogICAg
ICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19m
aXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAg
ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgfQog
ICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0Zv
cndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19m
aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGl0ZXJfc3dhcChf
X2ZpcnN0MSwgX19maXJzdDIpOwogIHJldHVybiBfX2ZpcnN0MjsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlvbj4K
X091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl
cmF0aW9uIF9fdW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9v
cCgqX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNs
YXNzIF9CaW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz
dDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpf
X2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29u
c3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f
Zmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4K
dm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFs
dWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAq
X19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1
bHQpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVl
IDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4KX091
dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAm
IF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19m
aXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVy
YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9y
IF9fZ2VuKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0SXRlciBn
ZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dl
bikKewoKCgoKCgogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp
cnN0ID0gX19nZW4oKTsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3Zl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgpfT3V0cHV0SXRlciByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3ByZWQoKl9fZmlyc3Qp
KSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJl
dHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVy
IHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQp
OwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFz
dCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigr
K19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKCiAgX1RwIF9fdmFs
dWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgX192YWx1
ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJu
ICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dF9pdGVyYXRvcl90YWcpCnsKCiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoK
ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
IGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3Mg
X1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLCBfVHAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX192YWx1ZSA9
ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAg
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQog
IHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciBf
X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCnsK
CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5h
cnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
QmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19m
aXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFy
eVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0
ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogIHJldHVybiB1bmlxdWVfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJl
ZCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5h
cnlfcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBf
X3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hp
bGUgKHRydWUpCiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFz
dCkKICAgICAgcmV0dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xh
c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNl
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJz
dCA8IF9fbGFzdCkKICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByZXZlcnNlX2NvcHkoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIC0tX19sYXN0OwogICAgKl9fcmVzdWx0ID0gKl9f
bGFzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19n
Y2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9F
dWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBf
X24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykKewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAo
X19sYXN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBf
X2ZpcnN0MiA9IF9fbWlkZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3Qy
KyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJz
dDI7CiAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3
X21pZGRsZSA9IF9fZmlyc3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2Zp
cnN0MiAhPSBfX2xhc3QpIHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAg
IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAg
ZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwog
IH0KCiAgcmV0dXJuIF9fbmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQog
ICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRs
ZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3Qp
OwoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf
X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fbGFzdDsK
ICB9CiAgZWxzZSB7CiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFu
ZG9tQWNjZXNzSXRlciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgKiwgX1RwICopCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5j
ZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsK
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRk
bGUpOwoKICBpZiAoX19rID09IDApCiAgICByZXR1cm4gX19sYXN0OwoKICBlbHNlIGlmIChfX2sg
PT0gX19sKSB7CiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog
ICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19r
KTsKCiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgX1Rw
IF9fdG1wID0gKl9fZmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoK
ICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwg
X19sL19fZDsgX19qKyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAg
ICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAg
fQoKICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAgICAg
IH0KICAgIH0KCiAgICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwg
X19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsK
ICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwogICAg
ICAgIH0KCiAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9fbDsK
ICAgICAgfQogICAgfQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9CgogIHJl
dHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9G
b3J3YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByb3Rh
dGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRlIDxj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5j
ZSBfX24pIHsKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2Zp
cnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2
b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
JiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz
dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCAr
IF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX091dHB1dEl0ZXIg
cmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9E
aXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5p
bmcgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0
YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAg
ICBpZiAoX19yYW5kb21fbnVtYmVyKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQg
PSAqX19maXJzdDsKICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3Jl
bWFpbmluZzsKICAgICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLAog
ICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KX091dHB1dEl0ZXIgcmFuZG9t
X3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5j
ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
JiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcg
PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5j
ZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBp
ZiAoX19yYW5kKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsK
ICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAg
ICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5j
ZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQog
ICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAg
aWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3Nh
bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRb
X19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190
OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAg
ICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9f
b3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1w
bGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3Qs
IF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAg
ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0
ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIHdoaWxlIChf
X3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp
cnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgd2hpbGUgKCsrX19uZXh0
ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgc3dhcCgqX19maXJz
dCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAgcmV0dXJuIF9fZmlyc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9C
aWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAg
d2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJz
dCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9f
bGFzdDsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAg
ICAgLS1fX2xhc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2Zp
cnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24o
X0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg
X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aXRp
b24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xh
c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKewogIGlmIChfX2xlbiA9
PSAxKQogICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9G
b3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4g
LyAyKTsKICByZXR1cm4gcm90YXRlKF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbiAvIDIpLAogICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8g
MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f
c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBf
RGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6
ZSkgewogICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBf
X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19f
Zmlyc3QpCiAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9
ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQog
ICAgY29weShfX2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVz
dWx0MTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Owog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFi
bGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3Bh
cnRpdGlvbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9EaXN0YW5jZSop
CnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwg
X19sYXN0KTsKICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0
aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19i
dWYuc2l6ZSgpKTsKICBlbHNlCiAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o
X19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBz
dGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJzdDsK
ICBlbHNlCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw
ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcCBfX3Bpdm90KQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19maXJz
dCA8IF9fcGl2b3QpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9f
cGl2b3QgPCAqX19sYXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xh
c3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRl
ZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2Nv
bXApCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv
dCkpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bp
dm90LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0
KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsK
ICAgICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1
YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkK
ewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGls
ZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9
IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9p
ZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
IF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxl
IChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9f
bGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBf
X2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIF9UcCBfX3Zh
bCA9ICpfX2xhc3Q7CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNvcHlfYmFja3dhcmQo
X19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQog
IGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCosIF9Db21wYXJlIF9fY29tcCkKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fY29t
cChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwg
X19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3Vh
cmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz
dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3Qs
IF9faSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90
eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xp
bmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29t
cCkKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFz
dDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsK
ICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmlu
YWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21w
KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsK
ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQs
IF9fbGFzdCwgX19jb21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0
LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXpl
IF9fbGcoX1NpemUgX19uKQp7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7
IF9fbiA+Pj0gMSkgKytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xv
b3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9f
ZGVwdGhfbGltaXQpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9s
ZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhf
bGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9s
b29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9
IF9fY3V0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9TaXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo
X2xpbWl0LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9f
c3RsX3RocmVzaG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0
aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsK
ICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K
ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwg
X19jb21wKSksCiAgICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19s
YXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBz
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAg
ICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAg
ICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0LCBfX2NvbXApOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+
CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlm
IChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf
X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19taWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19s
YXN0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGFzdCAt
IF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19m
aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRs
ZSwgX19sYXN0LCBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
Pgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVw
X3NpemUpCnsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hp
bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3Rl
cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog
IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9z
aXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21B
Y2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9f
cmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7
CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0
ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAg
ICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg
IF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNl
KF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwK
ICAgICAgICBfX3Jlc3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1
bmtfc2l6ZSA9IDc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9E
aXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr
IF9fY2h1bmtfc2l6ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19p
bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hp
bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0
ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Bv
aW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog
IF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3Rl
cF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdl
X3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUp
OwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu
OwoKICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtf
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAg
d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmly
c3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3Np
emUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBf
X2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
cyBfRGlzdGFuY2U+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9f
Zmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg
X19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRf
d2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwog
IH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5j
ZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIF9E
aXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVy
X3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAg
ZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1
ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rp
c3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo
X19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3Jhcnlf
YnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm
IChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f
bGFzdCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNp
emUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29y
dF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfVGVtcG9yYXJ5X2J1
ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAo
YnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBf
X2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo
YnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFs
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7
CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kgPCAqX19m
aXJzdCkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSks
CiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAo
X19maXJzdCwgX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+
CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
cGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg
X1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2NvbXApOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f
bGFzdDsgKytfX2kpCiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3Bf
aGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBf
X21pZGRsZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgoKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3Mg
X1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3Qg
PT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAh
PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpf
X3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Owog
ICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl
YWxfbGFzdCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3Qg
PCAqX19yZXN1bHRfZmlyc3QpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9E
aXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9s
YXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkp
OwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0
X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFj
Y2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly
c3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpYWxf
c29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2Zp
cnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9S
YW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqLCBfVHAqKQp7
CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s
YXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2Zp
cnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBf
X3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAr
K19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVz
dWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQog
ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwg
X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2Zp
cnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmly
c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQg
X19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
KikKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBf
X2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
bGFzdCAtIDEpKSkpOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19j
dXQ7CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K
aW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191
bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmly
c3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fbnRo
X2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf
X2NvbXApOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBf
X2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwg
X19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19t
aWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv
cndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19m
aXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2Jv
dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9E
aXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19t
aWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChf
X2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg
ICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAg
ZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3ZhbCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9f
Y29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0g
X19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVw
cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBf
RGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwog
IF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19s
ZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0
OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoX192YWwsICpf
X21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3Qg
PSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxm
IC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIg
dXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg
X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVy
biBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2Fy
ZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlz
dGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwg
X19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xl
biA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19o
YWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRk
bGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAg
ICB9CiAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
IF9fdmFsKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1
cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWly
PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0K
ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJz
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBh
aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpf
X2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBj
b25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNl
KikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm
dCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4g
MTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7
CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK
ICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4g
PSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwg
X19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsK
ICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBf
X2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19s
ZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19l
cXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9f
bGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAh
PSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJ
dGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxz
ZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0K
ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jl
c3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIg
PT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgq
X19taWRkbGUgPCAqX19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsK
ICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz
dDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3Rh
bmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4g
X19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9j
dXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f
bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2
YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3Vu
ZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19t
aWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsK
ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu
MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAg
aWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9f
Zmlyc3QpKQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwog
IH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVj
dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9
IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJz
dF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2Uo
X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l
d19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0
KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19t
aWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f
bGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt
IF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf
c2l6ZSkKewogIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEg
PiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9
IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZl
cl9lbmQsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg
ewogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwog
ICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVy
biByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2Jh
Y2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMyBfX3Jlc3VsdCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJz
dDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewog
ICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0
MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEs
ICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
MiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpf
QmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0
MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlf
YmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1f
X2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0
MSkpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0
MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0t
X19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAg
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog
ICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRh
cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu
MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYm
IF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBj
b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19i
dWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19s
ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVu
MTEgPSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVu
MikgewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf
X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQsIF9fbGVuMjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy
OwogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0
ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz
dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4x
MSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
OwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0
LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIy
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplLAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVu
MSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9f
YnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdl
KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29t
cCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRl
ciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9f
bWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw
OwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewog
ICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19s
ZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs
ICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25k
X2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAv
IDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9j
dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w
KTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0
aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjEx
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRk
bGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLCBfX2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9f
c2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg
ICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVu
MSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNl
IF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1Rl
bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9f
bGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVsc2UKICAg
IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl
bjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5z
aXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1Rw
LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQg
X19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1Rw
KiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0
ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAw
KQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAg
ICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5s
aW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlk
ZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2Vf
YXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBp
bnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFj
ZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVs
c2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQog
ICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0
MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh
c3MgX0NvbXBhcmU+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBm
YWxzZTsKICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytf
X2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJu
IF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24o
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2Ug
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf
X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAg
ICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0
X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg
ICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j
b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ugewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz
ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf
X2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJl
bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp
IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICAr
K19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jl
c3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3Qy
OwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
PgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K
CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVu
dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgIGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmly
c3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9f
Zmlyc3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpf
Rm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz
dDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0
dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwog
IGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAt
LV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg
IC0tX19pOwogICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICB7fQog
ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAg
ICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJl
dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
bmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmly
c3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19p
ID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgq
X19pLCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo
X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xh
c3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzsp
IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAo
Kl9faWkgPCAqX19pKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg
ICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChf
X2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7
CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0aW9u
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVy
biBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBp
ZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1f
X2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAt
LV9faTsKICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAg
ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf
X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0
ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9y
d2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikK
ICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK
ICByZXR1cm4gX19sYXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0
X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJz
dDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2l0ZXIpKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsK
fQojIDM0MTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIx
IF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh
cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp
CiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQg
PSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1
bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
OwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAg
ICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAg
ICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19m
aW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJu
IF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsK
ICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAg
PSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwog
ICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBf
X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9
CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs
SXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2
SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2go
X1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9f
cmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1k
aXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0
ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIs
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFy
eVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAg
X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2Vh
cmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJl
dHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9
IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJz
dDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0
ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5k
X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t
cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmlu
ZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0
YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNl
IF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGls
ZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJl
bnRdIDwgX19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2No
aWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf
U3RyaWN0V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGls
ZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0
W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlm
ICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChf
X2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2Nv
bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy
ZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19f
bmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAg
IGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVy
biB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vh
a09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu
IHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7
IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAo
X19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0
dXJuIHRydWU7Cn0KCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0
aG0uaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0
MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0No
YXJUKSkgLSAxKSAvIDQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXpl
b2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9m
KHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgog
ICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAg
IHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAg
ICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9f
YnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVn
ICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAg
ICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19f
YmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ks
IF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVm
LCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAg
ICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAg
ICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N
X2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3It
Pl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rl
cm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7
CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBf
X2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAq
X19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01f
cmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3Jl
YXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9f
YW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJv
eShfX2EpOwogICAgICAgICAgICAgICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAg
ICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h
KTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVj
dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5k
KSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAg
ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAg
IHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm
IF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAg
ICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9
IF9SZXA6Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAg
IGlmIChfX24pCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRh
KCksIF9fbiwgX19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg
ICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBf
UmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFz
aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9f
c3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAog
ICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n
KGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90
eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9N
X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSks
IF9BbGxvYygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9B
bGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2so
X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv
cywgX19uKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19j
b25zdHJ1Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv
bnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1Nf
Y29uc3RydWN0KF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2Ep
CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxs
b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBf
X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco
X0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAg
IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3Jl
cCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRf
YWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9N
X2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9N
X2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2Mm
IF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVw
KSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNf
YWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3Np
emUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+
X01fc2V0X2xlYWtlZCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19z
aXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBf
X3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUg
X19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9y
ZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg
ewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAg
ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bv
cyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNf
dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9N
X2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2Rh
dGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2gg
JiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1v
dmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAg
ICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9N
X2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6
Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAg
ICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAg
ICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoK
ICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0
aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9y
KCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19y
ZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsK
ICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5n
JiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg
X01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9p
c19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAg
ICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAg
ICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2Rh
dGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAg
fQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01f
aWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNp
Y19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0
aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KIyAz
NTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19j
cmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n
X3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBf
X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAg
IHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXpl
b2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxv
YykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw
OwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXpl
X3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9s
ZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZk
YXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xl
bmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9f
cikKCiAgICB7CiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYg
KF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwg
X19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9f
bik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGJhc2ljX3N0
cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwg
X19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
X0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9f
aTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwog
ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNl
KF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBf
X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAg
c2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShf
X29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1Nf
Y29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y
KQogICAgewogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9m
b2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2No
ZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w
b3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBh
cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsg
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg
IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5k
KCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
Pjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19z
dHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+
IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhf
X3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9f
bikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19s
ZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5
KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBs
YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJU
IF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo
X19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCks
IF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19z
aXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhz
KTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiAr
IF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7
CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3Ir
KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m
IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw
ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAg
ICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShf
X2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwg
aXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNp
emVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kx
IC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9f
bjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBp
ZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwg
X19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChf
X3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf
c3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAg
ICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01f
ZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAg
ICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24p
ID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5w
b3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3Np
emUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp
bmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAg
ICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBz
dGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19k
YXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDAp
CiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdo
aWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
cmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBv
cyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsr
X194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShf
TV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAg
ICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7
CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19u
LCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVy
biBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg
KF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3Mp
CiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f
c2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAg
ICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf
X3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9z
KQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hw
b3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRo
aXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0
YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4g
bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAg
ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7
CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlw
ZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0
dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFy
VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBp
ZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAg
ICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01f
ZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAg
ICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3Ry
LnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXpl
PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
X3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N
X2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAg
ICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf
X24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+
IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWlu
KF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihf
X29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNp
emUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh
dGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry
LmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
dAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJl
KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAt
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAg
Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f
cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBf
X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19z
dHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90
eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n
ZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1p
bih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6
ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
bihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJl
KF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAg
X19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQK
ICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUg
X0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0g
X19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9f
YnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i
eXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgNDMgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDQwICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMg
NDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAo
KDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xv
d2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwK
ICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+
PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8
ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkg
OiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkp
IDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEg
PDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4
ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAo
KDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2Nu
dHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwK
ICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTAp
KSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAo
KDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy
biBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBf
X2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0
eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNh
bG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2Ug
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNh
c2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBfX2lz
YWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxwaGFf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50
LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xv
Y2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzeGRp
Z2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFua19s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJf
bCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o
IiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5n
IDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5n
IDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5n
IDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2lu
ZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo
dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h
aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1
bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p
b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1NiAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyB2ZWN0b3I7CiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
dXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9jYWxl
Jik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dy
YXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlw
ZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2
dF9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwg
dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBj
b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2
dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0
X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVt
cHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s
bGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFt
ZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt
ZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50
bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAg
Y2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl
c19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5z
aWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAg
Y2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9J
bXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNh
dGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxh
dGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwog
ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv
cnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAg
ICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRo
cm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3N0ZF9uYW1lKTsK
CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdv
cnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxl
JiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5s
b2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpOwoKCiAgICBz
dHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxv
Y2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4g
ISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAg
b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
czEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0
IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHBy
aXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3Np
YzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVf
dCBfU19udW1fY2F0ZWdvcmllcyA9IDY7CiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9m
YWNldHMgPSAyNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAg
ICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgeyBpZiAoIV9TX2Ns
YXNzaWMpIGNsYXNzaWMoKTsgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXpl
X2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2Nh
bGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoK
CiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB2ZWN0b3I8
ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0OwoKCiAgICBmcmllbmQgY2xh
c3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFj
ZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBm
cmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCiAgcHJp
dmF0ZToKCiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsKICAgIF9fdmVjX2ZhY2V0KiBfTV9mYWNl
dHM7CiAgICBzdHJpbmcgX01fbmFtZXNbX1NfbnVtX2NhdGVnb3JpZXNdOwogICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9j
dHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNb
XTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAg
ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGlj
IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBs
b2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGlu
ZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyArK19NX3JlZmVyZW5j
ZXM7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkK
ICAgIHsKICAgICAgaWYgKF9NX3JlZmVyZW5jZXMtLSA9PSAwKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNp
emVfdCk7CiAgICBfSW1wbChzdHJpbmcgX19uYW1lLCBzaXplX3QpOwogICB+X0ltcGwoKSB0aHJv
dygpOwoKICAgIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wg
X19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9TX251bV9jYXRlZ29y
aWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kg
KyAxXTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQogICAgdm9pZAogICAgX01fcmVwbGFjZV9j
YXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxh
Y2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAg
IHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk
Kik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFj
ZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAg
ICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFj
ZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9f
ZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsK
ICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAg
ICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6
OmZhY2V0CiAgewogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh
bGU6Ol9JbXBsOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9f
cmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCkgeyB9OwoKICAgIHN0
YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25z
dCBjaGFyKiBfX3MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9f
Y19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsK
CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBf
TV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoK
ICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9j
YWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVu
ZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAg
ICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19m
YWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9p
bmRleDsKCgogICAgc3RhdGljIHNpemVfdCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3Bl
cmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCgogICAg
aWQoKSB7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFj
ZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0
aHJvdygpOwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyAzOCAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBl
bnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf
Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf
X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1
cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10Zmxh
Z3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRp
Y19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J
b3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn
cyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs
YWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQog
IHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVy
biBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4o
X0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8
aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2Vu
ZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3Nf
T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl
KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl
bm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w
ZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2Rl
JiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoK
ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBf
SW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVu
bW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09w
ZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Bl
bm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsg
X01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu
IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9f
YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0
YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGlu
dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0
YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBf
SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUg
X0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRl
IF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0
ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+
c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19z
ZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6
CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6
CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJv
dygpOwoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6
CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9i
dWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7Cgog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19s
ZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZp
YyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYp
OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxk
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxk
KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRl
OwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6
X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19p
b3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0g
aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0
ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5t
b2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
OjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9z
X2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5t
b2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0g
b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBv
dXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVu
bW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVk
ZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBz
ZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAg
IHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjE2ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBl
cmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07
CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBp
bnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4s
IGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9u
OwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAg
c3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4
dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5k
ZXg7CiAgICAgIGludCBfTV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNl
OjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAg
X0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiks
IF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAg
X01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9yZWZjb3VudDsgfQoKICAgICAgaW50CiAgICAgIF9N
X3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAg
ICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2Fs
bGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxs
YmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdv
cmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1Nf
bG9jYWxfd29yZHMgPSA4OwogICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNd
OwogICAgX1dvcmRzIF9NX2R1bW15OwogICAgX1dvcmRzKiBfTV93b3JkczsKICAgIGludCBfTV93
b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoK
CiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1
YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jh
c2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRp
YyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZv
aWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50
IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlv
OwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJu
IF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2Zt
dGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFn
cyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10Zmxh
Z3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk
OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBm
bXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg
ICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19t
YXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNl
dGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUg
c3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9
CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykK
ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJl
Y2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0
cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxp
bmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0
cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAg
IHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlv
KGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxl
JiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4g
X01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoK
ICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYg
X193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/
IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29y
ZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkK
ICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAg
ICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgp
OwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsK
CiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShj
b25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19i
YXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9p
bnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9z
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3Mp
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3Mo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9z
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNl
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7
CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1
Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJu
YWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVy
bmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxk
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNl
OjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4
LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0
dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19i
YXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDQ1ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvc2Z3ZC5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1i
dWYuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAz
CiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9zdHJlYW1idWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3Ry
ZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAg
ICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYg
Y3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CgogICAgICBmcmll
bmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQg
Y2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5k
IGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu
ZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAg
ICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBl
PjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFz
aWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91
dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAg
ICBpbnRfdHlwZSBfTV9idWZfc2l6ZTsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7
CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01f
aW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9p
bl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9v
dXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9v
bCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAgIGludF90eXBlIF9NX3BiYWNrX3NpemU7
CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfY3Vy
X3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJvb2wgX01f
cGJhY2tfaW5pdDsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAg
ewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgaW50
X3R5cGUgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBpbnRfdHlw
ZSBfX2xlbiA9IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNf
dHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3Bi
YWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9
IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9N
X3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAg
ICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAg
ICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAg
aW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAg
aW50X3R5cGUgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4g
PSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9
IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4g
PiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19z
YXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2
ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr
IF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAg
ICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tf
aW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01f
aW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQg
PSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVz
dG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAg
ICB9CiMgMTkzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAg
ICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAg
ICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19u
OwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2lu
X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAg
ICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlm
IChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQog
ICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7
CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAg
ICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAg
ICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3Vy
OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDIzNiAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9N
X3NldF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlv
c19iYXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7
CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0
cChfTV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVy
bWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N
X21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRn
KF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkK
ICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgIH0KCiAg
ICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAg
Ym9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAg
ICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9
IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAg
ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0g
X01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2
aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3Vu
aWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3Np
emVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAg
ICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAg
ICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUg
X190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25z
dAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVy
biBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsK
ICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms
IF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVy
biB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUK
ICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7
IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBw
dWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAg
ICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBp
ZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAg
ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
aW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3Nh
dmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9N
X3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0
aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50
X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlzLT5z
YnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAg
IGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQog
ICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBf
TV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0g
dGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBz
dHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg
ICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAg
ICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdl
dGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAg
IHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9i
dWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90eXBlPig4
MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9j
dXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwKICAgICAg
X01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9j
YWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tf
c2l6ZSgxKSwgX01fcGJhY2soX19udWxsKSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxs
KSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAg
eyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2lu
X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01f
aW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4g
X01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3Vy
ICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFy
X3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5f
YmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5f
ZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f
Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwg
aW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigp
IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBw
dHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1w
KGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChj
aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9v
dXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5k
OwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19w
ZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9
CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01f
YnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAg
ICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioK
ICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7
IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jh
c2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6
OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEp
KTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1z
aXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg
IHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRz
X3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVmbG93KCkKICAg
ICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
IGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7CiAgICAgICAgYm9v
bCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAg
ICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAg
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAg
ICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9t
b2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlw
ZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsg
cmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog
ICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg
IHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6
ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDUxNiAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgcHJpdmF0ZToKICAgICAg
YmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICAgIF9fc3RyZWFt
YnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7CgogICAg
fTsKCn0KCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEg
MwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwpuYW1lc3Bh
Y2Ugc3RkIHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
TV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAg
ICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0
aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90
eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg
PCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190
eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBf
X3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgt
MSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0
cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg
ICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAg
ICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
cmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt
ZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7
CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAg
ICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21v
dmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAw
OwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4g
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19u
IC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19y
ZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3Vy
LCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19z
ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKF9fYyAh
PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f
YykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxl
IChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBf
TV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAg
ICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsK
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsK
ICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47
CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAg
ICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7
CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19z
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJl
YW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYg
X19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0
cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXpl
IF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19i
YXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNp
emUgIT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0
bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgX19yZXQgKz0gX194dHJj
dDsKICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAg
ICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKICAgICAgICAgICAgICAgIGlmIChf
X2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX19idWZzaXplID0g
X19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRocm93OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KfQojIDUzMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu
aCIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1
Zl9pdGVyLmgiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVi
bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAg
IHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJs
aWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYg
X19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9N
X3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z
KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0K
CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsK
CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAg
ICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigp
KSkKICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlz
dHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3Rh
ZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgIF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAg
ICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt
YnVmaXRlcl90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSog
X01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1i
dWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7
IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkK
ICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm
KF9fcyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigp
IGNvbnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9z
YnVmICYmIF9NX2MgIT0gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0
ID0gX01fYzsKICAgICAgICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkp
OwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90
eXBlJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAg
ICAgICAgX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJh
dG9yKysoaW50KQogICAgICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0g
KnRoaXM7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1
Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAg
ICAgfQoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUm
IF9fYikKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9
PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAg
ICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJu
IChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAg
fQoKCgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUm
IF9fYikgY29uc3QKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dl
dGMoKSA9PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAg
ICAgICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAg
cmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsK
ICAgICAgfQoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh
bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i
KTsgfQp9CiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDAgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMgMjQgIi91c3Iv
aW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDEgMwoj
IDIyICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2lu
Y2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7
CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0
IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq
Y2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIv
dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs
ZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51bQp7CiAgX19M
Q19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAogIF9fTENf
Q09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9IDUsCiAg
X19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAgX19MQ19B
RERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1FTlQgPSAx
MSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdp
bmZvLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg
MwplbnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBB
QkRBWV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoK
ICBBQkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBE
QVlfNSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFC
TU9OXzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgog
IEFCTU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05f
MTIsCgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoK
ICBNT05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05f
MTEsCgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9G
TVQsCgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgog
IEVSQV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwK
CgogIF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAg
X05MX1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRB
WV80LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAg
X05MX1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBf
TkxfV0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwK
ICBfTkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FC
TU9OXzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAg
X05MX1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FC
TU9OXzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05M
X1dNT05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxf
V01PTl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05M
X1dNT05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQs
CiAgX05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dF
UkFfWUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFf
RF9UX0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxf
VElNRV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklS
U1RfV0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJF
Q1RJT04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9G
TVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgoX19M
Q19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9OTF9D
T0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVfRVhU
UkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAgX05M
X0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxFV0Ms
CiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxfQ09M
TEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05MX0NP
TExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxfQ09M
TEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdDLAogIF9OTF9OVU1fTENfQ09M
TEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDAp
KSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9M
T1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVf
R0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQ
NiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxf
Q1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRf
TkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RP
VVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQs
CiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBf
TkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NU
WVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9N
QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4s
CiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZ
UEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lO
RElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01C
LAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBf
TkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NU
WVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9P
VVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElH
SVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9X
QywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAg
X05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9D
VFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5T
TElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVf
VFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZ
UEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdf
TEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RS
QU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRS
QV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81
LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05M
X0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVf
RVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJB
X01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf
MTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xD
X01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9f
TU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9H
Uk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgog
IF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNF
REVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9f
Tl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoK
CgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBf
X0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5U
X05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lH
Tl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05F
VEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElH
SVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19Q
X0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01P
TkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BB
Q0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllf
RFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNF
REVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFS
WV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxf
TU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJ
R05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VO
T19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZ
X0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05F
VEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAog
IF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1F
UklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAg
X19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JP
VVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19U
SE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0gKCgo
X19MQ19NRVNTQUdFUykgPDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RSLAoK
CgogIF9fTk9TVFIsCgoKCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hFSUdI
VCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJRFRILAogIF9O
TF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAx
NikgfCAoMCkpLAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05M
X05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMs
CiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19B
RERSRVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxf
QUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FE
RFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJF
U1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNT
X0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVS
TSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9U
RUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwK
ICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwK
ICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9O
TF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8
ICgwKSksCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJ
VExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJ
RklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVO
VElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURF
TlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJ
Q0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lE
RU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwK
ICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9S
RVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05f
Q0FURUdPUlksCiAgX05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1
NjMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAo
bmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAxIDMKIyA1NzIgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gY2hh
ciAqX19ubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMg
NDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBl
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MiAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMg
NjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdj
dHlwZV90OwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjkgIi91c3Iv
aW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVt
CnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwK
ICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAg
X19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19J
U3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lT
d3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
IDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy
KSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
IDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy
KSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
IDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh
KSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo
YSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lT
d2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
IDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0
KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp
dCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lT
d3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp
dCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4
ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkp
KSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkp
KSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkp
KSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkp
KSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkp
KSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkp
KSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkp
KSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkp
KQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
aXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXIg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3Ymxh
bmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNzggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj
KSB0aHJvdyAoKTsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29u
c3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0
aHJvdyAoKTsKIyAyNzUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2lu
Y2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFu
cyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRv
d2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgojIDEg
Ii91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDMwMCAiL3Vzci9pbmNsdWRlL3djdHlwZS5o
IiAyIDMKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9faXN3YWxwaGFfbCAod2ludF90
IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19pc3dj
bnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2Nh
bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3bG93ZXJfbCAod2lu
dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19p
c3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d1cHBlcl9s
ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50X3QgX193YywgX19sb2NhbGVf
dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCBfX3djdHlwZV9sIChfX2Nv
bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRf
dCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg
X19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190IF9fd2N0cmFuc19sIChfX2Nv
bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7
CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3QgX193Yywgd2N0cmFuc190IF9f
ZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUu
aCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAzCm5h
bWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVz
aW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7
CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGln
aXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3
cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6
aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2lu
ZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1
c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0K
IyA0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2ljb252
LmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoKZXh0
ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNv
bnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2Rl
KQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBj
aGFyICoqX19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f
cmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf
X291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0
aHJvdyAoKTsKCn0KIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlw
ZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9J
U3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdp
dCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0Owog
ICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dy
YXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9
IF9JU2FsbnVtOwogIH07CiMgNTQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX19jdHlw
ZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNl
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAg
ICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGksIG1hc2sg
Kl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3Zl
Yyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Nj
YW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b3VwcGVy
KGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19j
KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJfdHlwZSAqX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190
b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9sb3dlcihjaGFy
X3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0K
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dl
cihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAgICBjb25zdCBj
aGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFy
X3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9f
aGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFy
IF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19jLCBfX2Rm
YXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFycm93KGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgIGNoYXIgX19k
ZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf
X2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxp
Y2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY3R5cGVfYWJzdHJh
Y3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBj
aGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks
CiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91
cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNo
YXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rl
c3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90
eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkg
Y29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVf
dCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y3R5cGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNr
IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu
X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihj
aGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dp
ZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z
dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19o
aTsgfQoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIg
X19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hh
ciogX19kZXN0KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAg
dGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFj
dF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90
eXBlOwoKICAgIHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIGNv
bnN0JiBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvbG93ZXI7CiAgICAg
IGNvbnN0IG1hc2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxl
OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigt
MSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwg
Ym9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBpbmxpbmUgYm9v
bAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0
IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIG1hc2sq
IF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX2lzKG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICAg
IGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25z
dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBjb25zdCBtYXNrKgog
ICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9jdGFibGU7IH0K
CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf
X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBw
ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf
X2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAg
ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo
YXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTxj
aGFyPiYKICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoK
CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPHdjaGFyX3Q+IDogcHVibGljIF9fY3R5cGVf
YWJzdHJhY3RfYmFzZTx3Y2hhcl90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3
Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3Y3R5cGVfdCBfX3dtYXNrX3R5cGU7CgoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShz
aXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAg
ICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg
X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy
X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIq
IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg
ICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0
ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wK
ICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJu
IF9NX3RhYmxlW19fY10gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg
aXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNv
bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3Rh
YmxlWypfX2xvdysrXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0
eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg
Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiAhKF9N
X3RhYmxlWypfX2xvd10gJiBfX20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93Owog
IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNv
bnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUg
KF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxlWypfX2xvd10gJiBfX20pICE9
IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDM5MyAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgog
ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBl
eHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw
KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsg
fQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb2Rl
Y3Z0LmgiIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNs
YXNzIF9fZW5jX3RyYWl0cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19k
ZXNjX3R5cGU7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6
ZSA9IDMyOwoKICAgIGNoYXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9l
eHRfZW5jW19TX21heF9zaXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBf
X2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBf
TV9pbnRfYm9tOwoKICBwdWJsaWM6CiAgICBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNj
KDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewoK
CgoKICAgICAgc3RyY3B5KF9NX2ludF9lbmMsICJVQ1M0Iik7CgoKICAgICAgc3RyY3B5KF9NX2V4
dF9lbmMsIG5sX2xhbmdpbmZvKENPREVTRVQpKTsKICAgIH0KCiAgICBfX2VuY190cmFpdHMoY29u
c3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LCBpbnQgX19pYm9tID0gMCwKICAgICAg
ICAgICAgICAgICBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rl
c2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShf
TV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMs
IF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3Qg
X19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29i
ai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19v
YmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01f
ZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgogICAg
fl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAg
ICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgoKICAgIHZvaWQKICAgIF9NX2luaXQo
KQogICAgewogICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRf
ZW5jKTsKICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9l
bmMpOwogICAgICBpZiAoX01fb3V0X2Rlc2MgPT0gaWNvbnZfdCgtMSkgfHwgX01faW5fZGVzYyA9
PSBpY29udl90KC0xKSkKICAgICAgICB7CgogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBf
TV9nb29kKCkKICAgIHsKICAgICAgcmV0dXJuIF9NX291dF9kZXNjICYmIF9NX2luX2Rlc2MKICAg
ICAgICAgICAgICYmIF9NX291dF9kZXNjICE9IGljb252X3QoLTEpICYmIF9NX2luX2Rlc2MgIT0g
aWNvbnZfdCgtMSk7CiAgICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5f
ZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVz
Y190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRf
ZGVzYzsgfQoKICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyBy
ZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxf
ZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRl
cm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0
X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CiAgfTsKCgoKCiAgY2xh
c3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAg
IG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBw
dWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVk
ZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5
cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAg
ICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQs
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQs
IF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9Cgog
ICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBp
bnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBj
b25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwg
X19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8s
IF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAg
ICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNv
bnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4
KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw
bGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19m
cm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv
LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNv
bnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2Nv
bnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0
aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg
ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9
IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0
ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9f
Y29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Owog
ICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5U
IGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4
dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5jb2RlY3Z0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNv
ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fi
c3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAg
dHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlw
ZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVm
IF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
ICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBf
X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5
cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5j
X3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJh
Y3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAg
ICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg
IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg
ICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAg
ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
bnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29s
CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBp
bnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3Qg
X19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNv
bnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5h
bWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlu
bGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKmljb252X2Z1bmMpKGljb252
X3QsIF9ULCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGlj
b252X3QgY2QsIGNoYXIqKiBpbmJ1Ziwgc2l6ZV90KiBpbmJ5dGVzbGVmdCwKICAgICAgICAgICAg
ICAgICAgICBjaGFyKiogb3V0YnVmLCBzaXplX3QqIG91dGJ5dGVzbGVmdCkKICAgIHsKICAgICAg
cmV0dXJuIGljb252X2Z1bmMoY2QsIChfVClpbmJ1ZiwgaW5ieXRlc2xlZnQsIG91dGJ1Ziwgb3V0
Ynl0ZXNsZWZ0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQs
IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRl
LCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg
IGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVy
cm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlw
ZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0
IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwog
ICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAv
IHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChf
X2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9
IHNpemVvZihleHRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190
bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIq
IF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBf
X2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2lu
dF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2lu
dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9t
X2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0
aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBl
KSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nh
c3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8aW50
ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAg
ICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAg
ICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywg
Jl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUq
PihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252
LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlm
IChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJv
bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog
ICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihf
X2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0
PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlw
ZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9j
YXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp
YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
X19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+
CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRl
cm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJy
b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl
ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg
X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAg
ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBz
aXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190
b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9y
KGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYg
IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9f
dGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAg
X19yZXQgPSBub2NvbnY7CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAg
ICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICBfX3JldCA9IGVycm9yOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0
X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz46OgogICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwKICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVy
bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01f
Z29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5
cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19z
dGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11
bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNp
emVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAg
ICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXpl
b2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19l
bmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9f
Y29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRl
cm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAg
ICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAg
ICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7
CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsg
MSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw
dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2Zp
eGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19j
ZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBf
X2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4p
OwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQg
PSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJv
bSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAg
ICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwog
ICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVy
blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhy
b3coKQogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg
eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf
dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl
X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf
dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIDE7IH0KCgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFy
LCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBj
aGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50
ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBt
YnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQK
ICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl
eHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs
IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBl
KiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkg
Y29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252
KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25z
dCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAg
IGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAg
dGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAg
ICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRl
X3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qg
c3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f
b3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAg
ICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlw
ZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3Rh
dGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAg
ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwK
ICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAg
ICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwK
ICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp
emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9i
eW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNo
YXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CiMgNDE2ICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNfZ2V0OwoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9Gb3JtYXRfY2FjaGUKICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxfQ2hhclQ+IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyPgogICAgICAgIGZyaWVuZCBjbGFz
cyBfTnVtZXJpY19nZXQ7CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0PF9DaGFyVD47CiAgICAg
IGZyaWVuZCBjbGFzcyBudW1fcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dl
dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47CiAgICAgIGZy
aWVuZCBjbGFzcyB0aW1lX3B1dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfcHV0
PF9DaGFyVD47CgoKCgogICAgICBzdGF0aWMgaW50IF9TX3B3b3JkX2l4OwoKCgogICAgICBib29s
IF9NX3ZhbGlkOwoKCgogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19saXRlcmFsc1tdOwoKCgoK
ICAgICAgZW51bQogICAgICB7CiAgICAgICAgX1NfbWludXMsCiAgICAgICAgX1NfcGx1cywKICAg
ICAgICBfU194LAogICAgICAgIF9TX1gsCiAgICAgICAgX1NfZGlnaXRzLAogICAgICAgIF9TX2Rp
Z2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwKICAgICAgICBfU191ZGlnaXRzID0gX1NfZGlnaXRz
X2VuZCwKICAgICAgICBfU191ZGlnaXRzX2VuZCA9IF9TX3VkaWdpdHMgKyAxNiwKICAgICAgICBf
U19lZSA9IF9TX2RpZ2l0cyArIDE0LAogICAgICAgIF9TX0VlID0gX1NfdWRpZ2l0cyArIDE0CiAg
ICAgIH07CgoKCgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKCgoKCgogICAgICBj
aGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5h
bWU7CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsKCgoKICAgICAgYm9vbCBfTV91c2Vf
Z3JvdXBpbmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKCiAgICAgIF9Gb3JtYXRfY2Fj
aGUoKTsKCiAgICAgIH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0KCgoKCiAgICAgIHN0YXRp
YyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICAgIF9TX2dldChpb3NfYmFzZSYgX19pb3MpOwoK
ICAgICAgdm9pZAogICAgICBfTV9wb3B1bGF0ZShpb3NfYmFzZSYpOwoKICAgICAgc3RhdGljIHZv
aWQKICAgICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNlJiBf
X2lvcywgaW50IF9faXgpIHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbnQgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19wd29yZF9peDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgY2hhciBfRm9ybWF0X2NhY2hlPF9DaGFyVD46
OgogICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlBQkNE
RUYiOwoKICAgdGVtcGxhdGU8PiBfRm9ybWF0X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7
CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh
c3MgX051bWVyaWNfZ2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgoKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3Mg
bnVtX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJU
PgogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDsKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmll
bmQgY2xhc3MgbnVtX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1l
IF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5
X3B1dDsKCiAgICBwcml2YXRlOgogICAgICBleHBsaWNpdAogICAgICBfTnVtZXJpY19nZXQoKSB7
IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmljX2dldCgpIHsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCkg
Y29uc3Q7CiAgICB9OwoKCiAgY29uc3QgaW50IF9NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aCA9IDMy
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz
cyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAg
ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25z
dAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
c2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChf
X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJl
dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgoKCgoKICAg
ICAgdm9pZAogICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2Zw
ID0gdHJ1ZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikg
Y29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg
aXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgaW50JikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25l
ZCBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
CiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg
dm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsK
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBf
X2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hh
ciogX194dHJjLAogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwKSBjb25zdDsK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh
c3MgX051bWVyaWNfcHV0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6
CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbAog
ICAgICB+X051bWVyaWNfcHV0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf
X2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQg
bG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBf
X3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl
dHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1
dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf
X2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu
ZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcp
IGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws
IGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1
bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAg
ICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNh
bmRzX3NlcDsKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV90
cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBl
eHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9
IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5j
dChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAg
ICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBkb190aG91c2FuZHNfc2Vw
KCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29u
c3QKICAgICAgeyByZXR1cm4gZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg
ICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01f
aW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRl
PD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2No
YXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1Ymxp
YyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt
cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0
CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3Jl
YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRp
YWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rl
c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAgIGNv
bXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsg
fQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywg
Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zv
cm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFz
aChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0
IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u
c3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg
IGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8s
IGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+
CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19sbzEs
IGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz
dHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xvLCBj
b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29sbGF0
ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25z
dDsKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb19jb21wYXJl
KGNvbnN0IHdjaGFyX3QqIF9fbG8xLCBjb25zdCB3Y2hhcl90KiBfX2hpMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19sbzIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QqIF9faGkyKSBjb25zdDsKCiAgdGVtcGxh
dGU8PgogICAgd3N0cmluZwogICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9fdHJhbnNmb3JtKGNvbnN0
IHdjaGFyX3QqIF9fbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
d2NoYXJfdCogX19oaSkgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIGxvbmcKICAgIGNvbGxhdGU8
d2NoYXJfdD46OmRvX2hhc2goY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19o
aSkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRl
X2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAg
Y29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg
X19yZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD46OmNvbGxh
dGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgogIGNsYXNzIHRpbWVfYmFz
ZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwg
eW1kLCB5ZG0gfTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg
dGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl
OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2RheW5hbWVzKDApLCBfTV9tb250
aG5hbWVzKDApIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAog
ICAgICB7IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfZGF0ZShfX3MsIF9fZW5k
LCBfX2YsIF9fZXJyLCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3dlZWtkYXko
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFtZShf
X3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfeWVh
cihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fZ2V0X3llYXIoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpCiAgICAgIHsKICAgICAgICBkZWxl
dGUgW10gX01fbW9udGhuYW1lczsKICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7CiAgICAg
IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aW1lX2Jhc2U6OnltZDsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAog
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7
IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9kYXRl
KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f
czsgfQoKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7CiAg
ICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6
OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJs
aWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0K
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFz
ZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgIGNvbnN0IHRtKiAsIGNv
bnN0IF9DaGFyVCogLAogICAgICAgICAgY29uc3QgX0NoYXJUKiApIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9fczsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG1iLCBj
aGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdAogICAgICB7IHJldHVybiBk
b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX190bWIsIF9fZm9ybWF0LCBfX21vZGlmaWVyKTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXQoKSB7IH0KCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYs
IGNoYXJfdHlwZSwgY29uc3QgdG0qICwKICAgICAgICAgICAgIGNoYXIgLCBjaGFyICkgY29uc3QK
ICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp
bWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGlt
ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQg
OiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZz
ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAg
ICBpb3NfYmFzZSYgX19mLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf
X3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBf
X2YsIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2YsIF9fZXJy
LCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5
X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwgaW9zX2Jh
c2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJiApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwgaW9z
X2Jhc2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIHN0cmluZ190eXBlJiApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBj
bGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl
cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9w
dXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2Um
IF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fdW5p
dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p
bnRsLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3Ry
aW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2lu
dGwsIF9fZiwgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAg
ICAgICAgICBsb25nIGRvdWJsZSApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlvc19i
YXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25z
dAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6aWQ7CgogIHN0cnVjdCBtb25leV9iYXNlCiAgewogICAgZW51bSBwYXJ0IHsgbm9u
ZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hh
ciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRl
cm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBf
X3ByZWNlZWRzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlw
ZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAg
ICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV9jdXJyX3N5bWJvbDsK
ICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsKICAgICAgc3RyaW5nX3R5cGUgX01f
bmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9N
X3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBf
X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVf
bW9uZXlwdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2lu
dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAg
ICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmlu
Z190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Y3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAg
c3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0
dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9z
X2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKSB7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFs
X3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2Vw
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91
cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0
cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25l
Z2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9z
X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZp
cnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1
bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQs
IF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg
IGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxfQ2hh
clQsIF9JbnRsPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoK
ICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAg
dm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50
bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJU
LCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0Owog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShj
b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0No
YXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9N
X2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1
bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFt
ZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAg
dHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNf
YmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBf
X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGNhdGFsb2cKICAg
ICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xv
YykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKICAgICAgc3Ry
aW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBj
b25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19jLF9f
c2V0LF9fbXNnaWQsX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKSB7IH0KCgoKICAgICAgdmlydHVhbCBjYXRhbG9n
CiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikg
Y29uc3QKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg
ICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3QgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVz
c2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2Vz
X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgbWVzc2FnZXNfYnluYW1lPGNo
YXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKICB0ZW1w
bGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD46Om1lc3NhZ2VzX2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i
YXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVy
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlz
bG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhh
KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hh
clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9f
YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91
cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hh
clQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMg
MzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9z
X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUg
b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl
ZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRl
ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAg
IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1
Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4g
X19udW1nZXRfdHlwZTsKCgogICAgcHJpdmF0ZToKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBpb3N0YXRl
IF9NX2V4Y2VwdGlvbjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CiAgICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0
YXRlOwoKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01faW9zX2ZjdHlwZTsKCiAgICAgIGNv
bnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBl
KiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lIGNvbnN0IF9fY3R5cGVfdHlw
ZSoKICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9pZCkKICAgICAgeyByZXR1cm4gX01faW9zX2Zj
dHlwZTsgfQoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgaW5s
aW5lIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFp
bCgpOyB9CgogICAgICBpbmxpbmUgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fc3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBj
bGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KQogICAgICB7CiAgICAgICAgaWYgKHRoaXMt
PnJkYnVmKCkpCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOwogICAgICAg
IGVsc2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAg
ICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAg
ICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQg
ZXhjZXB0aW9uIik7CiAgICAgIH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIHNldHN0YXRlKGlv
c3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0
YXRlKTsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJkc3RhdGUoKSA9PSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBlb2Yo
KSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9
CgogICAgICBpbmxpbmUgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRo
aXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgaW5saW5l
IGJvb2wKICAgICAgYmFkKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAm
IGJhZGJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgaW5saW5lIHZvaWQK
ICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhj
ZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRl
KTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5p
dChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAg
aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fdGllOyB9CgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBf
X3RpZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiog
X19vbGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJu
IF9fb2xkOwogICAgICB9CgogICAgICBpbmxpbmUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9
CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgog
ICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgaW5saW5lIGNoYXJf
dHlwZQogICAgICBmaWxsKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmlsbDsgfQoKICAgICAg
aW5saW5lIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAg
ICAgY2hhcl90eXBlIF9fb2xkID0gX01fZmlsbDsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAg
ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29u
c3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19j
LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFy
IF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz
ZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29u
c3QgbG9jYWxlOjpmYWNldCogX19mKQogICAgICB7CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl
OwogICAgICAgIGlmIChfX2YpCiAgICAgICAgICBfX3JldCA9IHRydWU7CiAgICAgICAgZWxzZQog
ICAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7
CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2Mi
IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z
YikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0g
X01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVh
cigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jo
cykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX2xpbWl0
IDw9IF9TX2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJheSA6IG5ldyBfV29yZHNb
X19yaHMuX01fd29yZF9saW1pdF07CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp
Y19pb3MudGNjIiAzCiAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJh
Y2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAg
ICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmRzICE9
IF9NX3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOwogICAgICBfTV9kaXNw
b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp
bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9saW1pdDsgKytfX2kpCiAgICAgICAgX193
b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZHNbX19pXTsKICAgICAgaWYgKF9NX3dvcmRzICE9IF9N
X3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOwogICAgICBfTV93b3JkcyA9
IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfbGltaXQgPSBfX3Jocy5fTV93b3JkX2xpbWl0OwoKICAg
ICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndp
ZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0
aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7Cgog
ICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxs
X2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19k
ZmF1bHQpIGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT5uYXJyb3coX19jLCBfX2Rm
YXVsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2Mp
IGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRlbihfX2MpOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
ewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1i
dWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+
cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAg
ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5p
dChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlv
c19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsK
ICAgICAgX01fdGllID0gMDsKICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAg
IF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAg
IF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAg
ICAgICAgX01faW9zX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYyk7Cgog
ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt
cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGlmIChoYXNfZmFj
ZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1nZXQgPSAmdXNlX2ZhY2V0
PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsKICAgIH0KfQojIDIxNCAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3MuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0
MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwoKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQ0
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKIyA4NjMgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51
bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAg
IHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91
bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAz
CiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1p
bmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEK
ICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p
dHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vy
cm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFO
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf
VHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsg
fQogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
Y29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aXNfc3BlY2lhbGl6ZWQ7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1Rw
Pjo6ZGlnaXRzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51
bWVyaWNfbGltaXRzPF9UcD46OmRpZ2l0czEwOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojppc19zaWduZWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46
OmlzX2ludGVnZXI7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAg
IG51bWVyaWNfbGltaXRzPF9UcD46OmlzX2V4YWN0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OnJhZGl4OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46Om1p
bl9leHBvbmVudDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgaW50CiAgICBu
dW1lcmljX2xpbWl0czxfVHA+OjptaW5fZXhwb25lbnQxMDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgY29uc3QgaW50CiAgICBudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQ7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1p
dHM8X1RwPjo6bWF4X2V4cG9uZW50MTA7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNv
bnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46Omhhc19pbmZpbml0eTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6
aGFzX3F1aWV0X05hTjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAog
ICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX3NpZ25hbGluZ19OYU47CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZQogICAgbnVtZXJpY19saW1p
dHM8X1RwPjo6aGFzX2Rlbm9ybTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3Qg
Ym9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX2Rlbm9ybV9sb3NzOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojpp
c19pZWM1NTk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51
bWVyaWNfbGltaXRzPF9UcD46OmlzX2JvdW5kZWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OmlzX21vZHVsbzsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1Rw
Pjo6dHJhcHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51
bWVyaWNfbGltaXRzPF9UcD46OnRpbnluZXNzX2JlZm9yZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUKICAgIG51bWVyaWNfbGltaXRzPF9UcD46
OnJvdW5kX3N0eWxlOwoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsg
fQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
IHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBzdGF0
aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsg
fQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
Y2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgY2hh
ciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRp
YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAg
IHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIo
KTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMTMzICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDM7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp
OyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAzOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlu
ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyB3Y2hh
cl90IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHdjaGFyX3QpMjE0NzQ4MzY0N0w7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSAxMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyB3Y2hhcl90IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0K
ICAgICAgc3RhdGljIHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3
Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMzAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVtcGxhdGU8Pgog
ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA1OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNo
b3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNo
b3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0
aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z
aWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMg
aW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDEwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBpbnQgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAg
c3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg
ICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gMTA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7
IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIG1heCgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp
YyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln
bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u
ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp
OyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07
CgoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBs
b25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTA7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0
YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0
Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u
ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0
Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
NjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDAp
OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1
NDk0MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRp
YyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMg
ZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAg
ICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CiMgMTgyMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMu
aCIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIw
MTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJs
ZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2
OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAg
ICAgZGVub3JtX2Fic2VudDs7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z
cyA9IGZhbHNlOzsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAg
ICB9OwojIDE5MDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEy
MDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkz
MjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAg
ICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0KICAgICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmlu
aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRv
dWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu
MEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9CiAgICAgICAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE5ODAg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKfQojIDQxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0No
YXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlw
ZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXpl
IF9NX2djb3VudDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3Ry
ZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9f
c2IpOwogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZp
cnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNp
emUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7
CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBl
JiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19p
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2Um
KSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcm
IF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9f
Zik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19m
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSog
X19zYik7CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZv
aWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgog
ICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBn
ZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7Cgog
ICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBf
X3NiKQogICAgICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVs
aW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lk
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFj
ayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lk
KTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs
bGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl
a2Rpcik7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I9KGNvbnN0IF9faXN0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9f
aXN0cmVhbV90eXBlJik7CgogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZW50cnkKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt
YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f
aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu
dF90eXBlIF9faW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7Cgog
ICAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAg
ICBib29sIF9NX29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1
bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0
PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh
clQqIF9fcyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4g
Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6
IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1f
dHlwZShfX3NiKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFt
KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
aXN0cmVhbS50Y2MiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o
IiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQwICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIg
MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIg
MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
bGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMK
IyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9i
aXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVy
biBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFt
X2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMg
NjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMzkgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIv
dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5o
IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUy
ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2lt
YWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoK
CgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBj
aGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFy
ICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9z
aWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIg
cF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNl
ZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAg
Y2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50
X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9u
X3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9u
X3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4g
Y2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cg
KCk7CiMgMTQxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxv
Y2FsZS5oIiAxIDMKIyAxNDIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKCgoKCgpleHRl
cm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25zdCBj
aGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgX19kdXBsb2NhbGUgKF9fbG9j
YWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgX19mcmVlbG9jYWxlIChf
X2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
OjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAz
NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzggIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5o
IiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My90
eXBlaW5mbyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzOCAi
L3Vzci9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw
YWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTQgIi91c3Iv
aW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlw
ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp
dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5
cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq
X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq
X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTcgIi91c3IvaW5jbHVkZS9nKystdjMv
dHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0
CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9f
YXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJn
KSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6Cgog
ICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29s
IF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2Nh
dGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0
dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8g
Kl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIp
IGNvbnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewog
IHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9jYXN0
KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24K
ICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+
YmFkX3R5cGVpZCAoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg
MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAx
IDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAz
CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjQg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2Vw
dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw
dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v
Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY1ICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl
ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0
b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh
dGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz
ZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf
YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0
b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxs
b2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNl
OwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFs
X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9y
bWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsK
ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5
cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK
cHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01f
ZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zp
bmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9p
ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2
b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg
fQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz
aCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0
CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2Vf
aXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4
X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9
CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25z
dF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHko
KSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29u
c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi
ZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
bnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9y
YW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsg
X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVy
ZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyBy
ZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0
b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2Ep
CiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9f
dmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShf
X24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls
bF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigp
KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5l
bmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jh
c2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3Ry
dWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19m
YWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg
X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu
ZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2gg
PSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg
KyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2Zp
bGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9k
aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlw
ZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5j
ZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkg
Y29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICoo
ZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihl
bmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAo
X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p
c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9m
aW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVu
ZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3Rk
Ojpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwg
X194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l
bmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn
aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv
biA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N
X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bv
c2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBp
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRp
b24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBf
X3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICAr
K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf
X3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK
ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlz
cGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg
ewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBz
aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3Ms
IF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1f
TV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0
ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAg
ICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5p
c2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAg
aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBp
dGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9f
aSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3Qp
OwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
c2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAg
ICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNl
cnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNp
emVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lk
IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w
eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9f
cmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAg
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
IHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7
CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh
dG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRv
cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykg
ewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVu
ID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv
cHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0
b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkg
Pj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k
KCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp
OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo
KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0
b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf
X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs
KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz
ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg
ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g
PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBj
YXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVu
LCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg
ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK
ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9
IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAg
aXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwog
ICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp
bmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJz
dDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf
TV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFz
dCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N
X2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwog
ICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5
cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk
X3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0
KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3Rh
cnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0
ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5i
YXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg
ICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVh
bGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJv
eShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog
ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N
X2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo
IC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpf
X3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xk
X3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9
IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAg
IHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf
TV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr
K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0
cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9N
X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmls
bF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24g
IT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkg
Pj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xk
X2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmlu
aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwo
X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVs
c2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVt
c19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2Fm
dGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQog
ICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg
ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9f
bik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAg
X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9f
bmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf
X25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAg
ICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg
ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f
bmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAg
IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu
c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAr
K19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy
ID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmlu
aXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAg
X01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xk
X2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRl
cik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7
CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlk
LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf
X29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0
YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l
d19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAg
ICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNh
dGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9j
YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3ko
X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu
ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJh
c2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0K
IyA2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwojIDYzICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBj
b25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVj
dCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBf
TV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQg
X195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVm
ZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVy
YXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVs
c2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJl
bmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0
aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNl
JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBi
b29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBe
PSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0Jp
dF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195
ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg
dW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGlu
dCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kp
IHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRf
QklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQog
IHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAg
X01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZv
aWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19p
ICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19u
ICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNp
Z25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAg
ICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09
IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJh
dG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9N
X3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01f
b2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYg
X19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJh
dG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9f
aSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g
ISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3Qg
X0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7
CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zm
c2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9C
aXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3Ig
aXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7
fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRv
ciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp
czsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYg
b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf
X2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y
IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3Rt
cCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0
b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o
ZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGlu
ZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJh
dG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJh
dG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCog
cG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Cgog
IF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9C
aXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9y
KGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5f
TV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAg
Y29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1w
X2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3It
LShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rv
d24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0o
ZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv
ciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0
b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29u
c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJu
ICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJh
dG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0
dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBf
X2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2Nf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf
X2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnBy
b3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyBy
ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9f
X1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5f
TV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBf
QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwog
IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5z
aWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
YXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFs
bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZl
Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwg
X01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxv
Y190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxs
b2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsg
X19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewog
ICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0
YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRf
aXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMg
X0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVk
ZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAg
ICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxs
b2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0
b3IuaCIgMSAzCiMgMzQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIg
MiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2
ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAg
cHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBl
ZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZl
cmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj
b25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy
YXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAg
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf
aXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2Fs
bG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01f
ZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAg
ICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZv
aWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIHVuc2lnbmVkIGludCogX19x
ID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y
KF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9f
bik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9v
bCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7
CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCAr
IDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBz
aXplKCkgOiBfX1dPUkRfQklUOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2Fs
bG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9m
aW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C
SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK
ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv
aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRl
cmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbik7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgICBfX3BvcyA9IGlu
c2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7CiAgICAgIH0KICAgIH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3Jh
bmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgaWYgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgICAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX24pOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9f
bikgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNo
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24p
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNp
emUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCks
IF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s
IGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsK
ICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0K
ICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsg
fQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQog
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9y
IHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7
IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7
CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2Us
IDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVn
aW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p
CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAg
Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBy
ZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9y
YW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+
c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZlY3Rvcjxib29sPiIpOwogICAg
fQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2NoZWNr
KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRo
aXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkg
e30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICAg
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsK
ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4w
IDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAgIDog
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9NX2lu
aXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFn
ZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX194
LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwog
ICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFs
aXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewog
ICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k
X29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1
dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNw
YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9yKCkg
eyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAgaWYg
KCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNhcGFj
aXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6ZShf
X3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJl
Z2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5z
aXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2ZpbGxf
YXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkpIHsK
ICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6
IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgICBm
aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAg
ICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmls
bF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0
b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJz
dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRl
Z2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19uLCAo
Ym9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2b2lk
IF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3Qp
CiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVu
ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAg
ICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAg
ZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAg
YWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdp
bigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9
CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKGNhcGFjaXR5KCkg
PCBfX24pIHsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwog
ICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkp
OwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f
cSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJ
VCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyBy
ZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAt
IDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkg
LSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2Zpbmlz
aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsK
ICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgICB9CiAgICB2
b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgICBzdGQ6OnN3YXAoX01f
c3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9m
aW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zf
c3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg
Ym9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRp
b24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3Jh
Z2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAg
ICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICAgIHJl
dHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2Vy
PgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp
IHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsKICAgIH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3Qs
IF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3Np
dGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9f
cG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHZvaWQg
X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBf
X3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlmIChjYXBhY2l0eSgpIC0g
c2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks
IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBmaWxsKF9fcG9zaXRp
b24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgICBfTV9m
aW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1
bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3Ig
X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAg
ICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0
aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxs
b2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAw
KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNp
emVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24s
IF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQog
ICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgICBpZiAoX19wb3Np
dGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9f
cG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICByZXR1cm4gX19wb3NpdGlvbjsK
ICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19z
aXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkK
ICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQo
KSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCks
IF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAodW5zaWduZWQgaW50KiBf
X3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAg
ICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigp
LCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9y
OwoKfQojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0
NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxv
Y2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpCiAgICB7CiAgICAgIGxvY2FsZSBf
X2NvcHkoKnRoaXMpOwogICAgICBfX2NvcHkuX01faW1wbC0+X01fcmVwbGFjZV9mYWNldChfX290
aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIF9fY29weTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAg
ICBjb25zdCBfX2NvbGxhdGVfdHlwZSogX19mY29sbCA9ICZ1c2VfZmFjZXQ8X19jb2xsYXRlX3R5
cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBf
X3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFj
ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9JbXBs
OjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQu
X01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01f
ZmFjZXRzOwogICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtfX2ld
OwogICAgICBpZiAoX19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpCiAgICAgICAg
X190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0
Jj4oKl9fZnApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAg
ICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICB0eXBl
ZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBzaXplX3Qg
X19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFjZXQgPSBf
X2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6
ZSgpICYmICgqX19mYWNldClbX19pXSAhPSAwKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPgogICAgX0luSXRlcgogICAgX19tYXRjaF9w
YXJhbGxlbChfSW5JdGVyIF9fcywgX0luSXRlciBfX2VuZCwgaW50IF9fbnRhcmdzLAogICAgICAg
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLAogICAg
ICAgICAgICAgICAgICAgICBpbnQqIF9fbWF0Y2hlcywgaW50JiBfX3JlbWFpbiwgYm9vbCYgX19l
b2YpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlw
ZTsKICAgICAgX19lb2YgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkgPCBf
X250YXJnczsgKytfX3RpKQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7CiAgICAgIF9f
cmVtYWluID0gX19udGFyZ3M7CiAgICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGRvCiAgICAg
ICAgewogICAgICAgICAgaW50IF9fdGkgPSAwOwogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3Jl
bWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAgICAg
ICAgICAgICsrX190aTsKICAgICAgICAgIGlmIChfX3RpID09IF9fcmVtYWluKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID09IDApIF9fcmVtYWluID0gMDsKICAgICAgICAg
ICAgICByZXR1cm4gX19zOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19zID09IF9fZW5k
KQogICAgICAgICAgICBfX2VvZiA9IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZh
bHNlOwogICAgICAgICAgZm9yIChpbnQgX190aTIgPSAwOyBfX3RpMiA8IF9fcmVtYWluOyApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9
IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsKICAgICAgICAgICAgICBpZiAoX19wb3MgPCBf
X3RhcmdldC5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChf
X2VvZiB8fCBfX3RhcmdldFtfX3Bvc10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTJdID0gX19tYXRjaGVzWy0tX19yZW1h
aW5dOwogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICBfX21hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICsrX190aTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX21hdGNo
ZWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICArK19f
cG9zOwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGludCBfX3RpMyA9IDA7IF9fdGkzIDwg
X19yZW1haW47KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID4gX190YXJn
ZXRzW19fbWF0Y2hlc1tfX3RpM11dLnNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytf
X3RpMzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKF9fcmVtYWluKTsKICAg
ICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zv
cm1hdF9jYWNoZTxfQ2hhclQ+OjpfRm9ybWF0X2NhY2hlKCkKICAgIDogX01fdmFsaWQodHJ1ZSks
IF9NX3VzZV9ncm91cGluZyhmYWxzZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0
X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRf
Y2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfTV9wb3B1bGF0ZShpb3Nf
YmFzZSYgX19pbykKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MgKCk7CiAg
ICAgIG51bXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAg
IF9NX2ZhbHNlbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgIF9NX3Rob3VzYW5kc19zZXAg
PSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVj
aW1hbF9wb2ludCgpOwogICAgICBfTV9ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAg
X01fdXNlX2dyb3VwaW5nID0gX01fZ3JvdXBpbmcuc2l6ZSgpICE9IDAgJiYgX01fZ3JvdXBpbmcu
ZGF0YSgpWzBdICE9IDA7CiAgICAgIF9NX3ZhbGlkID0gdHJ1ZTsKICAgIH0KCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ogog
ICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXYsIGlvc19iYXNlJiBfX2lvcywgaW50
IF9faXgpIHRocm93KCkKICAgIHsKICAgICAgdm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9faXgp
OwogICAgICBzd2l0Y2ggKF9fZXYpCiAgICAgICAgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmVy
YXNlX2V2ZW50OgogICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0No
YXJUPio+KF9fcCk7CiAgICAgICAgICBfX3AgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg
Y2FzZSBpb3NfYmFzZTo6Y29weWZtdF9ldmVudDoKCiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfX3AgPSBuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OyB9CiAgICAgICAgICBjYXRjaCguLi4p
CiAgICAgICAgICAgIHsgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6
aW1idWVfZXZlbnQ6CiAgICAgICAgICBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4q
PihfX3ApLT5fTV92YWxpZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4q
CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChpb3NfYmFzZSYgX19pb3MpCiAgICB7
CiAgICAgIGlmICghX1NfcHdvcmRfaXgpCiAgICAgICAgX1NfcHdvcmRfaXggPSBpb3NfYmFzZTo6
eGFsbG9jKCk7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7CgoK
ICAgICAgaWYgKF9fcCA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGF1dG9fcHRyPF9Gb3JtYXRf
Y2FjaGU8X0NoYXJUPiA+IF9fYXAobmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPik7CiAgICAgICAg
ICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxs
YmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX3B3b3JkX2l4KTsKICAg
ICAgICAgIF9fcCA9IF9fYXAucmVsZWFzZSgpOwogICAgICAgIH0KICAgICAgX0Zvcm1hdF9jYWNo
ZTxfQ2hhclQ+KiBfX25jcCA9IHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9f
cCk7CiAgICAgIGlmICghX19uY3AtPl9NX3ZhbGlkKQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0
ZShfX2lvcyk7CgogICAgICByZXR1cm4gX19uY3A7CiAgICB9CiMgMjUwICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgX01fZXh0cmFjdChfSW5JdGVyICwgX0luSXRlciAsIGlvc19iYXNlJiAsCiAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIGNoYXIqICwKICAgICAgICAgICAgICAgaW50
JiAsIGJvb2wgKSBjb25zdAogICAgewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg
bnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFj
dChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsIGludCYgX19iYXNlLAogICAg
ICAgICAgICAgICBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192
KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xh
bHBoYSkpCiAgICAgICAgewoKCgoKCgogICAgICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9i
dWZmZXJfbGVuZ3RoXSA9IHsnXDAnfTsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBf
TV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxz
ZSk7CgoKICAgICAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDA7CiAgICAgICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0
eSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg
ICAgICAgICAgICAgJiYgX19sIDw9IDEKICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0
cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQog
ICAgICAgICAgICBfX3YgPSBfX2w7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAg
ICAgICAgIF9fZmNhY2hlX3R5cGUqIF9fZm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8p
OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUu
Y19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9m
YWxzZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3Ry
YWl0c190eXBlOjpsZW5ndGgoX190cnVlKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19m
YWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAg
Zm9yIChzaXplX3QgX19wb3MgPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAg
ICBib29sIF9fdGVzdGYgPSBfX2MgPT0gX19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9v
bCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190
ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19m
YWxzZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0
dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk
b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAg
IHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9
OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg
ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChf
X3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g
J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fbCA+PSAo
LTMyNzY3LTEpICYmIF9fbCA8PSAzMjc2NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxzaG9y
dD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46
OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25z
dAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1tfTV9leHRyYWN0X2J1ZmZlcl9sZW5ndGhdID0g
eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5p
dHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0
cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf
YmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
dHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9f
bCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgIF9fdiA9
IHN0YXRpY19jYXN0PGludD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3Rf
YnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg
ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf
X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw
KQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFj
dF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRy
YWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoK
ICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwog
ICAgICBsb25nIGxvbmcgX19sbCA9IHN0cnRvbGwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7
CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nh
bml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbGw7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBf
X3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNl
OwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
YXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywg
Jl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYm
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX191bCA8PSA2NTUzNSkK
ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVs
c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsK
CgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9Owog
ICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAg
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBz
dHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh
bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYg
X191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0
cmFjdF9idWZmZXJfbGVuZ3RoXSA9IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01f
ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2Up
OwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
MDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwg
X19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg
ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9f
bG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bDsKICAgICAgZWxzZQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoK
ICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAg
ICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX191bGwg
PSBzdHJ0b3VsbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAq
X19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAg
X192ID0gX191bGw7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9f
dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVu
Z3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBf
X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBmbG9hdCBf
X2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2VyciAmIGlv
c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh
bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3Yg
PSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK
ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29u
c3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0g
eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0
eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGRvdWJsZSBfX2QgPSBz
dHJ0b2QoX194dHJjLCAmX19zYW5pdHkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAn
XDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2Q7CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QK
ICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydc
MCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsK
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgZG91YmxlIF9fbGQg
PSBzdHJ0b2xkKF9feHRyYywgJl9fc2FuaXR5KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFz
ZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkg
PT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19s
ZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAg
cmV0dXJuIF9fYmVnOwogICAgfQojIDY3OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoK
ICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdz
IF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19i
YXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAg
IF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNl
OjpzaG93YmFzZSkpOwoKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVu
Z3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog
X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB2b2lkKiBf
X3ZwID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwg
X19iYXNlKSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdnA7CiAgICAgIGVsc2UKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVy
IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAgICBfX3BhZChfUmFJdGVy
IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywKICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmaWxsX24oX19zLCBfX2ZpbGwpOwogICAgICBy
ZXR1cm4gX19zICsgX19wYWRkaW5nOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1RhZz4KICAgIF9PdXRJdGVyCiAgICBfX3Bh
ZChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcsIF9UYWcpCiAgICB7
CiAgICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpfX3MgPSBfX2ZpbGw7ICsrX19zOyB9
CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBfX3BhZChfT3V0SXRlciBf
X3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpCiAgICB7CiAgICAgIHJldHVybiBfX3Bh
ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICB9CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK
ICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLAogICAg
ICAgICAgICAgICAgICBfQ2hhclQgLCBpbnQgLAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29u
c3QqICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogKQog
IHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
PgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3BhZF9udW1lcmljKG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzLAog
ICAgICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBpbnQgX193aWR0aCwgX0NoYXJUIGNvbnN0
KiBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbWlkZGxlLCBfQ2hh
clQgY29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50IF9fcGFkZGluZyA9IF9fd2lkdGggLSAoX19s
YXN0IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3BhZGRpbmcgPCAwKQogICAgICAgIF9fcGFkZGlu
ZyA9IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBpb3Nf
YmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3BhZGRpbmcgPT0g
MCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdAogICAgICAgICAgICAgICAgICAgICAgICAg
fHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVybmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0ICE9
IF9fbWlkZGxlKQogICAgICAgIHsKICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg
ICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX3MpOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MyID0gX19z
OwoKICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBpb3NfYmFzZTo6bGVmdCkKICAg
ICAgICB7CiAgICAgICAgICBfX3BhZChfX3MyLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgICAg
ICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MzID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX3MyKTsKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3Bh
ZChfX3MzLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hl
PF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Mg
PSBfX2lvLmZsYWdzKCk7CgogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhh
KSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAg
ICAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwg
X191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX2ZpcnN0OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7CiAgICAg
ICAgICBpZiAoX192KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10
LT5fTV90cnVlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJzdCArIF9f
Zm10LT5fTV90cnVlbmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmRh
dGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX2ZhbHNlbmFt
ZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBf
X3MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2dyb3VwX2RpZ2l0cyhfQ2hhclQqIF9f
cywgX0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3QqIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAg
ICAgICAgY2hhciBjb25zdCogX19ncmVuZCwgX0NoYXJUIGNvbnN0KiBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0
IC0gX19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fZ3Jv
dXBfZGlnaXRzKF9fcywgX19ncnNlcCwKICAgICAgICAgICAgICAoX19ncm91cGluZyArIDEgPT0g
X19ncmVuZCA/IF9fZ3JvdXBpbmcgOiBfX2dyb3VwaW5nICsgMSksCiAgICAgICAgICAgICAgX19n
cmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOwogICAgICAgICAgX19maXJzdCA9
IF9fbGFzdCAtICpfX2dyb3VwaW5nOwogICAgICAgICAgKl9fcysrID0gX19ncnNlcDsKICAgICAg
ICB9CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAg
ICAgICB9CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7
CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0
eXBlbmFtZSBfVmFsdWVUPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2ludGVnZXIoX091dEl0
ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgYm9vbCBfX25lZywKICAgICAg
ICAgICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51
bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0OwogICAgICBfQ2hhclQgX19k
aWdpdHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9udCA9IF9fZGlnaXRzICsgX01fcm9v
bTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAg
IGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFy
VD46Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCogX190YWJsZSA9IF9fZm10LT5fU19s
aXRlcmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19i
YXNlZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxkKTsKICAgICAgX0NoYXJUKiBfX3Np
Z25fZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgp
CiAgICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNlKQog
ICAgICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19m
cm9udCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9
IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgICBpZiAoX19mbGFn
cyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICotLV9f
ZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3ggKwogICAgICAgICAgICAgICAg
ICAgICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8gMSA6IDApXTsKICAgICAg
ICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICB7CiAg
ICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsKICAg
ICAgICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAgICAgICAgIGlmIChfX2ZsYWdzICYg
aW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9f
ZnJvbnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBd
OwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19f
diAlIDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsKICAgICAgICAgIF9f
c2lnbl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChfX25lZyB8fCAoX19mbGFncyAmIGlv
c19iYXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRl
cmFsc1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2Zt
dC0+X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkpCiAgICAgICAgcmV0dXJuIGNvcHko
X19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoKICAgICAgaWYgKCFfX2ZtdC0+X01f
dXNlX2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywg
X19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnJv
bnQsIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CgogICAgICBfQ2hhclQqIF9fcCA9
IF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19mcm9udCA8IF9fc2lnbl9lbmQpCiAgICAgICAgKl9f
cCsrID0gKl9fZnJvbnQrKzsKICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91
cGluZy5kYXRhKCk7CiAgICAgIF9fZnJvbnQgPSBfX2dyb3VwX2RpZ2l0cyhfX3AsIF9fZm10LT5f
TV90aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9fZ3IgKyBfX2ZtdC0+X01fZ3JvdXBpbmcu
c2l6ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOwogICAgICByZXR1cm4gX19w
YWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaWdpdHMsIF9fcCwgX19mcm9udCk7CiAgICB9CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAg
ICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAg
ICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2Vy
KF9fcywgX19pbywgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z
dAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2Us
IF9fdik7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3V2ID0gX192Owog
ICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAg
ICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19iLCBfX2ZpbGwsIF9fbmVnLCBfX3V2
KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9fb3V0cHV0X2lu
dGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3YpOyB9CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBfX291dHB1dF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBf
Q2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fc3B0ciwgc2l6
ZV90IF9fc2xlbikKICAgIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4KICAgIF9fb3V0cHV0X2Zsb2F0KG9zdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiBfX3MsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAg
X0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewog
ICAgICBzaXplX3QgX19wYWRkaW5nID0gX19pby53aWR0aCgpID4gc3RyZWFtc2l6ZShfX3NsZW4p
ID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsKICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25z
dCYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm
aWVsZDsKICAgICAgY29uc3QgY2hhciogY29uc3QgX19lcHRyID0gX19zcHRyICsgX19zbGVuOwoK
ICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgewoKICAg
ICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9
PSAnLScpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9fc3B0
cik7CiAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICsrX19zcHRyOwogICAgICAgICAg
IH0KICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgICAg
IF9fcGFkZGluZyA9IDA7CiAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0gaW9z
X2Jhc2U6OmxlZnQpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGws
IF9fcGFkZGluZyk7CiAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KCiAgICAgIGNo
YXIgX19kZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOwogICAg
ICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGZvciAoOyBfX3NwdHIgIT0gX19lcHRyOyArK19fcywg
KytfX3NwdHIpCiAgICAgICB7CgogICAgICAgICBpZiAoKl9fc3B0ciA9PSBfX2RlY2ltYWxfcG9p
bnQpCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7CgogICAgICAgICBl
bHNlCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsKICAgICAgIH0KCiAgICAg
IGlmIChfX3BhZGRpbmcpCiAgICAgICAgX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAg
ICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIGJvb2wKICBfX2J1
aWxkX2Zsb2F0X2Zvcm1hdChpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k
aWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgIHsK
ICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9u
KCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBfX21h
eF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwogICAgICBzaXplX3Qg
X19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICBpZiAoX19idWlsZF9mbG9hdF9m
b3JtYXQoX19pbywgX19mYnVmLCAwLCBfX3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmludGYo
X19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9
IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxv
YXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192KSBj
b25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xp
bWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsKICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMg
PSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgaWYgKF9fcHJlYyA+IF9fbWF4X3ByZWMpCiAgICAg
ICAgX19wcmVjID0gX19tYXhfcHJlYzsKCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAy
XTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKCiAgICAgIGlm
IChfX2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsICdMJywgX19wcmVjKSkKICAgICAg
ICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAgIGVs
c2UKICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAgICAg
cmV0dXJuIF9fb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYsIF9fc2xlbik7
CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
IGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10
ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAg
ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh
c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2Fz
ZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1h
c2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkgewog
ICAgICAgIF9PdXRJdGVyIF9fczIgPSBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxs
LCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAg
ICAgcmV0dXJuIF9fczI7CiAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikgewogICAgICAgIF9faW8u
ZmxhZ3MoX19mbXQpOwogICAgICAgIHRocm93OwogICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVjdCBfV2Vl
a2RheW5hbWVzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX1dlZWtk
YXluYW1lczxjaGFyLCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19u
YW1lc1sxNF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IGNoYXIq
IGNvbnN0CiAgICBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAg
ICB7CiAgICAgICJTdW4iLCAiU3VuZGF5IiwKICAgICAgIk1vbiIsICJNb25kYXkiLCAiVHVlIiwg
IlR1ZXNkYXkiLCAiV2VkIiwgIldlZG5lc2RheSIsCiAgICAgICJUaHUiLCAiVGh1cnNkYXkiLCAi
RnJpIiwgIkZyaWRheSIsICJTYXQiLCAiU2F0dXJkYXkiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM8d2NoYXJfdCwgX0R1bW15Pgog
ICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29uc3QgX1NfbmFtZXNbMTRdOyB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCB3Y2hhcl90KiBjb25zdAogICAgX1dlZWtk
YXluYW1lczx3Y2hhcl90LCBfRHVtbXk+OjpfU19uYW1lc1sxNF0gPQogICAgewogICAgICBMIlN1
biIsIEwiU3VuZGF5IiwKICAgICAgTCJNb24iLCBMIk1vbmRheSIsIEwiVHVlIiwgTCJUdWVzZGF5
IiwgTCJXZWQiLCBMIldlZG5lc2RheSIsCiAgICAgIEwiVGh1IiwgTCJUaHVyc2RheSIsIEwiRnJp
IiwgTCJGcmlkYXkiLCBMIlNhdCIsIEwiU2F0dXJkYXkiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+CiAgICBzdHJ1Y3QgX01vbnRobmFt
ZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfTW9udGhuYW1lczxj
aGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzI0XTsg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QKICAg
IF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsKICAgICAgIkph
biIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFyeSIsICJNYXIiLCAiTWFyY2giLAogICAgICAi
QXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAiSnVuIiwgIkp1bmUiLAogICAgICAiSnVsIiwg
Ikp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwKICAgICAgIk9jdCIs
ICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIsICJEZWMiLCAiRGVjZW1iZXIiCiAgICB9OwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9Nb250aG5hbWVzPHdjaGFy
X3QsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IHdjaGFyX3QqIGNvbnN0IF9TX25hbWVzWzI0
XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3Qgd2NoYXJfdCogY29u
c3QKICAgIF9Nb250aG5hbWVzPHdjaGFyX3QsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsK
ICAgICAgTCJKYW4iLCBMIkphbnVhcnkiLCBMIkZlYiIsIEwiRmVicnVhcnkiLCBMIk1hciIsIEwi
TWFyY2giLAogICAgICBMIkFwciIsIEwiQXByaWwiLCBMIk1heSIsIEwiTWF5IiwgTCJKdW4iLCBM
Ikp1bmUiLAogICAgICBMIkp1bCIsIEwiSnVseSIsIEwiQXVnIiwgTCJBdWd1c3QiLCBMIlNlcCIs
IEwiU2VwdGVtYmVyIiwKICAgICAgTCJPY3QiLCBMIk9jdG9iZXIiLCBMIk5vdiIsIEwiTm92ZW1i
ZXIiLCBMIkRlYyIsIEwiRGVjZW1iZXIiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2RheW5hbWVzKQogICAg
ICAgIHsKICAgICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzE0
XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDE0OyArK19faSkKICAgICAgICAg
ICAgX01fZGF5bmFtZXNbX19pXSA9IF9XZWVrZGF5bmFtZXM8X0NoYXJUPjo6X1NfbmFtZXNbX19p
XTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAgICAgaW50IF9fcmVt
YWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1sxNF07CiAgICAgIGl0ZXJfdHlwZSBfX291dCA9
IF9fbWF0Y2hfcGFyYWxsZWwoX19zLCBfX2VuZCwgMTQsIF9NX2RheW5hbWVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4sIF9fYXRf
ZW9mKTsKICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYgKF9fYXRf
ZW9mKSBfX2VyciB8PSBfX2lvLmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEgfHwKICAg
ICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sx
XT4+MSkpCiAgICAgICAgX190LT50bV93ZGF5ID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAgICAgIGVs
c2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291dDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfbW9udGhuYW1l
KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAg
IHsKICAgICAgaWYgKCFfTV9tb250aG5hbWVzKQogICAgICAgIHsKICAgICAgICAgIF9NX21vbnRo
bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOwogICAgICAgICAgZm9yIChpbnQg
X19pID0gMDsgX19pIDwgMjQ7ICsrX19pKQogICAgICAgICAgICBfTV9tb250aG5hbWVzW19faV0g
PSBfTW9udGhuYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAgYm9v
bCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQgX19t
YXRjaGVzWzI0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbCggX19z
LCBfX2VuZCwgMjQsIF9NX21vbnRobmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4sIF9fYXRfZW9mKTsKICAgICAgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYgKF9fYXRfZW9mKSBfX2VyciB8PSBfX2lv
LmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEgfHwKICAgICAgICAgIF9fcmVtYWluID09
IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpCiAgICAgICAgX190
LT50bV9tb24gPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9
IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgNDIgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDMzICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfb3N0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry
ZWFtLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMg
NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVm
IG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAg
dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAg
ICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5p
dChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAg
ICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v
c3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChf
X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7
CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpo
ZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMt
Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsg
fQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAg
ewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19m
bXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAg
ICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAg
fQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9f
bikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv
bmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8
ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
bG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
cHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNv
bnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZh
dGU6CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX29zdHJl
YW1fdHlwZSYpOwoKICAgICAgYmFzaWNfb3N0cmVhbShjb25zdCBfX29zdHJlYW1fdHlwZSYpOwoK
ICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAg
ICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9v
czsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFt
PF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAg
ICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNl
cHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9N
X29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3Ig
Ym9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v
dXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyBy
ZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBj
aGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsg
fQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNo
YXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xh
c3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykK
ICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mp
KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndp
ZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hh
clQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+
JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAg
ICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJl
YW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf
dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f
bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf
X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10
ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBp
b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVt
cHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0g
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAg
ICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK
ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m
aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs
b25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+
cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2Zu
dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAg
ICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK
ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m
aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChk
b3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAq
dGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg
ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwg
X19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1i
dWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAgIF9feHRy
Y3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYg
KCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2Mp
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAg
ICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkKICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNp
emUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+
c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVm
KCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
dHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBl
IF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgp
ICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1
ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAg
ICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0
b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCkt
PnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIg
PT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFp
bGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vl
a3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9v
bCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQog
ICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0
KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZF9jaGFyKGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0
IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVu
LCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CgogICAgICBpbnRfdHlw
ZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAg
ICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX3BsZW4pKTsKICAgICAgdHJhaXRzX3R5cGU6OmFz
c2lnbihfX3BhZHMsIF9fcGxlbiwgX19pb3MuZmlsbCgpKTsKCiAgICAgIGNoYXJfdHlwZSogX19i
ZWc7CiAgICAgIGNoYXJfdHlwZSogX19lbmQ7CiAgICAgIHNpemVfdCBfX21vZCA9IDA7CiAgICAg
IHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gX19pb3Mu
ZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2ZtdCA9PSBpb3Nf
YmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJf
dHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAg
X19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2ZtdCA9PSBpb3NfYmFz
ZTo6aW50ZXJuYWwpCiAgICAgICAgewoKCgogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hl
PF9DaGFyVD4gX19jYWNoZV90eXBlOwogICAgICAgICAgX19jYWNoZV90eXBlIGNvbnN0KiBfX2Zt
dCA9IF9fY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW9zKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1Nf
bWludXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3BsdXMgPSB0cmFpdHNfdHlwZTo6
ZmluZChfX29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7CiAgICAgICAgICBib29sIF9fdGVz
dHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1czsKICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0gX19v
bGRzWzBdID09ICcwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19vbGRzWzFdID09
ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsKCiAgICAgICAgICBpZiAoX190ZXN0aGV4KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBdOwogICAgICAgICAg
ICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBfX21vZCArPSAyOwogICAg
ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMgKyBfX21vZCk7
CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbiAtIF9fbW9kOwogICAgICAgICAgICAg
IF9fZW5kID0gX19wYWRzOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rz
aWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19tb2QgKz0gX19wbGVuOwogICAgICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19zaWduID0gX19taW51cyA/IF9fbWludXMgKyAxOiBf
X3BsdXMgKyAxOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihf
X29sZHMpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19vbGRzOwogICAgICAg
ICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX3NpZ24gKyBfX3BsZW4pOwog
ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX3BhZHMs
IF9fcGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl
bjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBf
X2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19l
bmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgfQoKICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0gX19iZWdsZW4gLSBf
X21vZCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBf
Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f
bGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0
LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f
dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9f
bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5
IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp
bHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4g
X19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19v
dXQsIF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywg
X19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChf
X291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0No
YXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv
ZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRp
Y19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBp
ZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFk
X2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAg
X19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAg
ICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgogICAgICB0eXBlZGVmIGNoYXJfdHJh
aXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6
OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2NsZW4gPSBfX2N0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAg
ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kg
PSAwOyBfX2kgPD0gX19jbGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQu
d2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3Rh
dGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
dyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7Cgog
ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsKICAg
ICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f
b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAg
fQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6
OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291
dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIq
PihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4g
PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAg
ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7CiAgICAgICAgICAg
ICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAg
ICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAg
dHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0
YSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj
X2Nhc3Q8c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBf
X2xlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFk
cywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAg
ICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIHN0cmVhbXNpemUgX19y
ZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAgICAgICAgIF9fb3V0Lndp
ZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAgICAgICAgICBfX291dC5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7
CiAgICB9Cn0KIyAyNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAy
IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAg
IHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRp
ZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25v
c2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9n
ZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBf
X2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0Yygp
OwoKICAgICAgICAgICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUtPmlzKGN0eXBl
X2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7
CgoKCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f
aXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYo
KnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f
aW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYg
KCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z
dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy
ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt
PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0
ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u
KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp
OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg
ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7
CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYgX19jZXJiKQog
ICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0
KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg
ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYg
KF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8
IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNo
YXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+
cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2J1ZnZhbCAhPSBfX2VvZikK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAg
ICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMSkKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg
ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wg
X190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24g
LSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg
ICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3Ni
LT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwog
ICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9f
biAtIDEpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAg
ICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUg
X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5
cGUgX19jOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50
X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9f
dGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAg
ICAgICAgICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAg
ICAgICAgICAgJiYgKF9fdGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg
X19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lk
ZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwg
IV9fdGVzdHB1dCkKICAgICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5z
YnVtcGMoKTsKICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAg
ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg
ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAg
ICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAo
X01fZ2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90
eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAg
ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19j
ID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxp
bTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRi
YWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9f
cyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig
PSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1w
YygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAg
ICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAg
IF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAg
ICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190
ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50
OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAg
ICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp
bSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo
KF9NX2djb3VudCA9PSBfX24gLSAxICYmICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRlbGltKQogICAg
ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsK
ICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1Zigp
LT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f
biA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg
ICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAg
ICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog
ICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg
ICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0
cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlm
IChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5p
bl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3Ry
ZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICAgICAgX01fZ2Nv
dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90
eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAg
ICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9fYykgPT0gX19lb2YpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX2VvZiA9
PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3JldCA9PSBfX3NiLT5wdWJzeW5jKCkp
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0
eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAg
cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19w
b3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUo
b2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9z
X2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9
IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoK
CiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0
KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9f
aW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19z
dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0
eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0g
MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAg
ICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmlj
X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5
cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBf
X251bSAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJh
Y3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg
ICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0
c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5
cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2lu
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAg
ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpjaGFyX3R5cGUgX19jaGFy
X3R5cGU7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAg
ICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7
CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19p
bnRfdHlwZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9mOwogICAgICBib29sIF9fdGVzdHNwOwoK
ICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgfQogICAgICB3aGlsZSAoIV9f
dGVzdGVvZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAoIV9fdGVzdGVvZiAmJiAhX190ZXN0c3Ap
CiAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJl
YW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlw
ZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19z
dHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4
dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy
YihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19z
dHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAg
ICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19j
YXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgY29uc3QgX19jdHlw
ZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgX19p
bnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUg
X19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBl
LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbiAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9
IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX190
ZXN0ZW9mKQogICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9f
aW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAg
X19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkK
ICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBl
IF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3Ry
ZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAg
ICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0g
ZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNl
KCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAg
ICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsK
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg
ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRf
dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
PT0gX19pZGVsaW07CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAg
ICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9f
Y2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0g
X19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYm
ICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikK
ICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0K
IyAyOTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyA0MCAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBj
bGFzcyBiYXNpY19zdHJpbmdidWYgOiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9j
IGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50
X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190
eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlw
ZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxj
aGFyX3R5cGUsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgcHJpdmF0
ZToKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks
IF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3Ry
LAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i
YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9z
dHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2lu
aXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAg
ICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoK
CiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAg
ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0g
bWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAg
ICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4p
OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAg
ICAgewogICAgICAgIF9NX3N0cmluZyA9IF9fczsKICAgICAgICBfTV9zdHJpbmdidWZfaW5pdChf
TV9tb2RlKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fc3Ry
aW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgICAgewoKCgoKCiAgICAg
ICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcuc2l6ZSgpOwoKCgoKCiAgICAgICAgX01fYnVmX3Np
emVfb3B0ID0gNTEyOwogICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgaWYgKF9NX21v
ZGUgJiBpb3NfYmFzZTo6YXRlKQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgX01fYnVmX3Np
emUpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICB9
CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7CiAgICAg
ICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICByZXR1
cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpncHRyKCkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50
X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7
CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRy
YWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAg
IHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBp
ZiAoX19zICYmIF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgX01fc3RyaW5nID0gX19zdHJp
bmdfdHlwZShfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAg
ICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CgogICAgICB2aXJ0dWFsIHBvc190
eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4g
fCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhw
b3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgaW50CiAg
ICAgIF9NX3JlYWxseV9zeW5jKF9fc2l6ZV90eXBlIF9faSwgX19zaXplX3R5cGUgX19vKQogICAg
ICB7CiAgICAgICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9N
X3N0cmluZy5kYXRhKCkpOwogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jh
c2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7
CiAgICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfTV9zdHJpbmcuc2l6ZSgpOwoKICAgICAgICBf
TV9idWYgPSBfX2Jhc2U7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICB0aGlzLT5z
ZXRnKF9fYmFzZSwgX19iYXNlICsgX19pLCBfX2Jhc2UgKyBfX2xlbik7CiAgICAgICAgaWYgKF9f
dGVzdG91dCkKICAgICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFz
ZSArIF9fbGVuKTsKICAgICAgICAgICAgX01fb3V0X2N1ciArPSBfX287CiAgICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19p
c3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9y
X3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBl
OwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAg
ICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
ZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJp
bmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmlu
Z2J1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oY29uc3Qg
X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShf
X251bGwpLCBfTV9zdHJpbmdidWYoX19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAg
eyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICB+YmFzaWNfaXN0cmluZ3N0cmVh
bSgpCiAgICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29u
c3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmlu
Z2J1Zik7IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBf
X3N0cmluZ190eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9
OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgog
ICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0
cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19v
c3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJp
bmdidWY7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmluZ3N0
cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCkKICAgICAgOiBf
X29zdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6Om91
dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAog
ICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUgX19zdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjpvdXQpCiAgICAgIDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3Ry
LCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1
Zik7IH0KCiAgICAgIH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19z
dHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9j
YXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdf
dHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7
IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAg
eyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFz
aWNfc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9j
YXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUg
aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBv
c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZf
dHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z
dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHByaXZh
dGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUg
X19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5
cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJp
bmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3Qg
X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgX19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lv
c3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX20pCiAgICAgIHsgdGhp
cy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX3N0cmluZ3N0cmVhbSgpCiAg
ICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7
IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmlu
Z190eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9Owp9CgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NzdHJlYW0udGNjIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NzdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBlCiAgICBiYXNpY19z
dHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHBiYWNrZmFpbChpbnRfdHlw
ZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0
c190eXBlOjplb2YoKSk7CiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2lu
X2JlZyA8IF9NX2luX2N1cjsKCgoKICAgICAgaWYgKF9fdGVzdHBvcykKICAgICAgICB7CiAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSwg
dGhpcy0+Z3B0cigpWy0xXSkKICAgICAgICAgICAgICAmJiAhX190ZXN0ZW9mKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAqX01faW5fY3VyID0g
dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9fcmV0ID0gX19j
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0
c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg
Y2xhc3MgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlw
ZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX3JldCk7CiAgICAgIGJvb2wgX190ZXN0d3JpdGUg
PSBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0
ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CgoKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAg
ICAgewogICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3NpemVfdHlwZSBfX2xlbiA9IG1heChfTV9idWZfc2l6ZSwgX01fYnVmX3NpemVfb3B0KTsK
ICAgICAgICAgICAgICBfX2xlbiAqPSAyOwoKICAgICAgICAgICAgICBpZiAoX190ZXN0d3JpdGUp
CiAgICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnNwdXRjKF9fYyk7CiAgICAgICAgICAgICAg
ZWxzZSBpZiAoX19sZW4gPD0gX01fc3RyaW5nLm1heF9zaXplKCkpCiAgICAgICAgICAgICAgICB7
CgogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcgPSB0aGlzLT5zdHIoKTsKICAgICAgICAgICAg
ICAgICAgX01fc3RyaW5nLnJlc2VydmUoX19sZW4pOwogICAgICAgICAgICAgICAgICBfTV9idWZf
c2l6ZSA9IHN0YXRpY19jYXN0PGludF90eXBlPihfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9N
X3JlYWxseV9zeW5jKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX01fb3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAgICAgICAgICAgICAgICAq
X01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAg
ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9fYzsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly
IF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBf
X3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21v
ZGUgJiBpb3NfYmFzZTo6aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgYm9vbCBf
X3Rlc3RvdXQgPSBfX21vZGUgJiBpb3NfYmFzZTo6b3V0ICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6
b3V0OwogICAgICBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQgJiYgX193
YXkgIT0gaW9zX2Jhc2U6OmN1cjsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSAmJiAoKF9fdGVzdGlu
ICE9IF9fdGVzdG91dCkgfHwgX190ZXN0Ym90aCkpCiAgICAgICAgewogICAgICAgICAgY2hhcl90
eXBlKiBfX2JlZyA9IF9NX2J1ZjsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJpID0gX19udWxs
OwogICAgICAgICAgY2hhcl90eXBlKiBfX2N1cm8gPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5
cGUqIF9fZW5kaSA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRvID0gX19udWxs
OwoKICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
Y3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBfX2VuZGkgPSB0aGlzLT5lZ3B0cigp
OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19jdXJvID0gdGhpcy0+cHB0cigpOwogICAgICAgICAgICAgIF9fZW5kbyA9
IHRoaXMtPmVwcHRyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBvZmZfdHlwZSBfX25ld29m
ZmkgPSAwOwogICAgICAgICAgb2ZmX3R5cGUgX19uZXdvZmZvID0gMDsKICAgICAgICAgIGlmIChf
X3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdv
ZmZpID0gX19jdXJpIC0gX19iZWc7CiAgICAgICAgICAgICAgX19uZXdvZmZvID0gX19jdXJvIC0g
X19iZWc7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fd2F5ID09IGlvc19iYXNl
OjplbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2VuZGkgLSBf
X2JlZzsKICAgICAgICAgICAgICBfX25ld29mZm8gPSBfX2VuZG8gLSBfX2JlZzsKICAgICAgICAg
ICAgfQoKICAgICAgICAgIGlmIChfX3Rlc3RpbgogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSAr
IF9fb2ZmID49IDAgJiYgX19lbmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9f
b2ZmOwogICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91dAogICAgICAgICAgICAgICYmIF9fbmV3b2ZmbyAr
IF9fb2ZmID49IDAgJiYgX19lbmRvIC0gX19iZWcgPj0gX19uZXdvZmZvICsgX19vZmYpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19uZXdvZmZvICsgX19vZmYg
LSAoX01fb3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAgX19yZXQgPSBwb3NfdHlwZShf
X25ld29mZm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHNlZWtwb3MocG9zX3R5cGUgX19zcCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAg
IHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwogICAgICBv
ZmZfdHlwZSBfX3BvcyA9IF9fc3AuX01fcG9zaXRpb24oKTsKICAgICAgY2hhcl90eXBlKiBfX2Jl
ZyA9IF9fbnVsbDsKICAgICAgY2hhcl90eXBlKiBfX2VuZCA9IF9fbnVsbDsKICAgICAgYm9vbCBf
X3Rlc3RpbiA9IF9fbW9kZSAmIGlvc19iYXNlOjppbiAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Omlu
OwogICAgICBib29sIF9fdGVzdG91dCA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQgJiYgX01fbW9k
ZSAmIGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewogICAgICAg
ICAgX19iZWcgPSB0aGlzLT5lYmFjaygpOwogICAgICAgICAgX19lbmQgPSB0aGlzLT5lZ3B0cigp
OwogICAgICAgIH0KICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICB7CiAgICAgICAgICBfX2Jl
ZyA9IHRoaXMtPnBiYXNlKCk7CiAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXpl
OwogICAgICAgIH0KCiAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19i
ZWcpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgX01faW5f
Y3VyID0gX01faW5fYmVnICsgX19wb3M7CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAg
ICAgICBfTV9vdXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAg
ICAgICAgIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoX19wb3MpKTsKICAgICAgICB9CgogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9Cgp9CiMgMzY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3NzdHJlYW0uaCIgMiAzCiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvc3N0cmVhbSIgMiAz
CiMgMzggIlRhYmxlLmgiIDIKCgoKCiMgMSAiRXh0SERVLmgiIDEKIyAyOSAiRXh0SERVLmgiCiMg
MSAiS2V5d29yZFQuaCIgMQojIDE0ICJLZXl3b3JkVC5oIgojIDEgIktleURhdGEuaCIgMQojIDI2
ICJLZXlEYXRhLmgiCiMgMSAiQ0NmaXRzLmgiIDEKIyAyOCAiQ0NmaXRzLmgiCiMgMSAiL2hvbWUv
ZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAxCiMgMzkgIi9ob21lL2Rvcm1hbi9jcHAvaW5j
bHVkZS9maXRzaW8uaCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgNDAgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9m
aXRzaW8uaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyA0MyAiL2hv
bWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAyCgoKIyAxICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDEgMwojIDQ2ICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvZml0c2lvLmgiIDIKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvbGltaXRz
LmgiIDEgMwojIDQ3ICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvZml0c2lvLmgiIDIKIyA3NiAi
L2hvbWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIgogICAgdHlwZWRlZiBsb25nIExPTkdM
T05HOwoKCgoKIyAxICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvbG9uZ25hbS5oIiAxCiMgODIg
Ii9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIgMgojIDIwNyAiL2hvbWUvZG9ybWFu
L2NwcC9pbmNsdWRlL2ZpdHNpby5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyIHR0eXBlWzcw
XTsKICAgIGxvbmcgdGJjb2w7CiAgICBpbnQgdGRhdGF0eXBlOwogICAgb2ZmX3QgdHJlcGVhdDsK
ICAgIGRvdWJsZSB0c2NhbGU7CiAgICBkb3VibGUgdHplcm87CiAgICBsb25nIHRudWxsOwogICAg
Y2hhciBzdHJudWxsWzIwXTsKICAgIGNoYXIgdGZvcm1bMTBdOwogICAgbG9uZyB0d2lkdGg7Cn10
Y29sdW1uOwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgZmlsZWhhbmRsZTsKICAgIGludCBk
cml2ZXI7CiAgICBpbnQgb3Blbl9jb3VudDsKICAgIGNoYXIgKmZpbGVuYW1lOwogICAgaW50IHZh
bGlkY29kZTsKICAgIG9mZl90IGZpbGVzaXplOwogICAgb2ZmX3QgbG9nZmlsZXNpemU7CiAgICBp
bnQgbGFzdGhkdTsKICAgIG9mZl90IGJ5dGVwb3M7CiAgICBvZmZfdCBpb19wb3M7CiAgICBpbnQg
Y3VyYnVmOwogICAgaW50IGN1cmhkdTsKICAgIGludCBoZHV0eXBlOwogICAgaW50IHdyaXRlbW9k
ZTsKICAgIGludCBtYXhoZHU7CiAgICBvZmZfdCBoZWFkc3RhcnRbMTAwMCArIDFdOwogICAgb2Zm
X3QgaGVhZGVuZDsKICAgIG9mZl90IG5leHRrZXk7CiAgICBvZmZfdCBkYXRhc3RhcnQ7CiAgICBp
bnQgdGZpZWxkOwogICAgbG9uZyBvcmlncm93czsKICAgIGxvbmcgbnVtcm93czsKICAgIG9mZl90
IHJvd2xlbmd0aDsKICAgIHRjb2x1bW4gKnRhYmxlcHRyOwogICAgb2ZmX3QgaGVhcHN0YXJ0Owog
ICAgbG9uZyBoZWFwc2l6ZTsKCgogICAgaW50IHJlcXVlc3RfY29tcHJlc3NfdHlwZTsKICAgIGxv
bmcgcmVxdWVzdF90aWxlc2l6ZVs2XTsKICAgIGludCByZXF1ZXN0X3JpY2VfbmJpdHM7CgogICAg
aW50IGNvbXByZXNzaW1nOwogICAgY2hhciB6Y21wdHlwZVsxMl07CiAgICBpbnQgY29tcHJlc3Nf
dHlwZTsKICAgIGludCB6Yml0cGl4OwogICAgaW50IHpuZGltOwogICAgbG9uZyB6bmF4aXNbNl07
CiAgICBsb25nIHRpbGVzaXplWzZdOwogICAgbG9uZyBtYXh0aWxlbGVuOwogICAgbG9uZyBtYXhl
bGVtOwoKICAgIGludCBjbl9jb21wcmVzc2VkOwogICAgaW50IGNuX3VuY29tcHJlc3NlZDsKICAg
IGludCBjbl96c2NhbGU7CiAgICBpbnQgY25fenplcm87CiAgICBpbnQgY25femJsYW5rOwoKICAg
IGRvdWJsZSB6c2NhbGU7CiAgICBkb3VibGUgenplcm87CiAgICBpbnQgemJsYW5rOwoKICAgIGlu
dCByaWNlX2Jsb2Nrc2l6ZTsKICAgIGludCByaWNlX25iaXRzOwp9IEZJVFNmaWxlOwoKdHlwZWRl
ZiBzdHJ1Y3QKewogICAgaW50IEhEVXBvc2l0aW9uOwogICAgRklUU2ZpbGUgKkZwdHI7Cn1maXRz
ZmlsZTsKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgZml0c2ZpbGUgKmZwdHI7CiAgICBpbnQgY29s
bnVtOwogICAgY2hhciBjb2xuYW1lWzcwXTsKICAgIGludCBkYXRhdHlwZTsKICAgIGludCBpb3R5
cGU7CgoKCiAgICB2b2lkICphcnJheTsKICAgIGxvbmcgcmVwZWF0OwogICAgbG9uZyB0bG1pbjsK
ICAgIGxvbmcgdGxtYXg7CiAgICBjaGFyIHR1bml0WzcwXTsKICAgIGNoYXIgdGRpc3BbNzBdOwoK
fSBpdGVyYXRvckNvbDsKIyA0ODMgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIK
ZXh0ZXJuICJDIiB7CgoKCgppbnQgZml0c19nZXRfdG9rZW4oY2hhciAqKnB0ciwgY2hhciAqZGVs
aW1pdGVyLCBjaGFyICp0b2tlbiwgaW50ICppc2FudW1iZXIpOwppbnQgZmZpdXJsKGNoYXIgKnVy
bCwgY2hhciAqdXJsdHlwZSwgY2hhciAqaW5maWxlLAogICAgICAgICAgICAgICAgICAgIGNoYXIg
Km91dGZpbGUsIGNoYXIgKmV4dHNwZWMsIGNoYXIgKnJvd2ZpbHRlciwKICAgICAgICAgICAgICAg
ICAgICBjaGFyICpiaW5zcGVjLCBjaGFyICpjb2xzcGVjLCBpbnQgKnN0YXR1cyk7CmludCBmZnJ0
bm0oY2hhciAqdXJsLCBjaGFyICpyb290bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZleHRzKGNo
YXIgKmV4dHNwZWMsIGludCAqZXh0bnVtLCBjaGFyICpleHRuYW1lLCBpbnQgKmV4dHZlcnMsCiAg
ICAgICAgICBpbnQgKmhkdXR5cGUsIGNoYXIgKmNvbG5hbWUsIGNoYXIgKnJvd2V4cHJlc3MsIGlu
dCAqc3RhdHVzKTsKaW50IGZmZXh0bihjaGFyICp1cmwsIGludCAqZXh0ZW5zaW9uX251bSwgaW50
ICpzdGF0dXMpOwppbnQgZmZ1cmx0KGZpdHNmaWxlICpmcHRyLCBjaGFyICp1cmxUeXBlLCBpbnQg
KnN0YXR1cyk7CmludCBmZmJpbnMoY2hhciAqYmluc3BlYywgaW50ICppbWFnZXR5cGUsIGludCAq
aGF4aXMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbG5hbWVbNF1bNzFdLCBkb3VibGUg
Km1pbmluLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICptYXhpbiwgZG91YmxlICpiaW5z
aXplaW4sCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIG1pbm5hbWVbNF1bNzFdLCBjaGFyIG1h
eG5hbWVbNF1bNzFdLAogICAgICAgICAgICAgICAgICAgICAgY2hhciBiaW5uYW1lWzRdWzcxXSwg
ZG91YmxlICp3ZWlnaHQsIGNoYXIgKnd0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCAq
cmVjaXAsIGludCAqc3RhdHVzKTsKaW50IGZmYmlucihjaGFyICoqYmluc3BlYywgY2hhciAqY29s
bmFtZSwgZG91YmxlICptaW5pbiwKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICptYXhp
biwgZG91YmxlICpiaW5zaXplaW4sIGNoYXIgKm1pbm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKm1heG5hbWUsIGNoYXIgKmJpbm5hbWUsIGludCAqc3RhdHVzKTsKaW50IGZmaW1w
b3J0X2ZpbGUoIGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqY29udGVudHMsIGludCAqc3RhdHVzICk7
CmludCBmZnJ3cmcoIGNoYXIgKnJvd2xpc3QsIGxvbmcgbWF4cm93cywgaW50IG1heHJhbmdlcywg
aW50ICpudW1yYW5nZXMsCiAgICAgIGxvbmcgKm1pbnJvdywgbG9uZyAqbWF4cm93LCBpbnQgKnN0
YXR1cyk7CgoKaW50IGZmb21lbShmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBtb2RlLCB2b2lkICoqYnVmZnB0ciwKICAgICAgICAgICBzaXplX3QgKmJ1ZmZzaXplLCBzaXpl
X3QgZGVsdGFzaXplLAogICAgICAgICAgIHZvaWQgKigqbWVtX3JlYWxsb2MpKHZvaWQgKnAsIHNp
emVfdCBuZXdzaXplKSwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZm9wZW4oZml0c2Zp
bGUgKipmcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlvbW9kZSwgaW50ICpzdGF0dXMp
OwppbnQgZmZkb3BuKGZpdHNmaWxlICoqZnB0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBp
b21vZGUsIGludCAqc3RhdHVzKTsKaW50IGZmdG9wbihmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNo
YXIgKmZpbGVuYW1lLCBpbnQgaW9tb2RlLCBpbnQgKnN0YXR1cyk7CmludCBmZmlvcG4oZml0c2Zp
bGUgKipmcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlvbW9kZSwgaW50ICpzdGF0dXMp
OwppbnQgZmZyZW9wZW4oZml0c2ZpbGUgKm9wZW5mcHRyLCBmaXRzZmlsZSAqKm5ld2ZwdHIsIGlu
dCAqc3RhdHVzKTsKaW50IGZmaW5pdChmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNoYXIgKmZpbGVu
YW1lLCBpbnQgKnN0YXR1cyk7CmludCBmZmltZW0oZml0c2ZpbGUgKipmcHRyLCB2b2lkICoqYnVm
ZnB0ciwKICAgICAgICAgICBzaXplX3QgKmJ1ZmZzaXplLCBzaXplX3QgZGVsdGFzaXplLAogICAg
ICAgICAgIHZvaWQgKigqbWVtX3JlYWxsb2MpKHZvaWQgKnAsIHNpemVfdCBuZXdzaXplKSwKICAg
ICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnRwbHQoZml0c2ZpbGUgKipmcHRyLCBjb25zdCBj
aGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGVtcG5hbWUsCiAgICAgICAgICAgaW50ICpzdGF0
dXMpOwppbnQgZmZmbHVzKGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBmZmNsb3Mo
Zml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmZGVsdChmaXRzZmlsZSAqZnB0ciwg
aW50ICpzdGF0dXMpOwppbnQgZmZmbG5tKGZpdHNmaWxlICpmcHRyLCBjaGFyICpmaWxlbmFtZSwg
aW50ICpzdGF0dXMpOwppbnQgZmZmbG1kKGZpdHNmaWxlICpmcHRyLCBpbnQgKmZpbGVtb2RlLCBp
bnQgKnN0YXR1cyk7CgoKZmxvYXQgZmZ2ZXJzKGZsb2F0ICp2ZXJzaW9uKTsKdm9pZCBmZnVwY2go
Y2hhciAqc3RyaW5nKTsKdm9pZCBmZmdlcnIoaW50IHN0YXR1cywgY2hhciAqZXJydGV4dCk7CnZv
aWQgZmZwbXNnKGNvbnN0IGNoYXIgKmVycl9tZXNzYWdlKTsKdm9pZCBmZnBtcmsodm9pZCk7Cmlu
dCBmZmdtc2coY2hhciAqZXJyX21lc3NhZ2UpOwp2b2lkIGZmY21zZyh2b2lkKTsKdm9pZCBmZmNt
cmsodm9pZCk7CnZvaWQgZmZycHJ0KEZJTEUgKnN0cmVhbSwgaW50IHN0YXR1cyk7CnZvaWQgZmZj
bXBzKGNoYXIgKnRlbXBsdCwgY2hhciAqY29sbmFtZSwgaW50IGNhc2VzZW4sIGludCAqbWF0Y2gs
CiAgICAgICAgICAgaW50ICpleGFjdCk7CmludCBmZnRrZXkoY2hhciAqa2V5d29yZCwgaW50ICpz
dGF0dXMpOwppbnQgZmZ0cmVjKGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmbmNoayhm
aXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZrZXluKGNoYXIgKmtleXJvb3QsIGlu
dCB2YWx1ZSwgY2hhciAqa2V5bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZua2V5KGludCB2YWx1
ZSwgY2hhciAqa2V5cm9vdCwgY2hhciAqa2V5bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZna2Ns
KGNoYXIgKmNhcmQpOwppbnQgZmZkdHlwKGNoYXIgKmN2YWwsIGNoYXIgKmR0eXBlLCBpbnQgKnN0
YXR1cyk7CmludCBmZnBzdmMoY2hhciAqY2FyZCwgY2hhciAqdmFsdWUsIGNoYXIgKmNvbW0sIGlu
dCAqc3RhdHVzKTsKaW50IGZmZ2tubShjaGFyICpjYXJkLCBjaGFyICpuYW1lLCBpbnQgKmxlbmd0
aCwgaW50ICpzdGF0dXMpOwppbnQgZmZndGhkKGNoYXIgKnRtcGx0LCBjaGFyICpjYXJkLCBpbnQg
KmhkdHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZhc2ZtKGNoYXIgKnRmb3JtLCBpbnQgKmRhdGFj
b2RlLCBsb25nICp3aWR0aCwgaW50ICpkZWNpbSwgaW50ICpzdGF0dXMpOwppbnQgZmZibmZtKGNo
YXIgKnRmb3JtLCBpbnQgKmRhdGFjb2RlLCBsb25nICpyZXBlYXQsIGxvbmcgKndpZHRoLCBpbnQg
KnN0YXR1cyk7CmludCBmZmdhYmMoaW50IHRmaWVsZHMsIGNoYXIgKip0Zm9ybSwgaW50IHNwYWNl
LCBsb25nICpyb3dsZW4sIGxvbmcgKnRiY29sLAogICAgICAgICAgIGludCAqc3RhdHVzKTsKCgpp
bnQgZmZwa3koZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgY2hhciAqa2V5bmFtZSwgdm9p
ZCAqdmFsdWUsCiAgICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZnByZWMo
Zml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmcGNv
bShmaXRzZmlsZSAqZnB0ciwgY29uc3QgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZw
dW50KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp1bml0LCBpbnQgKnN0YXR1
cyk7CmludCBmZnBoaXMoZml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNoYXIgKmhpc3RvcnksIGludCAq
c3RhdHVzKTsKaW50IGZmcGRhdChmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZn
c3RtKGNoYXIgKnRpbWVzdHIsIGludCAqdGltZXJlZiwgaW50ICpzdGF0dXMpOwppbnQgZmZnc2R0
KGludCAqZGF5LCBpbnQgKm1vbnRoLCBpbnQgKnllYXIsIGludCAqc3RhdHVzKTsKaW50IGZmZHQy
cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBjaGFyICpkYXRlc3RyLCBpbnQgKnN0YXR1
cyk7CmludCBmZnRtMnMoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsIGlu
dCBtaW51dGUsIGRvdWJsZSBzZWNvbmQsCiAgICAgICAgICBpbnQgZGVjaW1hbHMsIGNoYXIgKmRh
dGVzdHIsIGludCAqc3RhdHVzKTsKaW50IGZmczJkdChjaGFyICpkYXRlc3RyLCBpbnQgKnllYXIs
IGludCAqbW9udGgsIGludCAqZGF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnMydG0oY2hhciAqZGF0
ZXN0ciwgaW50ICp5ZWFyLCBpbnQgKm1vbnRoLCBpbnQgKmRheSwgaW50ICpob3VyLAogICAgICAg
ICAgaW50ICptaW51dGUsIGRvdWJsZSAqc2Vjb25kLCBpbnQgKnN0YXR1cyk7CmludCBmZnBreXUo
Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsK
aW50IGZmcGt5cyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqdmFsdWUsIGNo
YXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZwa2xzKGZpdHNmaWxlICpmcHRyLCBjaGFyICpr
ZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0YXR1cyk7CmludCBmZnBsc3co
Zml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmcGt5bChmaXRzZmlsZSAqZnB0ciwg
Y2hhciAqa2V5bmFtZSwgaW50IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBm
ZnBreWooZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNv
bW0sIGludCAqc3RhdHVzKTsKaW50IGZmcGt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt
ZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3Rh
dHVzKTsKaW50IGZmcGt5ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFs
dWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZm
cGt5ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVj
aW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBreWQoZml0c2Zp
bGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpj
b21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwa3ljKGZpdHNmaWxlICpmcHRyLCBj
aGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAg
ICAgIGludCAqc3RhdHVzKTsKaW50IGZmcGt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt
ZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpz
dGF0dXMpOwppbnQgZmZwa2ZjKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq
dmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50
IGZmcGtmbShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50
IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwa3l0KGZp
dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nIGludHZhbCwgZG91YmxlIGZyYWMsIGNo
YXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnB0ZG0oIGZpdHNmaWxlICpm
cHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgbmF4ZXNbXSwgaW50ICpzdGF0dXMpOwoK
CmludCBmZnBrbnMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleXJvb3QsIGludCBuc3RhcnQsIGlu
dCBua2V5LCBjaGFyICp2YWx1ZVtdLAogICAgICAgICAgIGNoYXIgKmNvbW1bXSwgaW50ICpzdGF0
dXMpOwppbnQgZmZwa25sKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlyb290LCBpbnQgbnN0YXJ0
LCBpbnQgbmtleSwgaW50ICp2YWx1ZSwKICAgICAgICAgICBjaGFyICpjb21tW10sIGludCAqc3Rh
dHVzKTsKaW50IGZmcGtuaihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFy
dCwgaW50IG5rZXksIGxvbmcgKnZhbHVlLAogICAgICAgICAgIGNoYXIgKmNvbW1bXSwgaW50ICpz
dGF0dXMpOwppbnQgZmZwa25mKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlyb290LCBpbnQgbnN0
YXJ0LCBpbnQgbmtleSwgZmxvYXQgKnZhbHVlLAogICAgICAgICAgIGludCBkZWNpbSwgY2hhciAq
Y29tbVtdLCBpbnQgKnN0YXR1cyk7CmludCBmZnBrbmUoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtl
eXJvb3QsIGludCBuc3RhcnQsIGludCBua2V5LCBmbG9hdCAqdmFsdWUsCiAgICAgICAgICAgaW50
IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAqc3RhdHVzKTsKaW50IGZmcGtuZyhmaXRzZmlsZSAq
ZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFydCwgaW50IG5rZXksIGRvdWJsZSAqdmFsdWUs
CiAgICAgICAgICAgaW50IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAqc3RhdHVzKTsKaW50IGZm
cGtuZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFydCwgaW50IG5rZXks
IGRvdWJsZSAqdmFsdWUsCiAgICAgICAgICAgaW50IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAq
c3RhdHVzKTsKaW50IGZmY3BreShmaXRzZmlsZSAqaW5mcHRyLGZpdHNmaWxlICpvdXRmcHRyLGlu
dCBpbmNvbCxpbnQgb3V0Y29sLAogICAgICAgICAgIGNoYXIgKnJvb3RuYW1lLCBpbnQgKnN0YXR1
cyk7CgoKaW50IGZmcGhwcyggZml0c2ZpbGUgKmZwdHIsIGludCBiaXRwaXgsIGludCBuYXhpcywg
bG9uZyBuYXhlc1tdLCBpbnQgKnN0YXR1cyk7CmludCBmZnBocHIoIGZpdHNmaWxlICpmcHRyLCBp
bnQgc2ltcGxlLCBpbnQgYml0cGl4LCBpbnQgbmF4aXMsIGxvbmcgbmF4ZXNbXSwKICAgICAgICAg
ICAgbG9uZyBwY291bnQsIGxvbmcgZ2NvdW50LCBpbnQgZXh0ZW5kLCBpbnQgKnN0YXR1cyk7Cmlu
dCBmZnBodGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgaW50IHRm
aWVsZHMsIGNoYXIgKip0dHlwZSwKICAgICAgICAgIGxvbmcgKnRiY29sLCBjaGFyICoqdGZvcm0s
IGNoYXIgKip0dW5pdCwgY2hhciAqZXh0bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZwaGJuKGZp
dHNmaWxlICpmcHRyLCBsb25nIG5heGlzMiwgaW50IHRmaWVsZHMsIGNoYXIgKip0dHlwZSwKICAg
ICAgICAgIGNoYXIgKip0Zm9ybSwgY2hhciAqKnR1bml0LCBjaGFyICpleHRuYW1lLCBsb25nIHBj
b3VudCwgaW50ICpzdGF0dXMpOwoKCmludCBmZnBrdHAoZml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNo
YXIgKmZpbGVuYW1lLCBpbnQgKnN0YXR1cyk7CgoKaW50IGZmZ2hzcChmaXRzZmlsZSAqZnB0ciwg
aW50ICpuZXhpc3QsIGludCAqbm1vcmUsIGludCAqc3RhdHVzKTsKaW50IGZmZ2hwcyhmaXRzZmls
ZSAqZnB0ciwgaW50ICpuZXhpc3QsIGludCAqcG9zaXRpb24sIGludCAqc3RhdHVzKTsKCgppbnQg
ZmZtYWt5KGZpdHNmaWxlICpmcHRyLCBpbnQgbnJlYywgaW50ICpzdGF0dXMpOwppbnQgZmZtcmt5
KGZpdHNmaWxlICpmcHRyLCBpbnQgbnJlYywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdueGsoZml0
c2ZpbGUgKmZwdHIsIGNoYXIgKippbmNsaXN0LCBpbnQgbmluYywgY2hhciAqKmV4Y2xpc3QsCiAg
ICAgICAgICAgaW50IG5leGMsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmZ3JlYyhm
aXRzZmlsZSAqZnB0ciwgaW50IG5yZWMsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZm
Z2NyZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqY2FyZCwgaW50ICpzdGF0
dXMpOwppbnQgZmZndW50KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp1bml0
LCBpbnQgKnN0YXR1cyk7CmludCBmZmdreW4oZml0c2ZpbGUgKmZwdHIsIGludCBua2V5LCBjaGFy
ICprZXluYW1lLCBjaGFyICprZXl2YWwsIGNoYXIgKmNvbW0sCiAgICAgICAgICAgaW50ICpzdGF0
dXMpOwppbnQgZmZna2V5KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICprZXl2
YWwsIGNoYXIgKmNvbW0sCiAgICAgICAgICAgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2t5KCBmaXRz
ZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBjaGFyICprZXluYW1lLCB2b2lkICp2YWx1ZSwKICAg
ICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZmdreXMoZml0c2ZpbGUgKmZw
dHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7
CmludCBmZmdrbHMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKip2YWx1ZSwg
Y2hhciAqY29tbSwgaW50ICpzdGF0dXMpCjsKaW50IGZmZ2t5bChmaXRzZmlsZSAqZnB0ciwgY2hh
ciAqa2V5bmFtZSwgaW50ICp2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZn
a3lqKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nICp2YWx1ZSwgY2hhciAqY29t
bSwgaW50ICpzdGF0dXMpOwppbnQgZmZna3llKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1l
LCBmbG9hdCAqdmFsdWUsIGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZna3lkKGZpdHNm
aWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLGNoYXIgKmNvbW0saW50ICpz
dGF0dXMpOwppbnQgZmZna3ljKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq
dmFsdWUsIGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZna3ltKGZpdHNmaWxlICpmcHRy
LCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwpp
bnQgZmZna3l0KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nICppdmFsdWUsIGRv
dWJsZSAqZHZhbHVlLAogICAgICAgICAgIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsKaW50IGZm
Z3RkbShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG1heGRpbSwgaW50ICpuYXhpcywg
bG9uZyBuYXhlc1tdLAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZHRkbShmaXRzZmls
ZSAqZnB0ciwgY2hhciAqdGRpbXN0ciwgaW50IGNvbG51bSwgaW50IG1heGRpbSwKICAgICAgICAg
ICBpbnQgKm5heGlzLCBsb25nIG5heGVzW10sIGludCAqc3RhdHVzKTsKCgppbnQgZmZna25zKGZp
dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgY2hhciAq
dmFsdWVbXSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZna25s
KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgaW50
ICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZna25q
KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgbG9u
ZyAqdmFsdWUsCiAgICAgICAgICAgaW50ICpuZm91bmQsIGludCAqc3RhdHVzKTsKaW50IGZmZ2tu
ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgaW50IG5zdGFydCwgaW50IG5tYXgsIGZs
b2F0ICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
a25kKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwg
ZG91YmxlICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQg
ZmZoMnN0KGZpdHNmaWxlICpmcHRyLCBjaGFyICoqaGVhZGVyLCBpbnQgKnN0YXR1cyk7CgoKaW50
IGZmZ2hwcihmaXRzZmlsZSAqZnB0ciwgaW50IG1heGRpbSwgaW50ICpzaW1wbGUsIGludCAqYml0
cGl4LCBpbnQgKm5heGlzLAogICAgICAgICAgbG9uZyBuYXhlc1tdLCBsb25nICpwY291bnQsIGxv
bmcgKmdjb3VudCwgaW50ICpleHRlbmQsIGludCAqc3RhdHVzKTsKCmludCBmZmdodGIoZml0c2Zp
bGUgKmZwdHIsaW50IG1heGZpZWxkLCBsb25nICpuYXhpczEsIGxvbmcgKm5heGlzMiwKICAgICAg
ICAgICBpbnQgKnRmaWVsZHMsIGNoYXIgKip0dHlwZSwgbG9uZyAqdGJjb2wsIGNoYXIgKip0Zm9y
bSwgY2hhciAqKnR1bml0LAogICAgICAgICAgIGNoYXIgKmV4dG5hbWUsIGludCAqc3RhdHVzKTsK
CmludCBmZmdoYm4oZml0c2ZpbGUgKmZwdHIsIGludCBtYXhmaWVsZCwgbG9uZyAqbmF4aXMyLCBp
bnQgKnRmaWVsZHMsCiAgICAgICAgICAgY2hhciAqKnR0eXBlLCBjaGFyICoqdGZvcm0sIGNoYXIg
Kip0dW5pdCwgY2hhciAqZXh0bmFtZSwKICAgICAgICAgICBsb25nICpwY291bnQsIGludCAqc3Rh
dHVzKTsKCgppbnQgZmZ1a3koZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgY2hhciAqa2V5
bmFtZSwgdm9pZCAqdmFsdWUsCiAgICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7Cmlu
dCBmZnVjcmQoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNhcmQsIGludCAq
c3RhdHVzKTsKaW50IGZmdWt5dShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAq
Y29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3lzKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlu
YW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZ1a2xzKGZp
dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSwgaW50
ICpzdGF0dXMpOwppbnQgZmZ1a3lsKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQg
dmFsdWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsKaW50IGZmdWt5aihmaXRzZmlsZSAqZnB0
ciwgY2hhciAqa2V5bmFtZSwgbG9uZyB2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwpp
bnQgZmZ1a3lmKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCB2YWx1ZSwgaW50
IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3llKGZp
dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCB2YWx1ZSwgaW50IGRlY2ltLCBjaGFy
ICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3lnKGZpdHNmaWxlICpmcHRy
LCBjaGFyICprZXluYW1lLCBkb3VibGUgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAg
ICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmdWt5ZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5
bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQg
KnN0YXR1cyk7CmludCBmZnVreWMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGZsb2F0
ICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwpp
bnQgZmZ1a3ltKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLCBp
bnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnVrZmMo
Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGZsb2F0ICp2YWx1ZSwgaW50IGRlY2ltLCBj
aGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a2ZtKGZpdHNmaWxlICpm
cHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0s
CiAgICAgICAgICBpbnQgKnN0YXR1cyk7CgoKaW50IGZmbXJlYyhmaXRzZmlsZSAqZnB0ciwgaW50
IG5rZXksIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmbWNyZChmaXRzZmlsZSAqZnB0
ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqY2FyZCwgaW50ICpzdGF0dXMpOwppbnQgZmZtbmFtKGZp
dHNmaWxlICpmcHRyLCBjaGFyICpvbGRuYW1lLCBjaGFyICpuZXduYW1lLCBpbnQgKnN0YXR1cyk7
CmludCBmZm1jb20oZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNvbW0sIGlu
dCAqc3RhdHVzKTsKaW50IGZmbWt5dShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hh
ciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZta3lzKGZpdHNmaWxlICpmcHRyLCBjaGFyICpr
ZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0YXR1cyk7CmludCBmZm1rbHMo
Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZhbHVlLCBjaGFyICpjb21tLGlu
dCAqc3RhdHVzKTsKaW50IGZmbWt5bChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgaW50
IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZm1reWooZml0c2ZpbGUgKmZw
dHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsK
aW50IGZmbWt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFsdWUsIGlu
dCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWt5ZShm
aXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hh
ciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWt5ZyhmaXRzZmlsZSAqZnB0
ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAg
ICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZm1reWQoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtl
eW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50
ICpzdGF0dXMpOwppbnQgZmZta3ljKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9h
dCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsK
aW50IGZmbWt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwg
aW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZta2Zj
KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwg
Y2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWtmbShmaXRzZmlsZSAq
ZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21t
LAogICAgICAgICAgaW50ICpzdGF0dXMpOwoKCmludCBmZmlyZWMoZml0c2ZpbGUgKmZwdHIsIGlu
dCBua2V5LCBjaGFyICpjYXJkLCBpbnQgKnN0YXR1cyk7CmludCBmZmlrZXkoZml0c2ZpbGUgKmZw
dHIsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmaWt5dShmaXRzZmlsZSAqZnB0ciwg
Y2hhciAqa2V5bmFtZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZpa3lzKGZpdHNm
aWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0
YXR1cyk7CmludCBmZmlrbHMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZh
bHVlLCBjaGFyICpjb21tLGludCAqc3RhdHVzKTsKaW50IGZmaWt5bChmaXRzZmlsZSAqZnB0ciwg
Y2hhciAqa2V5bmFtZSwgaW50IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBm
ZmlreWooZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNv
bW0sIGludCAqc3RhdHVzKTsKaW50IGZmaWt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt
ZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3Rh
dHVzKTsKaW50IGZmaWt5ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFs
dWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZm
aWt5ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVj
aW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmlreWQoZml0c2Zp
bGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpj
b21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZpa3ljKGZpdHNmaWxlICpmcHRyLCBj
aGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAg
ICAgIGludCAqc3RhdHVzKTsKaW50IGZmaWt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt
ZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpz
dGF0dXMpOwppbnQgZmZpa2ZjKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq
dmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50
IGZmaWtmbShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50
IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwoKCmludCBmZmRrZXko
Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGludCAqc3RhdHVzKTsKaW50IGZmZHJlYyhm
aXRzZmlsZSAqZnB0ciwgaW50IGtleXBvcywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdoZG4oZml0
c2ZpbGUgKmZwdHIsIGludCAqY2hkdW51bSk7CmludCBmZmdoZHQoZml0c2ZpbGUgKmZwdHIsIGlu
dCAqZXh0dHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZnaGFkKGZpdHNmaWxlICpmcHRyLCBsb25n
ICpoZWFkc3RhcnQsIGxvbmcgKmRhdGFzdGFydCwgbG9uZyAqZGF0YWVuZCwKICAgICAgICAgICBp
bnQgKnN0YXR1cyk7CmludCBmZmdob2YoZml0c2ZpbGUgKmZwdHIsIG9mZl90ICpoZWFkc3RhcnQs
IG9mZl90ICpkYXRhc3RhcnQsIG9mZl90ICpkYXRhZW5kLAogICAgICAgICAgIGludCAqc3RhdHVz
KTsKaW50IGZmZ2lwcihmaXRzZmlsZSAqZnB0ciwgaW50IG1heGF4aXMsIGludCAqaW1ndHlwZSwg
aW50ICpuYXhpcywKICAgICAgICAgICBsb25nICpuYXhlcywgaW50ICpzdGF0dXMpOwppbnQgZmZn
aWR0KGZpdHNmaWxlICpmcHRyLCBpbnQgKmltZ3R5cGUsIGludCAqc3RhdHVzKTsKaW50IGZmZ2lk
bShmaXRzZmlsZSAqZnB0ciwgaW50ICpuYXhpcywgaW50ICpzdGF0dXMpOwppbnQgZmZnaXN6KGZp
dHNmaWxlICpmcHRyLCBpbnQgbmxlbiwgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKCgppbnQg
ZmZtYWhkKGZpdHNmaWxlICpmcHRyLCBpbnQgaGR1bnVtLCBpbnQgKmV4dHR5cGUsIGludCAqc3Rh
dHVzKTsKaW50IGZmbXJoZChmaXRzZmlsZSAqZnB0ciwgaW50IGhkdW1vdiwgaW50ICpleHR0eXBl
LCBpbnQgKnN0YXR1cyk7CmludCBmZm1uaGQoZml0c2ZpbGUgKmZwdHIsIGludCBleHR0eXBlLCBj
aGFyICpoZHVuYW1lLCBpbnQgaGR1dmVycywKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBm
ZnRoZHUoZml0c2ZpbGUgKmZwdHIsIGludCAqbmhkdSwgaW50ICpzdGF0dXMpOwppbnQgZmZjcmhk
KGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBmZmNyaW0oZml0c2ZpbGUgKmZwdHIs
IGludCBiaXRwaXgsIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKaW50IGZm
Y3J0YihmaXRzZmlsZSAqZnB0ciwgaW50IHRibHR5cGUsIGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxk
cywgY2hhciAqKnR0eXBlLAogICAgICAgICAgIGNoYXIgKip0Zm9ybSwgY2hhciAqKnR1bml0LCBj
aGFyICpleHRuYW1lLCBpbnQgKnN0YXR1cyk7CmludCBmZmlpbWcoZml0c2ZpbGUgKmZwdHIsIGlu
dCBiaXRwaXgsIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKaW50IGZmaXRh
YihmaXRzZmlsZSAqZnB0ciwgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxkcywg
Y2hhciAqKnR0eXBlLAogICAgICAgICAgIGxvbmcgKnRiY29sLCBjaGFyICoqdGZvcm0sIGNoYXIg
Kip0dW5pdCwgY2hhciAqZXh0bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZpYmluKGZpdHNmaWxl
ICpmcHRyLGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxkcywgY2hhciAqKnR0eXBlLCBjaGFyICoqdGZv
cm0sCiAgICAgICAgICAgY2hhciAqKnR1bml0LCBjaGFyICpleHRuYW1lLCBsb25nIHBjb3VudCwg
aW50ICpzdGF0dXMpOwppbnQgZmZyc2ltKGZpdHNmaWxlICpmcHRyLCBpbnQgYml0cGl4LCBpbnQg
bmF4aXMsIGxvbmcgKm5heGVzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRoZHUoZml0c2ZpbGUgKmZw
dHIsIGludCAqaGR1dHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZjb3B5KGZpdHNmaWxlICppbmZw
dHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgbW9yZWtleXMsIGludCAqc3RhdHVzKTsKaW50IGZm
Y3BmbChmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50IHByZXYsIGludCBj
dXIsIGludCBmb2xsb3csCiAgICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmY3BoZChmaXRz
ZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZjcGR0
KGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBm
ZmNoZmwoZml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmY2RmbChmaXRzZmlsZSAq
ZnB0ciwgaW50ICpzdGF0dXMpOwoKaW50IGZmcmRlZihmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0
dXMpOwppbnQgZmZoZGVmKGZpdHNmaWxlICpmcHRyLCBpbnQgbW9yZWtleXMsIGludCAqc3RhdHVz
KTsKaW50IGZmcHRocChmaXRzZmlsZSAqZnB0ciwgbG9uZyB0aGVhcCwgaW50ICpzdGF0dXMpOwoK
aW50IGZmY3N1bShmaXRzZmlsZSAqZnB0ciwgbG9uZyBucmVjLCB1bnNpZ25lZCBsb25nICpzdW0s
IGludCAqc3RhdHVzKTsKdm9pZCBmZmVzdW0odW5zaWduZWQgbG9uZyBzdW0sIGludCBjb21wbG0s
IGNoYXIgKmFzY2lpKTsKdW5zaWduZWQgbG9uZyBmZmRzdW0oY2hhciAqYXNjaWksIGludCBjb21w
bG0sIHVuc2lnbmVkIGxvbmcgKnN1bSk7CmludCBmZnBja3MoZml0c2ZpbGUgKmZwdHIsIGludCAq
c3RhdHVzKTsKaW50IGZmdXBjayhmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZ2
Y2tzKGZpdHNmaWxlICpmcHRyLCBpbnQgKmRhdGFzdGF0dXMsIGludCAqaGR1c3RhdHVzLCBpbnQg
KnN0YXR1cyk7CmludCBmZmdja3MoZml0c2ZpbGUgKmZwdHIsIHVuc2lnbmVkIGxvbmcgKmRhdGFz
dW0sIHVuc2lnbmVkIGxvbmcgKmhkdXN1bSwKICAgIGludCAqc3RhdHVzKTsKCgppbnQgZmZwc2Ns
KGZpdHNmaWxlICpmcHRyLCBkb3VibGUgc2NhbGUsIGRvdWJsZSB6ZXJvLCBpbnQgKnN0YXR1cyk7
CmludCBmZnBudWwoZml0c2ZpbGUgKmZwdHIsIGxvbmcgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsK
aW50IGZmdHNjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgZG91YmxlIHNjYWxlLCBkb3Vi
bGUgemVybywgaW50ICpzdGF0dXMpOwppbnQgZmZ0bnVsKGZpdHNmaWxlICpmcHRyLCBpbnQgY29s
bnVtLCBsb25nIG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnNudWwoZml0c2ZpbGUgKmZw
dHIsIGludCBjb2xudW0sIGNoYXIgKm51bHN0cmluZywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdj
bm8oZml0c2ZpbGUgKmZwdHIsIGludCBjYXNlc2VuLCBjaGFyICp0ZW1wbHQsIGludCAqY29sbnVt
LAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZ2NubihmaXRzZmlsZSAqZnB0ciwgaW50
IGNhc2VzZW4sIGNoYXIgKnRlbXBsdCwgY2hhciAqY29sbmFtZSwKICAgICAgICAgICBpbnQgKmNv
bG51bSwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ3RjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51
bSwgaW50ICp0eXBlY29kZSwgbG9uZyAqcmVwZWF0LAogICAgICAgICAgIGxvbmcgKndpZHRoLCBp
bnQgKnN0YXR1cyk7CmludCBmZmduY2woZml0c2ZpbGUgKmZwdHIsIGludCAqbmNvbHMsIGludCAq
c3RhdHVzKTsKaW50IGZmZ25ydyhmaXRzZmlsZSAqZnB0ciwgbG9uZyAqbnJvd3MsIGludCAqc3Rh
dHVzKTsKaW50IGZmZ2FjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgY2hhciAqdHR5cGUs
IGxvbmcgKnRiY29sLAogICAgICAgICAgIGNoYXIgKnR1bml0LCBjaGFyICp0Zm9ybSwgZG91Ymxl
ICp0c2NhbCwgZG91YmxlICp0emVybywKICAgICAgICAgICBjaGFyICp0bnVsbCwgY2hhciAqdGRp
c3AsIGludCAqc3RhdHVzKTsKaW50IGZmZ2JjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwg
Y2hhciAqdHR5cGUsIGNoYXIgKnR1bml0LAogICAgICAgICAgIGNoYXIgKmR0eXBlLCBsb25nICpy
ZXBlYXQsIGRvdWJsZSAqdHNjYWwsIGRvdWJsZSAqdHplcm8sCiAgICAgICAgICAgbG9uZyAqdG51
bGwsIGNoYXIgKnRkaXNwLCBpbnQgKnN0YXR1cyk7CmludCBmZmdyc3ooZml0c2ZpbGUgKmZwdHIs
IGxvbmcgKm5yb3dzLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjZHcoZml0c2ZpbGUgKmZwdHIsIGlu
dCBjb2xudW0sIGludCAqd2lkdGgsIGludCAqc3RhdHVzKTsKCgppbnQgZmZncHh2KGZpdHNmaWxl
ICpmcHRyLCBpbnQgZGF0YXR5cGUsIGxvbmcgKmZpcnN0cGl4LCBsb25nIG5lbGVtLAogICAgICAg
ICAgdm9pZCAqbnVsdmFsLCB2b2lkICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK
aW50IGZmZ3B4ZihmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nICpmaXJzdHBpeCwg
bG9uZyBuZWxlbSwKICAgICAgICAgICB2b2lkICphcnJheSwgY2hhciAqbnVsbGFycmF5LCBpbnQg
KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3YoZml0c2ZpbGUgKmZwdHIsIGludCBkYXRh
dHlwZSwgbG9uZyAqYmxjLCBsb25nICp0cmMsIGxvbmcgKmluYywKICAgICAgICAgIHZvaWQgKm51
bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwdihm
aXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK
ICAgICAgICAgIHZvaWQgKm51bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0
YXR1cyk7CmludCBmZmdwZihmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nIGZpcnN0
ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFycmF5LCBjaGFyICpudWxsYXJyYXks
IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwdmIoZml0c2ZpbGUgKmZwdHIsIGxv
bmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLCB1bnNpZ25lZAogICAgICAgICAg
IGNoYXIgbnVsdmFsLCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh
dHVzKTsKaW50IGZmZ3B2dWkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3Rl
bGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgdW5zaWdu
ZWQgc2hvcnQgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7Cmlu
dCBmZmdwdmkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25n
IG5lbGVtLAogICAgICAgICAgIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBpbnQgKmFueW51
bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncHZ1aihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg
bG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBudWx2
YWwsIHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0
YXR1cyk7CmludCBmZmdwdmooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3Rl
bGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGxvbmcgbnVsdmFsLCBsb25nICphcnJheSwgaW50
ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2amooZml0c2ZpbGUgKmZwdHIsIGxvbmcg
Z3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIExPTkdMT05HIG51
bHZhbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
cHZ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs
ZW0sCiAgICAgICAgICAgdW5zaWduZWQgaW50IG51bHZhbCwgdW5zaWduZWQgaW50ICphcnJheSwg
aW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2ayhmaXRzZmlsZSAqZnB0ciwgbG9u
ZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgaW50IG51bHZh
bCwgaW50ICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2ZShmaXRz
ZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAg
ICAgICAgZmxvYXQgbnVsdmFsLCBmbG9hdCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1
cyk7CmludCBmZmdwdmQoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVt
LCBsb25nIG5lbGVtLAogICAgICAgICAgIGRvdWJsZSBudWx2YWwsIGRvdWJsZSAqYXJyYXksIGlu
dCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZncGZiKGZpdHNmaWxlICpmcHRyLCBsb25n
IGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBj
aGFyICphcnJheSwgY2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7Cmlu
dCBmZmdwZnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9u
ZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGNoYXIgKm51bGFycmF5
LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZpKGZpdHNmaWxlICpmcHRyLCBs
b25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBzaG9ydCAq
YXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
cGZ1aihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs
ZW0sCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQg
KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy
b3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBsb25nICphcnJheSwg
Y2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwZmpqKGZp
dHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAg
ICAgICAgICBMT05HTE9ORyAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50
ICpzdGF0dXMpOwppbnQgZmZncGZ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBm
aXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWduZWQgaW50ICphcnJheSwgY2hh
ciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwZmsoZml0c2Zp
bGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAg
ICAgIGludCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMp
OwppbnQgZmZncGZlKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwg
bG9uZyBuZWxlbSwKICAgICAgICAgICBmbG9hdCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQg
KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZkKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy
b3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBkb3VibGUgKmFycmF5
LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKCmludCBmZmcyZGIo
Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCBsb25nIG5j
b2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5zaWduZWQgY2hhciAq
YXJyYXksCiAgICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkdWko
Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgbG9uZyBu
Y29scywKICAgICAgICAgICBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIHVuc2lnbmVkIHNob3J0
ICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnMmRp
KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBzaG9ydCBudWx2YWwsIGxvbmcgbmNvbHMsCiAg
ICAgICAgICAgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBzaG9ydCAqYXJyYXksCiAgICAgICAg
ICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkdWooZml0c2ZpbGUgKmZwdHIs
IGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAg
IGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5zaWduZWQgbG9uZyAqYXJyYXksCiAgICAgICAg
ICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkaihmaXRzZmlsZSAqZnB0ciwg
bG9uZyBncm91cCwgbG9uZyBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAgbG9uZyBuYXhp
czEsIGxvbmcgbmF4aXMyLCBsb25nICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50
ICpzdGF0dXMpOwppbnQgZmZnMmRqaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgTE9OR0xP
TkcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlz
MiwgTE9OR0xPTkcgKmFycmF5LAogICAgICAgICAgIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7
CmludCBmZmcyZHVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCB1bnNpZ25lZCBpbnQgbnVs
dmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5z
aWduZWQgaW50ICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwpp
bnQgZmZnMmRrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBpbnQgbnVsdmFsLCBsb25nIG5j
b2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgaW50ICphcnJheSwKICAg
ICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnMmRlKGZpdHNmaWxlICpm
cHRyLCBsb25nIGdyb3VwLCBmbG9hdCBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAgbG9u
ZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBmbG9hdCAqYXJyYXksCiAgICAgICAgICAgaW50ICphbnlu
dWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg
ZG91YmxlIG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5heGlzMSwgbG9uZyBu
YXhpczIsIGRvdWJsZSAqYXJyYXksCiAgICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVz
KTsKCmludCBmZmczZGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGNoYXIg
bnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLCBs
b25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYXJyYXks
IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZHVpKGZpdHNmaWxlICpmcHRyLCBs
b25nIGdyb3VwLCB1bnNpZ25lZCBzaG9ydCBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAg
bG9uZyBucm93cywgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywKICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7Cmlu
dCBmZmczZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHNob3J0IG51bHZhbCwgbG9uZyBu
Y29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIGxv
bmcgbmF4aXMzLAogICAgICAgICAgIHNob3J0ICphcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh
dHVzKTsKaW50IGZmZzNkdWooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGxv
bmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMx
LCBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYXJy
YXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGooZml0c2ZpbGUgKmZwdHIs
IGxvbmcgZ3JvdXAsIGxvbmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJv
d3MsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgbG9u
ZyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGpqKGZpdHNmaWxl
ICpmcHRyLCBsb25nIGdyb3VwLCBMT05HTE9ORyBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAg
ICAgbG9uZyBucm93cywgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywKICAg
ICAgICAgICBMT05HTE9ORyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBm
ZmczZHVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCB1bnNpZ25lZCBpbnQgbnVsdmFsLCBs
b25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlz
MiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICphbnlu
dWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzNkayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg
aW50IG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25nIG5heGlz
MSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGludCAqYXJyYXksIGludCAq
YW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGUoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3Jv
dXAsIGZsb2F0IG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25n
IG5heGlzMSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGZsb2F0ICphcnJh
eSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzNkZChmaXRzZmlsZSAqZnB0ciwg
bG9uZyBncm91cCwgZG91YmxlIG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5y
b3dzLCBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGRv
dWJsZSAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZnc3ZiKGZpdHNm
aWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMs
CiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCB1bnNpZ25lZCBj
aGFyICphcnJheSwKICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3Z1aShmaXRz
ZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxj
LAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCB1bnNpZ25lZCBzaG9ydCBudWx2YWwsIHVuc2lnbmVk
IHNob3J0ICphcnJheSwKICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3ZpKGZp
dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpi
bGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBp
bnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3Z1aihmaXRzZmlsZSAqZnB0ciwgaW50
IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywg
bG9uZyAqaW5jLCB1bnNpZ25lZCBsb25nIG51bHZhbCwgdW5zaWduZWQgbG9uZyAqYXJyYXksCiAg
aW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3N2aihmaXRzZmlsZSAqZnB0ciwgaW50
IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywg
bG9uZyAqaW5jLCBsb25nIG51bHZhbCwgbG9uZyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0
YXR1cyk7CmludCBmZmdzdmpqKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMs
IGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIExPTkdMT05H
IG51bHZhbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwKICBpbnQgKnN0YXR1cyk7Cmlu
dCBmZmdzdnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5h
eGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHVuc2lnbmVkIGludCBudWx2
YWwsIHVuc2lnbmVkIGludCAqYXJyYXksCiAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50
IGZmZ3N2ayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhl
cywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCBpbnQgbnVsdmFsLCBpbnQgKmFy
cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3ZlKGZpdHNmaWxlICpmcHRy
LCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAq
dHJjLCBsb25nICppbmMsIGZsb2F0IG51bHZhbCwgZmxvYXQgKmFycmF5LCBpbnQgKmFueW51bCwg
aW50ICpzdGF0dXMpOwppbnQgZmZnc3ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQg
bmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGRv
dWJsZSBudWx2YWwsIGRvdWJsZSAqYXJyYXksIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsK
CmludCBmZmdzZmIoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAq
bmF4ZXMsIGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgY2hhciAq
YXJyYXksIGNoYXIgKmZsYWd2YWwsCiAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZm
Z3NmdWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMs
IGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgc2hvcnQgKmFycmF5
LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwKICBpbnQgKnN0YXR1cyk7CmludCBmZmdzZmko
Zml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGxvbmcg
KmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgc2hvcnQgKmFycmF5LCBjaGFyICpmbGFndmFs
LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc2Z1aihmaXRzZmlsZSAqZnB0ciwg
aW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRy
YywgbG9uZyAqaW5jLCB1bnNpZ25lZCBsb25nICphcnJheSwgY2hhciAqZmxhZ3ZhbCwgaW50ICph
bnludWwsCiAgaW50ICpzdGF0dXMpOwppbnQgZmZnc2ZqKGZpdHNmaWxlICpmcHRyLCBpbnQgY29s
bnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25n
ICppbmMsIGxvbmcgKmFycmF5LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwgaW50ICpzdGF0
dXMpOwppbnQgZmZnc2ZqaihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBs
b25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCBMT05HTE9ORyAq
YXJyYXksIGNoYXIgKmZsYWd2YWwsIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsKaW50IGZm
Z3NmdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMs
IGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgaW50ICphcnJheSwg
Y2hhciAqZmxhZ3ZhbCwgaW50ICphbnludWwsCiAgaW50ICpzdGF0dXMpOwppbnQgZmZnc2ZrKGZp
dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpi
bGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGludCAqYXJyYXksIGNoYXIgKmZsYWd2YWwsIGlu
dCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdzZmUoZml0c2ZpbGUgKmZwdHIsIGludCBj
b2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxv
bmcgKmluYywgZmxvYXQgKmFycmF5LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwgaW50ICpz
dGF0dXMpOwppbnQgZmZnc2ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMs
IGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGRvdWJsZSAq
YXJyYXksIGNoYXIgKmZsYWd2YWwsIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsKCmludCBm
ZmdncGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5l
bGVtLAogICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm
ZmdncHVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBu
ZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50
IGZmZ2dwaShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcg
bmVsZW0sCiAgICAgICAgICAgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncHVq
KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK
ICAgICAgICAgICB1bnNpZ25lZCBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZnZ3Bq
KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK
ICAgICAgICAgICBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZnZ3BqaihmaXRzZmls
ZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAg
ICAgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncHVrKGZpdHNmaWxlICpm
cHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1
bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncGsoZml0c2ZpbGUgKmZw
dHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGlu
dCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmZ2dwZShmaXRzZmlsZSAqZnB0ciwgbG9uZyBn
cm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgZmxvYXQgKmFycmF5
LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncGQoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxv
bmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGRvdWJsZSAqYXJyYXksIGludCAq
c3RhdHVzKTsKCgppbnQgZmZnY3YoIGZpdHNmaWxlICpmcHRyLCBpbnQgZGF0YXR5cGUsIGludCBj
b2xudW0sIGxvbmcgZmlyc3Ryb3csCiAgICAgICAgICAgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs
ZW0sIHZvaWQgKm51bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLAogICAgICAgICAgIGlu
dCAqc3RhdHVzKTsKaW50IGZmZ2NmKCBmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBpbnQg
Y29sbnVtLCBsb25nIGZpcnN0cm93LAogICAgICAgICAgIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5l
bGVtLCB2b2lkICphcnJheSwgY2hhciAqbnVsbGFycmF5LAogICAgICAgICAgIGludCAqYW55bnVs
LCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdnMoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxv
bmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIg
Km51bHZhbCwgY2hhciAqKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
Y2wgKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0
ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwpp
bnQgZmZnY3ZsIChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u
ZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgY2hhciBudWx2YWwsIGNoYXIgKmFy
cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY3ZiKGZpdHNmaWxlICpmcHRy
LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBs
b25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyIG51bHZhbCwgdW5zaWduZWQgY2hhciAqYXJyYXksCiAg
ICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2N2dWkoZml0c2ZpbGUg
KmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAg
ICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgdW5zaWduZWQgc2hvcnQgKmFy
cmF5LAogICAgICAgICAgIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmkoZml0
c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAog
ICAgICAgICAgIGxvbmcgbmVsZW0sIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBpbnQgKmFu
eW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY3Z1aihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51
bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg
dW5zaWduZWQgbG9uZyBudWx2YWwsIHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmFueW51bCwK
ICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmooZml0c2ZpbGUgKmZwdHIsIGludCBj
b2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVs
ZW0sIGxvbmcgbnVsdmFsLCBsb25nICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK
aW50IGZmZ2N2amooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxv
bmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIExPTkdMT05HIG51bHZhbCwgTE9O
R0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBm
ZmdjdnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp
cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgbnVsdmFsLCB1bnNp
Z25lZCBpbnQgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7Cmlu
dCBmZmdjdmsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcg
Zmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGludCBudWx2YWwsIGludCAqYXJyYXks
IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmUoZml0c2ZpbGUgKmZwdHIsIGlu
dCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcg
bmVsZW0sIGZsb2F0IG51bHZhbCwgZmxvYXQgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0
dXMpOwppbnQgZmZnY3ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93
LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlIG51bHZhbCwgZG91
YmxlICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2N2YyhmaXRzZmls
ZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAg
ICAgICAgbG9uZyBuZWxlbSwgZmxvYXQgbnVsdmFsLCBmbG9hdCAqYXJyYXksIGludCAqYW55bnVs
LCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdm0oZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxv
bmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICBsb25nIG5lbGVtLCBkb3VibGUg
bnVsdmFsLCBkb3VibGUgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
Y3goZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3Ri
aXQsCiAgICAgICAgICAgIGxvbmcgbmJpdHMsIGNoYXIgKmxhcnJheSwgaW50ICpzdGF0dXMpOwpp
bnQgZmZnY3h1aShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u
ZyBucm93cywKICAgICAgICAgICAgbG9uZyBmaXJzdGJpdCwgaW50IG5iaXRzLCB1bnNpZ25lZCBz
aG9ydCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmZ2N4dWsoZml0c2ZpbGUgKmZwdHIsIGlu
dCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsCiAgICAgICAgICAgIGxvbmcgZmly
c3RiaXQsIGludCBuYml0cywgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwoKaW50
IGZmZ2NmcyhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBm
aXJzdGVsZW0sIGxvbmcKICAgICAgICAgIG5lbGVtLCBjaGFyICoqYXJyYXksIGNoYXIgKm51bGFy
cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZsKGZpdHNmaWxlICpmcHRy
LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwgbG9uZwogICAgICAg
ICAgbmVsZW0sIGNoYXIgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAq
c3RhdHVzKTsKaW50IGZmZ2NmYihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJz
dHJvdywgbG9uZyBmaXJzdGVsZW0sIGxvbmcKICAgICAgbmVsZW0sIHVuc2lnbmVkIGNoYXIgKmFy
cmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2Nm
dWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3Rl
bGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGNoYXIgKm51bGFy
cmF5LCBpbnQgKmFueW51bCwKICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZpKGZpdHNmaWxl
ICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAg
bG9uZyBuZWxlbSwgc2hvcnQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGlu
dCAqc3RhdHVzKTsKaW50IGZmZ2NmdWooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcg
Zmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25n
ICphcnJheSwgY2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLAogICAgICBpbnQgKnN0YXR1cyk7
CmludCBmZmdjZmooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxv
bmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCBsb25nICphcnJheSwgY2hhciAqbnVsYXJy
YXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjZmpqKGZpdHNmaWxlICpmcHRy
LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBu
ZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAq
c3RhdHVzKTsKaW50IGZmZ2NmdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmly
c3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgKmFy
cmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsCiAgICAgIGludCAqc3RhdHVzKTsKaW50
IGZmZ2NmayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBm
aXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGludCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBp
bnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZlKGZpdHNmaWxlICpmcHRyLCBpbnQg
Y29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBuZWxlbSwg
ZmxvYXQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK
aW50IGZmZ2NmZChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u
ZyBmaXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGRvdWJsZSAqYXJyYXksIGNoYXIgKm51bGFy
cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZjKGZpdHNmaWxlICpmcHRy
LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBu
ZWxlbSwgZmxvYXQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh
dHVzKTsKaW50IGZmZ2NmbShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJv
dywgbG9uZyBmaXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGRvdWJsZSAqYXJyYXksIGNoYXIg
Km51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2RlcyhmaXRzZmls
ZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyByb3dudW0sIGxvbmcgKmxlbmd0aCwKICAgICAgICAg
ICBsb25nICpoZWFwYWRkciwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2Rlc3MoZml0c2ZpbGUgKmZw
dHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsIGxvbmcgKmxlbmd0aCwK
ICAgICAgICAgICBsb25nICpoZWFwYWRkciwgaW50ICpzdGF0dXMpOwoKaW50IGZmdGhlYXAoZml0
c2ZpbGUgKmZwdHIsIGxvbmcgKmhlYXBzaXplLCBsb25nICp1bnVzZWQsIGxvbmcgKm92ZXJsYXAs
CiAgICAgICAgICAgIGludCAqdmFsaWQsIGludCAqc3RhdHVzKTsKaW50IGZmY21waChmaXRzZmls
ZSAqZnB0ciwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ3RiYihmaXRzZmlsZSAqZnB0ciwgbG9uZyBm
aXJzdHJvdywgbG9uZyBmaXJzdGNoYXIsIGxvbmcgbmNoYXJzLAogICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKnZhbHVlcywgaW50ICpzdGF0dXMpOwoKCmludCBmZnBweChmaXRzZmlsZSAqZnB0ciwg
aW50IGRhdGF0eXBlLCBsb25nICpmaXJzdHBpeCwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQg
KmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBweG4oZml0c2ZpbGUgKmZwdHIsIGludCBkYXRh
dHlwZSwgbG9uZyAqZmlyc3RwaXgsIGxvbmcgbmVsZW0sCiAgICAgICAgICB2b2lkICphcnJheSwg
dm9pZCAqbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcihmaXRzZmlsZSAqZnB0ciwgaW50
IGRhdGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFy
cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcmIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs
IGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIGNoYXIgKmFy
cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3Vw
LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAq
YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcHByaShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91
cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgc2hvcnQgKmFycmF5LCBp
bnQgKnN0YXR1cyk7CmludCBmZnBwcnVqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25n
IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25nICphcnJheSwg
aW50ICpzdGF0dXMpOwppbnQgZmZwcHJqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25n
IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBsb25nICphcnJheSwgaW50ICpzdGF0
dXMpOwppbnQgZmZwcHJ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVs
ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0
dXMpOwppbnQgZmZwcHJrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxl
bSwKICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm
ZnBwcmUoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAg
ICAgIGxvbmcgbmVsZW0sIGZsb2F0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwcHJkKGZp
dHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25n
IG5lbGVtLCBkb3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcmpqKGZpdHNmaWxl
ICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVt
LCBMT05HTE9ORyAqYXJyYXksIGludCAqc3RhdHVzKTsKCmludCBmZnBwcnUoZml0c2ZpbGUgKmZw
dHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGlu
dCAqc3RhdHVzKTsKaW50IGZmcHBybihmaXRzZmlsZSAqZnB0ciwgbG9uZyBmaXJzdGVsZW0sIGxv
bmcgbmVsZW0sIGludCAqc3RhdHVzKTsKCmludCBmZnBwbihmaXRzZmlsZSAqZnB0ciwgaW50IGRh
dGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFycmF5
LCB2b2lkICpudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuYihmaXRzZmlsZSAqZnB0ciwg
bG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqYXJyYXksIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBm
ZnBwbnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAg
ICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIHVuc2lnbmVkIHNob3J0IG51
bHZhbCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmkoZml0c2ZpbGUgKmZwdHIs
IGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHNob3J0
ICphcnJheSwgc2hvcnQgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmooZml0c2ZpbGUg
KmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0s
IGxvbmcgKmFycmF5LCBsb25nIG51bHZhbCwgaW50ICpzdGF0dXMpOwppbnQgZmZwcG51aihmaXRz
ZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyAqYXJyYXksIHVuc2lnbmVkIGxvbmcgbnVsdmFsLCBpbnQgKnN0
YXR1cyk7CmludCBmZnBwbnVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0
ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25l
ZCBpbnQgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmsoZml0c2ZpbGUgKmZwdHIsIGxv
bmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGludCAqYXJy
YXksIGludCBudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuZShmaXRzZmlsZSAqZnB0ciwg
bG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZmxvYXQg
KmFycmF5LCBmbG9hdCBudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuZChmaXRzZmlsZSAq
ZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg
ZG91YmxlICphcnJheSwgZG91YmxlIG51bHZhbCwgaW50ICpzdGF0dXMpOwppbnQgZmZwcG5qaihm
aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u
ZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBsb25nIG51bHZhbCwgaW50ICpzdGF0dXMpOwoKaW50
IGZmcDJkYihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBuYXhp
czEsCiAgICAgICAgICAgbG9uZyBuYXhpczIsIHVuc2lnbmVkIGNoYXIgKmFycmF5LCBpbnQgKnN0
YXR1cyk7CmludCBmZnAyZHVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xz
LCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25nIG5heGlzMiwgdW5zaWduZWQgc2hvcnQgKmFy
cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs
IGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBzaG9ydCAq
YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkdWooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3Jv
dXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCB1bnNp
Z25lZCBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwMmRqKGZpdHNmaWxlICpmcHRy
LCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25nIG5h
eGlzMiwgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkdWsoZml0c2ZpbGUgKmZw
dHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcg
bmF4aXMyLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGsoZml0
c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAg
ICAgIGxvbmcgbmF4aXMyLCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGUoZml0
c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAg
ICAgIGxvbmcgbmF4aXMyLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkZChm
aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBuYXhpczEsCiAgICAg
ICAgICAgbG9uZyBuYXhpczIsIGRvdWJsZSAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJk
amooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAog
ICAgICAgICAgIGxvbmcgbmF4aXMyLCBMT05HTE9ORyAqYXJyYXksIGludCAqc3RhdHVzKTsKCmlu
dCBmZnAzZGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJv
d3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5z
aWduZWQgY2hhciAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkdWkoZml0c2ZpbGUgKmZw
dHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAg
ICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5zaWduZWQgc2hvcnQgKmFycmF5LCBp
bnQgKnN0YXR1cyk7CmludCBmZnAzZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcg
bmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBs
b25nIG5heGlzMywgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZHVqKGZpdHNm
aWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25nIG5heGlz
MSwKICAgICAgICAgICBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsIHVuc2lnbmVkIGxvbmcgKmFy
cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZGooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs
IGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4
aXMyLCBsb25nIG5heGlzMywgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkdWso
Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcg
bmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5zaWduZWQgaW50
ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwM2RrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy
b3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25n
IG5heGlzMiwgbG9uZyBuYXhpczMsIGludCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNk
ZShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBucm93cywgbG9u
ZyBuYXhpczEsCiAgICAgICAgICAgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLCBmbG9hdCAqYXJy
YXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg
bG9uZyBuY29scywgbG9uZyBucm93cywgbG9uZyBuYXhpczEsCiAgICAgICAgICAgbG9uZyBuYXhp
czIsIGxvbmcgbmF4aXMzLCBkb3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZGpq
KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25n
IG5heGlzMSwKICAgICAgICAgICBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsIExPTkdMT05HICph
cnJheSwgaW50ICpzdGF0dXMpOwoKaW50IGZmcHNzKGZpdHNmaWxlICpmcHRyLCBpbnQgZGF0YXR5
cGUsCiAgICAgICAgICAgbG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIHZvaWQgKmFycmF5LCBp
bnQgKnN0YXR1cyk7CmludCBmZnBzc2IoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcg
bmF4aXMsIGxvbmcgKm5heGVzLAogICAgICAgICAgIGxvbmcgKmZwaXhlbCwgbG9uZyAqbHBpeGVs
LCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwc3N1aShmaXRzZmls
ZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuYXhpcywgbG9uZyAqbmF4ZXMsCiAgICAgICAgICAg
bG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIHVuc2lnbmVkIHNob3J0ICphcnJheSwgaW50ICpz
dGF0dXMpOwppbnQgZmZwc3NpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlz
LCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgc2hv
cnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBzc3VqKGZpdHNmaWxlICpmcHRyLCBsb25n
IGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWws
IGxvbmcgKmxwaXhlbCwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZm
cHNzaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuYXhpcywgbG9uZyAqbmF4ZXMs
CiAgICAgICAgICAgbG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIGxvbmcgKmFycmF5LCBpbnQg
KnN0YXR1cyk7CmludCBmZnBzc3VrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5h
eGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwg
dW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwc3NrKGZpdHNmaWxlICpm
cHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25n
ICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZw
c3NlKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywK
ICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgZmxvYXQgKmFycmF5LCBpbnQg
KnN0YXR1cyk7CmludCBmZnBzc2QoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmF4
aXMsIGxvbmcgKm5heGVzLAogICAgICAgICAgIGxvbmcgKmZwaXhlbCwgbG9uZyAqbHBpeGVsLCBk
b3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBzc2pqKGZpdHNmaWxlICpmcHRyLCBs
b25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4
ZWwsIGxvbmcgKmxwaXhlbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7CgppbnQgZmZw
Z3BiKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAg
ICBsb25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZw
Z3B1aShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAg
ICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm
ZnBncGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAg
ICAgIGxvbmcgbmVsZW0sIHNob3J0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwZ3B1aihm
aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u
ZyBuZWxlbSwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwaihm
aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u
ZyBuZWxlbSwgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwdWsoZml0c2ZpbGUg
KmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0s
IHVuc2lnbmVkIGludCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwayhmaXRzZmlsZSAq
ZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg
aW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwZ3BlKGZpdHNmaWxlICpmcHRyLCBsb25n
IGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBmbG9hdCAqYXJy
YXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg
bG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50
ICpzdGF0dXMpOwppbnQgZmZwZ3BqaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBm
aXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0
YXR1cyk7CgoKaW50IGZpdHNfaXRlcl9zZXRfYnlfbmFtZShpdGVyYXRvckNvbCAqY29sLCBmaXRz
ZmlsZSAqZnB0ciwgY2hhciAqY29sbmFtZSwKICAgICAgICAgIGludCBkYXRhdHlwZSwgaW50IGlv
dHlwZSk7CmludCBmaXRzX2l0ZXJfc2V0X2J5X251bShpdGVyYXRvckNvbCAqY29sLCBmaXRzZmls
ZSAqZnB0ciwgaW50IGNvbG51bSwKICAgICAgICAgIGludCBkYXRhdHlwZSwgaW50IGlvdHlwZSk7
CmludCBmaXRzX2l0ZXJfc2V0X2ZpbGUoaXRlcmF0b3JDb2wgKmNvbCwgZml0c2ZpbGUgKmZwdHIp
OwppbnQgZml0c19pdGVyX3NldF9jb2xuYW1lKGl0ZXJhdG9yQ29sICpjb2wsIGNoYXIgKmNvbG5h
bWUpOwppbnQgZml0c19pdGVyX3NldF9jb2xudW0oaXRlcmF0b3JDb2wgKmNvbCwgaW50IGNvbG51
bSk7CmludCBmaXRzX2l0ZXJfc2V0X2RhdGF0eXBlKGl0ZXJhdG9yQ29sICpjb2wsIGludCBkYXRh
dHlwZSk7CmludCBmaXRzX2l0ZXJfc2V0X2lvdHlwZShpdGVyYXRvckNvbCAqY29sLCBpbnQgaW90
eXBlKTsKCmZpdHNmaWxlICogZml0c19pdGVyX2dldF9maWxlKGl0ZXJhdG9yQ29sICpjb2wpOwpj
aGFyICogZml0c19pdGVyX2dldF9jb2xuYW1lKGl0ZXJhdG9yQ29sICpjb2wpOwppbnQgZml0c19p
dGVyX2dldF9jb2xudW0oaXRlcmF0b3JDb2wgKmNvbCk7CmludCBmaXRzX2l0ZXJfZ2V0X2RhdGF0
eXBlKGl0ZXJhdG9yQ29sICpjb2wpOwppbnQgZml0c19pdGVyX2dldF9pb3R5cGUoaXRlcmF0b3JD
b2wgKmNvbCk7CnZvaWQgKiBmaXRzX2l0ZXJfZ2V0X2FycmF5KGl0ZXJhdG9yQ29sICpjb2wpOwps
b25nIGZpdHNfaXRlcl9nZXRfdGxtaW4oaXRlcmF0b3JDb2wgKmNvbCk7CmxvbmcgZml0c19pdGVy
X2dldF90bG1heChpdGVyYXRvckNvbCAqY29sKTsKbG9uZyBmaXRzX2l0ZXJfZ2V0X3JlcGVhdChp
dGVyYXRvckNvbCAqY29sKTsKY2hhciAqIGZpdHNfaXRlcl9nZXRfdHVuaXQoaXRlcmF0b3JDb2wg
KmNvbCk7CmNoYXIgKiBmaXRzX2l0ZXJfZ2V0X3RkaXNwKGl0ZXJhdG9yQ29sICpjb2wpOwoKaW50
IGZmaXRlcihpbnQgbmNvbHMsIGl0ZXJhdG9yQ29sICpkYXRhLCBsb25nIG9mZnNldCwgbG9uZyBu
UGVyTG9vcCwKICAgICAgICAgICBpbnQgKCp3b3JrRm4pKCBsb25nIHRvdGFsbiwgbG9uZyBvZmZz
ZXQsIGxvbmcgZmlyc3RuLAogICAgICAgICAgICAgbG9uZyBudmFsdWVzLCBpbnQgbmFycmF5cywg
aXRlcmF0b3JDb2wgKmRhdGEsIHZvaWQgKnVzZXJQb2ludGVyKSwKICAgICAgICAgICB2b2lkICp1
c2VyUG9pbnRlciwgaW50ICpzdGF0dXMpOwoKCmludCBmZnBjbChmaXRzZmlsZSAqZnB0ciwgaW50
IGRhdGF0eXBlLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LAogICAgICAgICAgbG9uZyBmaXJz
dGVsZW0sIGxvbmcgbmVsZW0sIHZvaWQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbHMo
Zml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVt
LAogICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIgKiphcnJheSwgaW50ICpzdGF0dXMpOwppbnQg
ZmZwY2xsKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp
cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMp
OwppbnQgZmZwY2xiKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBs
b25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyICphcnJh
eSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2x1aShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwg
bG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgdW5z
aWduZWQgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbGkoZml0c2ZpbGUgKmZw
dHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAg
IGxvbmcgbmVsZW0sIHNob3J0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2x1aihmaXRz
ZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAg
ICAgICAgICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsK
aW50IGZmcGNsaihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u
ZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgbG9uZyAqYXJyYXksIGludCAqc3Rh
dHVzKTsKaW50IGZmcGNsdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ry
b3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIGludCAq
YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNsayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51
bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg
aW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xlKGZpdHNmaWxlICpmcHRyLCBpbnQg
Y29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5l
bGVtLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNsZChmaXRzZmlsZSAqZnB0
ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAg
bG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xjKGZpdHNm
aWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAg
ICAgICAgICBsb25nIG5lbGVtLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNs
bShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVs
ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50ICpzdGF0dXMpOwpp
bnQgZmZwY2x1KGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25n
IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKnN0YXR1cyk7CmludCBmZnBj
bHgoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZnJvdywgbG9uZyBmYml0LCBsb25n
IG5iaXQsCiAgICAgICAgICAgIGNoYXIgKmxhcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xq
aihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVs
ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7
CgppbnQgZmZwY24oZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgaW50IGNvbG51bSwgbG9u
ZyBmaXJzdHJvdywKICAgICAgICAgIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLCB2b2lkICph
cnJheSwgdm9pZCAqbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbnMoIGZpdHNmaWxlICpm
cHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAg
ICAgbG9uZyBuZWxlbSwgY2hhciAqKmFycmF5LCBjaGFyICpudWx2YWx1ZSwgaW50ICpzdGF0dXMp
OwppbnQgZmZwY25sKCBmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywg
bG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIgKmFycmF5LCBjaGFy
IG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbmIoZml0c2ZpbGUgKmZwdHIsIGludCBj
b2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVs
ZW0sIHVuc2lnbmVkIGNoYXIgKmFycmF5LCB1bnNpZ25lZCBjaGFyIG51bHZhbHVlLAogICAgICAg
ICAgIGludCAqc3RhdHVzKTsKaW50IGZmcGNudWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0s
IGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVu
c2lnbmVkIHNob3J0ICphcnJheSwgdW5zaWduZWQgc2hvcnQgbnVsdmFsdWUsCiAgICAgICAgICAg
aW50ICpzdGF0dXMpOwppbnQgZmZwY25pKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25n
IGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBzaG9ydCAq
YXJyYXksIHNob3J0IG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbnVqKGZpdHNmaWxl
ICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAg
ICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25nICphcnJheSwgdW5zaWduZWQgbG9uZyBudWx2
YWx1ZSwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBjbmooZml0c2ZpbGUgKmZwdHIs
IGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxv
bmcgbmVsZW0sIGxvbmcgKmFycmF5LCBsb25nIG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBm
ZnBjbnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp
cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNp
Z25lZCBpbnQgbnVsdmFsdWUsCiAgICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwY25rKGZp
dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwK
ICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKmFycmF5LCBpbnQgbnVsdmFsdWUsIGludCAqc3Rh
dHVzKTsKaW50IGZmcGNuZShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJv
dywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZmxvYXQgKmFycmF5LCBm
bG9hdCBudWx2YWx1ZSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY25kKGZpdHNmaWxlICpmcHRyLCBp
bnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25n
IG5lbGVtLCBkb3VibGUgKmFycmF5LCBkb3VibGUgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsKaW50
IGZmcGNuamooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcg
Zmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIExPTkdMT05HICphcnJheSwgTE9OR0xP
TkcgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsKCmludCBmZnBkZXMoZml0c2ZpbGUgKmZwdHIsIGlu
dCBjb2xudW0sIGxvbmcgcm93bnVtLCBsb25nIGxlbmd0aCwKICAgICAgICAgICBsb25nIGhlYXBh
ZGRyLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZwdGJiKGZpdHNmaWxlICpmcHRyLCBsb25nIGZpcnN0
cm93LCBsb25nIGZpcnN0Y2hhciwgbG9uZyBuY2hhcnMsCiAgICAgICAgICAgdW5zaWduZWQgY2hh
ciAqdmFsdWVzLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZpcm93KGZpdHNmaWxlICpmcHRyLCBsb25n
IGZpcnN0cm93LCBsb25nIG5yb3dzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRyb3coZml0c2ZpbGUg
KmZwdHIsIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsIGludCAqc3RhdHVzKTsKaW50IGZmZHJy
ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqcmFuZ2VzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRyd3Mo
Zml0c2ZpbGUgKmZwdHIsIGxvbmcgKnJvd251bSwgbG9uZyBucm93cywgaW50ICpzdGF0dXMpOwpp
bnQgZmZpY29sKGZpdHNmaWxlICpmcHRyLCBpbnQgbnVtY29sLCBjaGFyICp0dHlwZSwgY2hhciAq
dGZvcm0sIGludCAqc3RhdHVzKTsKaW50IGZmaWNscyhmaXRzZmlsZSAqZnB0ciwgaW50IGZpcnN0
Y29sLCBpbnQgbmNvbHMsIGNoYXIgKip0dHlwZSwKICAgICAgICAgICBjaGFyICoqdGZvcm0sIGlu
dCAqc3RhdHVzKTsKaW50IGZmbXZlYyhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBu
ZXd2ZWNsZW4sIGludCAqc3RhdHVzKTsKaW50IGZmZGNvbChmaXRzZmlsZSAqZnB0ciwgaW50IG51
bWNvbCwgaW50ICpzdGF0dXMpOwppbnQgZmZjcGNsKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxl
ICpvdXRmcHRyLCBpbnQgaW5jb2wsIGludCBvdXRjb2wsCiAgICAgICAgICAgaW50IGNyZWF0ZV9j
b2wsIGludCAqc3RhdHVzKTsKCgppbnQgZmZnaWNzKGZpdHNmaWxlICpmcHRyLCBkb3VibGUgKnhy
dmFsLCBkb3VibGUgKnlydmFsLCBkb3VibGUgKnhycGl4LAogICAgICAgICAgIGRvdWJsZSAqeXJw
aXgsIGRvdWJsZSAqeGluYywgZG91YmxlICp5aW5jLCBkb3VibGUgKnJvdCwKICAgICAgICAgICBj
aGFyICp0eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0Y3MoZml0c2ZpbGUgKmZwdHIsIGludCB4
Y29sLCBpbnQgeWNvbCwgZG91YmxlICp4cnZhbCwKICAgICAgICAgICBkb3VibGUgKnlydmFsLCBk
b3VibGUgKnhycGl4LCBkb3VibGUgKnlycGl4LCBkb3VibGUgKnhpbmMsCiAgICAgICAgICAgZG91
YmxlICp5aW5jLCBkb3VibGUgKnJvdCwgY2hhciAqdHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZ3
bGRwKGRvdWJsZSB4cGl4LCBkb3VibGUgeXBpeCwgZG91YmxlIHhyZWYsIGRvdWJsZSB5cmVmLAog
ICAgICAgICAgIGRvdWJsZSB4cmVmcGl4LCBkb3VibGUgeXJlZnBpeCwgZG91YmxlIHhpbmMsIGRv
dWJsZSB5aW5jLAogICAgICAgICAgIGRvdWJsZSByb3QsIGNoYXIgKnR5cGUsIGRvdWJsZSAqeHBv
cywgZG91YmxlICp5cG9zLCBpbnQgKnN0YXR1cyk7CmludCBmZnh5cHgoZG91YmxlIHhwb3MsIGRv
dWJsZSB5cG9zLCBkb3VibGUgeHJlZiwgZG91YmxlIHlyZWYsCiAgICAgICAgICAgZG91YmxlIHhy
ZWZwaXgsIGRvdWJsZSB5cmVmcGl4LCBkb3VibGUgeGluYywgZG91YmxlIHlpbmMsCiAgICAgICAg
ICAgZG91YmxlIHJvdCwgY2hhciAqdHlwZSwgZG91YmxlICp4cGl4LCBkb3VibGUgKnlwaXgsIGlu
dCAqc3RhdHVzKTsKCgppbnQgZmZnaXdjcyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqKmhlYWRlciwg
aW50ICpzdGF0dXMpOwppbnQgZmZndHdjcyhmaXRzZmlsZSAqZnB0ciwgaW50IHhjb2wsIGludCB5
Y29sLCBjaGFyICoqaGVhZGVyLCBpbnQgKnN0YXR1cyk7CgoKaW50IGZmdGV4cCggZml0c2ZpbGUg
KmZwdHIsIGNoYXIgKmV4cHIsIGludCBtYXhkaW0sCiAgICAgICAgICAgIGludCAqZGF0YXR5cGUs
IGxvbmcgKm5lbGVtLCBpbnQgKm5heGlzLAogICAgICAgICAgICBsb25nICpuYXhlcywgaW50ICpz
dGF0dXMgKTsKCmludCBmZmZyb3coIGZpdHNmaWxlICppbmZwdHIsIGNoYXIgKmV4cHIsCiAgICAg
ICAgICAgIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsCiAgICAgICAgICAgIGxvbmcgKm5fZ29v
ZF9yb3dzLCBjaGFyICpyb3dfc3RhdHVzLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZmZnJ3KCBmaXRz
ZmlsZSAqZnB0ciwgY2hhciAqZXhwciwgbG9uZyAqcm93bnVtLCBpbnQgKnN0YXR1cyk7CgppbnQg
ZmZmcndjKCBmaXRzZmlsZSAqZnB0ciwgY2hhciAqZXhwciwgY2hhciAqdGltZUNvbCwKICAgICAg
ICAgICAgY2hhciAqcGFyQ29sLCBjaGFyICp2YWxDb2wsIGxvbmcgbnRpbWVzLAogICAgICAgICAg
ICBkb3VibGUgKnRpbWVzLCBjaGFyICp0aW1lX3N0YXR1cywgaW50ICpzdGF0dXMgKTsKCmludCBm
ZnNyb3coIGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBjaGFyICpleHByLAog
ICAgICAgICAgICBpbnQgKnN0YXR1cyk7CgppbnQgZmZjcm93KCBmaXRzZmlsZSAqZnB0ciwgaW50
IGRhdGF0eXBlLCBjaGFyICpleHByLAogICAgICAgICAgICBsb25nIGZpcnN0cm93LCBsb25nIG5l
bGVtZW50cywgdm9pZCAqbnVsdmFsLAogICAgICAgICAgICB2b2lkICphcnJheSwgaW50ICphbnlu
dWwsIGludCAqc3RhdHVzICk7CgppbnQgZmZjYWxjX3JuZyggZml0c2ZpbGUgKmluZnB0ciwgY2hh
ciAqZXhwciwgZml0c2ZpbGUgKm91dGZwdHIsCiAgICAgICAgICAgICAgIGNoYXIgKnBhck5hbWUs
IGNoYXIgKnBhckluZm8sIGludCBuUm5ncywKICAgICAgICAgICAgICAgICBsb25nICpzdGFydCwg
bG9uZyAqZW5kLCBpbnQgKnN0YXR1cyApOwoKaW50IGZmY2FsYyggZml0c2ZpbGUgKmluZnB0ciwg
Y2hhciAqZXhwciwgZml0c2ZpbGUgKm91dGZwdHIsCiAgICAgICAgICAgIGNoYXIgKnBhck5hbWUs
IGNoYXIgKnBhckluZm8sIGludCAqc3RhdHVzICk7CgoKCgppbnQgZmZoaXN0KGZpdHNmaWxlICoq
ZnB0ciwgY2hhciAqb3V0ZmlsZSwgaW50IGltYWdldHlwZSwgaW50IG5heGlzLAogICAgICAgICAg
IGNoYXIgY29sbmFtZVs0XVs3MV0sCiAgICAgICAgICAgZG91YmxlICptaW5pbiwgZG91YmxlICpt
YXhpbiwgZG91YmxlICpiaW5zaXplaW4sCiAgICAgICAgICAgY2hhciBtaW5uYW1lWzRdWzcxXSwg
Y2hhciBtYXhuYW1lWzRdWzcxXSwKICAgICAgICAgICBjaGFyIGJpbm5hbWVbNF1bNzFdLAogICAg
ICAgICAgIGRvdWJsZSB3ZWlnaHRpbiwgY2hhciB3dGNvbFs3MV0sCiAgICAgICAgICAgaW50IHJl
Y2lwLCBjaGFyICpyb3dzZWxlY3QsIGludCAqc3RhdHVzKTsKCmludCBmaXRzX3NlbGVjdF9pbWFn
ZV9zZWN0aW9uKGZpdHNmaWxlICoqZnB0ciwgY2hhciAqb3V0ZmlsZSwKICAgICAgICAgICBjaGFy
ICppbWFnZXNlY3Rpb24sIGludCAqc3RhdHVzKTsKaW50IGZpdHNfc2VsZWN0X3NlY3Rpb24oIGZp
dHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLAogICAgICAgICAgIGNoYXIgKmltYWdl
c2VjdGlvbiwgaW50ICpzdGF0dXMpOwoKCgppbnQgZmZndGNyKGZpdHNmaWxlICpmcHRyLCBjaGFy
ICpncnBuYW1lLCBpbnQgZ3JvdXB0eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0aXMoZml0c2Zp
bGUgKmZwdHIsIGNoYXIgKmdycG5hbWUsIGludCBncm91cHR5cGUsIGludCAqc3RhdHVzKTsKaW50
IGZmZ3RjaChmaXRzZmlsZSAqZ2ZwdHIsIGludCBncm91cHR5cGUsIGludCAqc3RhdHVzKTsKaW50
IGZmZ3RybShmaXRzZmlsZSAqZ2ZwdHIsIGludCBybW9wdCwgaW50ICpzdGF0dXMpOwppbnQgZmZn
dGNwKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgY3BvcHQsIGludCAq
c3RhdHVzKTsKaW50IGZmZ3RtZyhmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwg
aW50IG1nb3B0LCBpbnQgKnN0YXR1cyk7CmludCBmZmd0Y20oZml0c2ZpbGUgKmdmcHRyLCBpbnQg
Y21vcHQsIGludCAqc3RhdHVzKTsKaW50IGZmZ3R2ZihmaXRzZmlsZSAqZ2ZwdHIsIGxvbmcgKmZp
cnN0ZmFpbGVkLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0b3AoZml0c2ZpbGUgKm1mcHRyLGludCBn
cm91cCxmaXRzZmlsZSAqKmdmcHRyLGludCAqc3RhdHVzKTsKaW50IGZmZ3RhbShmaXRzZmlsZSAq
Z2ZwdHIsIGZpdHNmaWxlICptZnB0ciwgaW50IGhkdXBvcywgaW50ICpzdGF0dXMpOwppbnQgZmZn
dG5tKGZpdHNmaWxlICpnZnB0ciwgbG9uZyAqbm1lbWJlcnMsIGludCAqc3RhdHVzKTsKaW50IGZm
Z21uZyhmaXRzZmlsZSAqbWZwdHIsIGxvbmcgKm5tZW1iZXJzLCBpbnQgKnN0YXR1cyk7CmludCBm
Zmdtb3AoZml0c2ZpbGUgKmdmcHRyLCBsb25nIG1lbWJlciwgZml0c2ZpbGUgKiptZnB0ciwgaW50
ICpzdGF0dXMpOwppbnQgZmZnbWNwKGZpdHNmaWxlICpnZnB0ciwgZml0c2ZpbGUgKm1mcHRyLCBs
b25nIG1lbWJlciwgaW50IGNwb3B0LAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZ210
ZihmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgbG9uZyBtZW1iZXIsIGludCB0
Zm9wdCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmdtcm0oZml0c2ZpbGUgKmZwdHIs
IGxvbmcgbWVtYmVyLCBpbnQgcm1vcHQsIGludCAqc3RhdHVzKTsKCgoKaW50IGZpdHNfZXhlY3V0
ZV90ZW1wbGF0ZShmaXRzZmlsZSAqZmYsIGNoYXIgKm5ncF90ZW1wbGF0ZSwgaW50ICpzdGF0dXMp
OwoKCgppbnQgZml0c19zZXRfY29tcHJlc3Npb25fdHlwZShmaXRzZmlsZSAqZnB0ciwgaW50IGN0
eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmaXRzX3NldF90aWxlX2RpbShmaXRzZmlsZSAqZnB0ciwg
aW50IG5kaW0sIGxvbmcgKmRpbXMsIGludCAqc3RhdHVzKTsKaW50IGZpdHNfc2V0X25vaXNlX2Jp
dHMoZml0c2ZpbGUgKmZwdHIsIGludCBub2lzZWJpdHMsIGludCAqc3RhdHVzKTsKCmludCBmaXRz
X2dldF9jb21wcmVzc2lvbl90eXBlKGZpdHNmaWxlICpmcHRyLCBpbnQgKmN0eXBlLCBpbnQgKnN0
YXR1cyk7CmludCBmaXRzX2dldF90aWxlX2RpbShmaXRzZmlsZSAqZnB0ciwgaW50IG5kaW0sIGxv
bmcgKmRpbXMsIGludCAqc3RhdHVzKTsKaW50IGZpdHNfZ2V0X25vaXNlX2JpdHMoZml0c2ZpbGUg
KmZwdHIsIGludCAqbm9pc2ViaXRzLCBpbnQgKnN0YXR1cyk7CgppbnQgZml0c19jb21wX2ltZyhm
aXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50IGNvbXByZXNzX3R5cGUsCiAg
ICAgICAgIGxvbmcgKnRpbGVzaXplLCBpbnQgcGFybTEsIGludCBwYXJtMiwgaW50ICpzdGF0dXMp
OwppbnQgZml0c19pc19jb21wcmVzc2VkX2ltYWdlKGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1
cyk7CmludCBmaXRzX2RlY29tcF9pbWcgKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRm
cHRyLCBpbnQgKnN0YXR1cyk7CgoKCgp9CiMgMjkgIkNDZml0cy5oIiAyCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzEgIkNDZml0cy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv
ZG9ybWFuL2NwcC9pbmNsdWRlL2xvbmduYW0uaCIgMQojIDM4ICJDQ2ZpdHMuaCIgMgoKCgpuYW1l
c3BhY2UgQ0NmaXRzIHsKCiAgc3RhdGljIGNvbnN0IGludCBCSVRQSVggPSAtMzI7CiAgc3RhdGlj
IGNvbnN0IGludCBOQVhJUyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBNQVhESU0gPSA5OTsKIyA1
NyAiQ0NmaXRzLmgiCiAgdHlwZWRlZiBlbnVtIHtSZWFkPTAsV3JpdGU9MX0gUldtb2RlOwojIDcx
ICJDQ2ZpdHMuaCIKICB0eXBlZGVmIGVudW0ge1RudWxsLCBUYml0ID0gMSwgVGJ5dGUgPSAxMSwg
VGxvZ2ljYWwgPSAxNCwgVHN0cmluZyA9IDE2LCBUdXNob3J0ID0gMjAsIFRzaG9ydCA9IDIxLFR1
aW50ID0gMzAsVGludCA9IDMxLCBUdWxvbmcgPSA0MCxUbG9uZyA9IDQxLCBUZmxvYXQgPSA0Miwg
VGRvdWJsZSA9IDgyLCBUY29tcGxleCA9IDgzLCBUZGJsY29tcGxleD0xNjMsIFZUYml0PSAtMSwg
VlRieXRlPS0xMSxWVGxvZ2ljYWw9LVRsb2dpY2FsLCBWVHVzaG9ydD0tMjAsVlRzaG9ydD0tMjEs
VlR1aW50PS0zMCwgVlRpbnQ9LTMxLFZUdWxvbmc9LTQwLFZUbG9uZz0tNDEsVlRmbG9hdD0tNDIs
VlRkb3VibGU9LTgyLFZUY29tcGxleD0tODMsVlRkYmxjb21wbGV4PS0xNjN9IFZhbHVlVHlwZTsK
IyA4NSAiQ0NmaXRzLmgiCiAgdHlwZWRlZiBlbnVtIHtBbnlIZHU9LTEsIEltYWdlSGR1LCBBc2Np
aVRibCwgQmluYXJ5VGJsfSBIZHVUeXBlOwojIDk5ICJDQ2ZpdHMuaCIKICB0eXBlZGVmIGVudW0g
eyBJYnl0ZT04LAogIElzaG9ydCA9IDE2LAogIElsb25nID0gMzIsCiAgSWZsb2F0ID0gLTMyLAog
IElkb3VibGUgPSAtNjQsCiAgSXVzaG9ydCA9IDIwLAogIEl1bG9uZyA9IDQwfSBJbWFnZVR5cGU7
CgoKCgp9CiMgMjcgIktleURhdGEuaCIgMgoKCgoKCgojIDEgIktleXdvcmQuaCIgMQojIDI2ICJL
ZXl3b3JkLmgiCiMgMSAiQ0NmaXRzLmgiIDEKIyAyNyAiS2V5d29yZC5oIiAyCnVzaW5nIG5hbWVz
cGFjZSBDQ2ZpdHM7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJpbmciIDEgMwoj
IDM1ICJLZXl3b3JkLmgiIDIKCiMgMSAiRml0c0Vycm9yLmgiIDEKIyAyNiAiRml0c0Vycm9yLmgi
CiMgMSAiL2hvbWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAxCiMgMjcgIkZpdHNFcnJv
ci5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDI4ICJGaXRz
RXJyb3IuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEgMwojIDMxICIv
dXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry
ZWFtLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyA0
MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4
dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0ZXJuIHdpc3Ry
ZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2Vy
cjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9f
aW9pbml0Owp9CiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMwojIDI5ICJG
aXRzRXJyb3IuaCIgMgojIDQxICJGaXRzRXJyb3IuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L3N0cmluZyIgMSAzCiMgNDIgIkZpdHNFcnJvci5oIiAyCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpu
YW1lc3BhY2UgQ0NmaXRzIHsKIyAxMTYgIkZpdHNFcnJvci5oIgogIGNsYXNzIEZpdHNGYXRhbAog
IHsKICAgIHB1YmxpYzoKCgogICAgICAgIEZpdHNGYXRhbCAoY29uc3Qgc3RyaW5nJiBkaWFnKTsK
CiAgICBwcm90ZWN0ZWQ6CiAgICBwcml2YXRlOgogICAgcHJpdmF0ZToKICB9OwojIDEzNiAiRml0
c0Vycm9yLmgiCiAgY2xhc3MgRml0c0V4Y2VwdGlvbgogIHsKICAgIHB1YmxpYzoKCgogICAgICAg
IEZpdHNFeGNlcHRpb24gKGNvbnN0IHN0cmluZyYgbXNnLCBib29sJiBzaWxlbnQpOwoKICAgIHBy
b3RlY3RlZDoKICAgIHByaXZhdGU6CiAgICBwcml2YXRlOgogIH07CgoKCgoKCgogIGNsYXNzIEZp
dHNFcnJvciA6IHB1YmxpYyBGaXRzRXhjZXB0aW9uCiAgewogICAgcHVibGljOgoKCiAgICAgICAg
Rml0c0Vycm9yIChpbnQgZXJyb3JudW0sIGJvb2wgc2lsZW50ID0gdHJ1ZSk7CgogICAgcHJvdGVj
dGVkOgogICAgcHJpdmF0ZToKCgoKICAgICAgICB2b2lkIHByaW50TXNnIChpbnQgZXJyb3IpOwoK
ICAgIHByaXZhdGU6CiAgfTsKCgoKCgoKCn0KIyAzNyAiS2V5d29yZC5oIiAyCgpuYW1lc3BhY2Ug
Q0NmaXRzIHsKICBjbGFzcyBIRFU7Cgp9CgoKCgoKdXNpbmcgc3RkOjpzdHJpbmc7CnVzaW5nIHN0
ZDo6b3N0cmVhbTsKCgoKbmFtZXNwYWNlIENDZml0cyB7CiMgMTg1ICJLZXl3b3JkLmgiCiAgY2xh
c3MgS2V5d29yZAogIHsKCgoKICAgIHB1YmxpYzoKCgoKCgogICAgICBjbGFzcyBXcm9uZ0tleXdv
cmRWYWx1ZVR5cGUgOiBwdWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGlj
OgoKCiAgICAgICAgICAgIFdyb25nS2V5d29yZFZhbHVlVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFn
LCBib29sIHNpbGVudCA9IHRydWUpOwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0
ZToKICAgICAgICBwcml2YXRlOgogICAgICB9OwoKCiAgICAgICAgS2V5d29yZChjb25zdCBLZXl3
b3JkICZyaWdodCk7CgoKCiAgICAgICAgS2V5d29yZCAoY29uc3Qgc3RyaW5nICZrZXluYW1lLCBW
YWx1ZVR5cGUga2V5dHlwZSwgSERVKiBwLCBjb25zdCBzdHJpbmcgJmNvbW1lbnQgPSAiIik7CgoK
ICAgICAgICB2aXJ0dWFsIH5LZXl3b3JkKCk7CgoKICAgICAgICBLZXl3b3JkICYgb3BlcmF0b3I9
KGNvbnN0IEtleXdvcmQgJnJpZ2h0KTsKCgogICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBL
ZXl3b3JkICZyaWdodCkgY29uc3Q7CgogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXl3
b3JkICZyaWdodCkgY29uc3Q7CgoKCgogICAgICAgIHZpcnR1YWwgb3N0cmVhbSAmIHB1dCAob3N0
cmVhbSAmcykgY29uc3QgPSAwOwoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkICogY2xvbmUgKCkg
Y29uc3QgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlICgpID0gMDsKCgoKCgogICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lICgpIGNvbnN0OwoKCgogICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBjb21tZW50ICgpIGNvbnN0OwoKICAgIHB1YmxpYzoKCgogICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KICAgICAgVCYgdmFsdWUoVCYgdmFsKSBjb25zdDsKCiAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFQmIG5ld1ZhbHVlKTsK
CiAgICBwcm90ZWN0ZWQ6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNvcHkgKGNvbnN0IEtleXdv
cmQmIHJpZ2h0KTsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBjb21wYXJlIChjb25zdCBLZXl3b3Jk
ICZyaWdodCkgY29uc3Q7CgoKICAgICAgICBmaXRzZmlsZSogZml0c1BvaW50ZXIgKCkgY29uc3Q7
CgoKCgogICAgICAgIFZhbHVlVHlwZSBrZXl0eXBlICgpIGNvbnN0OwogICAgICAgIHZvaWQga2V5
dHlwZSAoVmFsdWVUeXBlIHZhbHVlKTsKCgoKCgogICAgICAgIGNvbnN0IEhEVSogcGFyZW50ICgp
IGNvbnN0OwoKCgoKCiAgICBwcml2YXRlOgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVmFs
dWVUeXBlIG1fa2V5dHlwZTsKCgoKCgoKICAgICAgICBIRFUqIG1fcGFyZW50OwoKCgoKICAgICAg
ICBzdGQ6OnN0cmluZyBtX25hbWU7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5nIG1fY29tbWVudDsK
CgoKCiAgICAgIGZyaWVuZCBvc3RyZWFtICZvcGVyYXRvciA8PCAob3N0cmVhbSAmcywgY29uc3Qg
S2V5d29yZCAmcmlnaHQpOwoKCiAgfTsKCgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9z
dHJlYW0gJnMsIGNvbnN0IEtleXdvcmQgJnJpZ2h0KQp7CiAgIHJldHVybiByaWdodC5wdXQocyk7
Cn0KIyAzMzMgIktleXdvcmQuaCIKICBpbmxpbmUgVmFsdWVUeXBlIEtleXdvcmQ6OmtleXR5cGUg
KCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fa2V5dHlwZTsKCiAgfQoKICBpbmxpbmUgdm9pZCBL
ZXl3b3JkOjprZXl0eXBlIChWYWx1ZVR5cGUgdmFsdWUpCiAgewoKICAgIG1fa2V5dHlwZSA9IHZh
bHVlOwoKICB9CgoKCiAgaW5saW5lIGNvbnN0IEhEVSogS2V5d29yZDo6cGFyZW50ICgpIGNvbnN0
CiAgewoKICAgIHJldHVybiBtX3BhcmVudDsKCiAgfQoKICBpbmxpbmUgY29uc3Qgc3RkOjpzdHJp
bmcmIEtleXdvcmQ6Om5hbWUgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fbmFtZTsKCiAgfQoK
ICBpbmxpbmUgY29uc3Qgc3RkOjpzdHJpbmcmIEtleXdvcmQ6OmNvbW1lbnQgKCkgY29uc3QKICB7
CgogICAgcmV0dXJuIG1fY29tbWVudDsKCiAgfQoKfQojIDM0ICJLZXlEYXRhLmgiIDIKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9jb21wbGV4IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9jb21wbGV4IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jb21wbGV4
LmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAxIDMKIyAz
NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAzCiMgNjIgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc192b2lkCiAgICB7CiAg
ICAgIGVudW0KICAgICAgewogICAgICAgIF9NX3R5cGUgPSAwCiAgICAgIH07CiAgICB9OwoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc192b2lkPHZvaWQ+CiAgICB7CiAgICAgIGVudW0KICAg
ICAgewogICAgICAgIF9NX3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyCiAgICB7CiAgICAgIGVudW0KICAg
ICAgewogICAgICAgIF9NX3R5cGUgPSAwCiAgICAgIH07CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGJvb2w+CiAgICB7CiAgICAgIGVudW0KICAgICAgewog
ICAgICAgIF9NX3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgX19pc19pbnRlZ2VyPGNoYXI+CiAgICB7CiAgICAgIGVudW0KICAgICAgewogICAgICAgIF9N
X3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc19p
bnRlZ2VyPHNpZ25lZCBjaGFyPgogICAgewogICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfTV90
eXBlID0gMQogICAgICB9OwogICAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVn
ZXI8dW5zaWduZWQgY2hhcj4KICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAg
ICB9OwogIH07CgoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjx3Y2hhcl90Pgog
IHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCgogIHRlbXBs
YXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHNob3J0PgogIHsKICAgIGVudW0KICAgIHsKICAg
ICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2lu
dGVnZXI8dW5zaWduZWQgc2hvcnQ+CiAgewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0g
MQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjxpbnQ+CiAg
ewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0
ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+CiAgewogICAgZW51bQogICAg
ewogICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9f
aXNfaW50ZWdlcjxsb25nPgogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAg
IH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9u
Zz4KICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRl
bXBsYXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGxvbmcgbG9uZz4KICB7CiAgICBlbnVtCiAg
ICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBsYXRlPD4KICBzdHJ1Y3Qg
X19pc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4KICB7CiAgICBlbnVtCiAgICB7CiAgICAg
IF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBz
dHJ1Y3QgX19pc19mbG9hdGluZwogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDAK
ICAgIH07CiAgfTsKCgogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxmbG9hdD4K
ICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBs
YXRlPD4KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxkb3VibGU+CiAgewogICAgZW51bQogICAgewog
ICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNf
ZmxvYXRpbmc8bG9uZyBkb3VibGU+CiAgewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0g
MQogICAgfTsKICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNf
YXJpdGhtZXRpYwogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IF9faXNfaW50ZWdl
cjxfVHA+OjpfTV90eXBlIHx8IF9faXNfZmxvYXRpbmc8X1RwPjo6X01fdHlwZQogICAgfTsKICB9
OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNfZnVuZGFtZW50YWwK
ICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSBfX2lzX3ZvaWQ8X1RwPjo6X01fdHlw
ZSB8fCBfX2lzX2FyaXRobWV0aWM8X1RwPjo6X01fdHlwZQogICAgfTsKICB9OwoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNfcG9kCiAgewogICAgZW51bQogICAgewog
ICAgICBfTV90eXBlID0gX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlCiAgICB9OwogIH07
Cgp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY29tcGxleC5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDEgMwojIDM3ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVn
ZV92YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDI5
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9h
dF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o
IiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIg
KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIg
KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwg
ZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9f
eCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2gg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Rh
bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93
ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVu
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91Ymxl
IGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJs
ZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRv
dWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
bG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBk
b3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
aW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGlu
dCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk
b3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25z
dCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5
MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEg
KGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJs
ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3RnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1w
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4
dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93
YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9f
eCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9f
eCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91Ymxl
IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBf
X3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBk
b3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190
cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19x
dW8pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUg
X195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25n
IGludCBsbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1h
IChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKIyA2NCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg
YXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh
dGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh
bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0
ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxv
YXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBj
b3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRh
bmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cx
MGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9f
eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9h
dCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAo
ZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhw
ZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxv
Z2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBt
b2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9h
dCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cy
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
ZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZmxvYXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFu
ZiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlz
aWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5h
bmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0
IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9h
dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5
bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYg
KGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs
b2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19z
aWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAq
X19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0
b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwg
ZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZs
b2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBp
bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv
YXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQg
cmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
bHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikg
dGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3Ns
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJs
ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
dGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0
aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBh
Y29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fj
b3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lu
aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5o
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRv
dWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p
dGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwg
KGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2Fu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25p
ZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNo
YXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs
ZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19q
bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZj
bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdh
bXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91Ymxl
LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0
ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
c2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9f
eCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcg
ZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxi
bG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBs
b25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9f
eikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBp
bnQgc2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQ
X05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwK
CiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRl
ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAog
IF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBF
IF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj
ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy
ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50
IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDQxMSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwp9CiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y21hdGguaCIgMiAzCiMgNjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhf
cG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5s
aW5lIF9UcAogICAgX19jbWF0aF9hYnMoX1RwIF9feCkKICAgIHsKICAgICAgcmV0dXJuIF9feCA8
IF9UcCgpID8gLV9feCA6IF9feDsKICAgIH0KCiAgaW5saW5lIGZsb2F0CiAgYWJzKGZsb2F0IF9f
eCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgZG91YmxlCiAg
YWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp
bl9mYWJzbChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1
cm4gOjphY29zZihfX3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gpOyB9CgoK
CgoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194
KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCgogIGlubGluZSBm
bG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgogIHVz
aW5nIDo6YXRhbjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihm
bG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuMmYoX195LCBfX3gpOyB9CgoKCgoK
CiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91
YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0K
CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY2Vp
bChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoKCiAgaW5saW5l
IGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9
CgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBkb3VibGUg
X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAog
IGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6
Y29zaDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJl
dHVybiA6OmNvc2hsKF9feCk7IH0KIyAyMTcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y21hdGguaCIgMwogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhw
KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7
IH0KCgoKCgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVp
bHRpbl9mYWJzZihfX3gpOyB9CgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7
IH0KCgogIGlubGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZs
b29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoKCgoKCgogIGlu
bGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYo
X194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpmbW9k
bChfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBp
bnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCiAgdXNpbmcg
OjpmcmV4cDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwg
aW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5s
aW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBm
KF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBsb25nIGRv
dWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhw
bChfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgZmxvYXQKICBsb2coZmxvYXQgX194KSB7
IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsgfQoK
CgoKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxv
ZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCgogIGlu
bGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1v
ZGZmKF9feCwgX19pcHRyKTsgfQojIDM2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
bWF0aC5oIiAzCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194
LCBfX2lwdHIpOyB9CiMgMzg0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxw
ZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/
IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIo
X194LCBfX24pOwogICAgfQoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgZmxvYXQg
X195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpwb3c7CgoK
ICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBw
b3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7
IH0KCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJu
IF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxv
bmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24p
OyB9CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGlu
X3NpbmYoX194KTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2lu
KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgoKICBp
bmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoK
CgoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICBpbmxpbmUgZmxvYXQKICBz
cXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICB1c2lu
ZyA6OnNxcnQ7CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQog
IHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICB0YW4o
ZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW47CgoK
ICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRh
bmwoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVy
biA6OnRhbmhmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBsb25nIGRv
dWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoK
Cn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9m
IChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3Np
ZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2Fw
dHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAo
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2Yg
KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2Yp
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25h
bihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19p
c25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAo
X19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19m
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAo
X19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK
ICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0g
c2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAg
X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9f
KF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19l
eHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195
KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFz
c2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNz
aWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9f
dikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3Yp
ID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwg
KF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9f
ZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18o
X19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4
dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kp
IF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz
aWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np
ZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAo
X192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAg
X19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAo
X19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsg
X190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7
IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDog
c2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9f
ZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAo
ZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRv
dWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9O
QU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg
ICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2Yx
KTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5
cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNp
emVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXpl
b2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNs
YXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9h
dCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsg
fSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg
aW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg
IHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEp
OyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlw
ZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6
ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVv
ZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xh
c3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0
KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9
KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1Rw
IF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf
X3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChfX3Up
ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9
PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChf
X3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj
bGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs
YXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0KfQoj
IDU3NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbWF0aC5oIiAzCm5hbWVzcGFjZSBf
X2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lm
eShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g
X19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0
dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9f
Zik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBf
X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVy
biBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg
eyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikg
eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg
IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf
X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19m
MSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19m
Mik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5Owog
IHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1
c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNp
bmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVz
aW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7
CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVz
c2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVk
IGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAg
IHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICogX194Owog
ICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAg
ICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjUxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NvbXBsZXguaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zc3RyZWFt
LmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjbGFzcyBjb21wbGV4
OwogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxmbG9hdD47CiAgdGVtcGxhdGU8PiBjbGFzcyBj
b21wbGV4PGRvdWJsZT47CiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGxvbmcgZG91YmxlPjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIGFyZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBub3JtKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBjb25qKGNvbnN0IGNvbXBsZXg8X1Rw
PiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHBvbGFyKGNvbnN0IF9U
cCYsIGNvbnN0IF9UcCYpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4g
Y29zKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxl
eDxfVHA+IGNvc2goY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBjb21wbGV4PF9UcD4gZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gY29tcGxleDxfVHA+IGxvZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBsb2cxMChjb25zdCBjb21wbGV4PF9UcD4mKTsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29tcGxleDxf
VHA+JiwgaW50KTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29u
c3QgY29tcGxleDxfVHA+JiwgY29uc3QgX1RwJik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBj
b21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgX1RwJiwgY29uc3QgY29tcGxleDxf
VHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gc2luKGNvbnN0IGNv
bXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNpbmgo
Y29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9U
cD4gc3FydChjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNv
bXBsZXg8X1RwPiB0YW4oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBjb21wbGV4PF9UcD4gdGFuaChjb25zdCBjb21wbGV4PF9UcD4mKTsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBjb21wbGV4CiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICBjb21wbGV4KGNvbnN0IF9UcCYgPSBfVHAo
KSwgY29uc3QgX1RwICYgPSBfVHAoKSk7CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4K
ICAgICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwoKICAgICAgX1RwIHJlYWwoKSBj
b25zdDsKICAgICAgX1RwIGltYWcoKSBjb25zdDsKCiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0
b3I9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgX1Rw
Jik7CiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKICAgICAgY29t
cGxleDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9w
ZXJhdG9yLz0oY29uc3QgX1RwJik7CgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAg
ICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0o
Y29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAg
ICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29u
c3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBj
b21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CgogICAgcHJpdmF0
ZToKICAgICAgX1RwIF9NX3JlYWwsIF9NX2ltYWc7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBjb21wbGV4PF9UcD46OnJlYWwoKSBjb25zdCB7IHJl
dHVybiBfTV9yZWFsOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAK
ICAgIGNvbXBsZXg8X1RwPjo6aW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgo
Y29uc3QgX1RwJiBfX3IsIGNvbnN0IF9UcCYgX19pKQogICAgOiBfTV9yZWFsKF9fciksIF9NX2lt
YWcoX19pKSB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1VwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3QgY29tcGxl
eDxfVXA+JiBfX3opCiAgICA6IF9NX3JlYWwoX196LnJlYWwoKSksIF9NX2ltYWcoX196LmltYWco
KSkgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNv
bXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgIF9NX3JlYWwg
PSBfX3Q7CiAgICAgX01faW1hZyA9IF9UcCgpOwogICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4mCiAgICBjb21w
bGV4PF9UcD46Om9wZXJhdG9yKz0oY29uc3QgX1RwJiBfX3QpCiAgICB7CiAgICAgIF9NX3JlYWwg
Kz0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvci09
KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFsIC09IF9fdDsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+
JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQogICAgewogICAg
ICBfTV9yZWFsICo9IF9fdDsKICAgICAgX01faW1hZyAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAg
IGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBfVHAmIF9fdCkKICAgIHsKICAgICAgX01f
cmVhbCAvPSBfX3Q7CiAgICAgIF9NX2ltYWcgLz0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4K
ICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGNvbXBs
ZXg8X1VwPiYgX196KQogICAgewogICAgICBfTV9yZWFsID0gX196LnJlYWwoKTsKICAgICAgX01f
aW1hZyA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1Rw
PiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikK
ICAgIHsKICAgICAgX01fcmVhbCArPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnICs9IF9fei5p
bWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBs
ZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKICAgIHsKICAgICAg
X01fcmVhbCAtPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVXA+CiAgICBjb21wbGV4PF9UcD4mCiAgICBjb21wbGV4PF9UcD46Om9w
ZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICB7CiAgICAgIGNvbnN0IF9UcCBf
X3IgPSBfTV9yZWFsICogX196LnJlYWwoKSAtIF9NX2ltYWcgKiBfX3ouaW1hZygpOwogICAgICBf
TV9pbWFnID0gX01fcmVhbCAqIF9fei5pbWFnKCkgKyBfTV9pbWFnICogX196LnJlYWwoKTsKICAg
ICAgX01fcmVhbCA9IF9fcjsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1Rw
PiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikK
ICAgIHsKICAgICAgY29uc3QgX1RwIF9fciA9IF9NX3JlYWwgKiBfX3oucmVhbCgpICsgX01faW1h
ZyAqIF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBfX24gPSBub3JtKF9feik7CiAgICAgIF9N
X2ltYWcgPSAoX01faW1hZyAqIF9fei5yZWFsKCkgLSBfTV9yZWFsICogX196LmltYWcoKSkgLyBf
X247CiAgICAgIF9NX3JlYWwgPSBfX3IgLyBfX247CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9w
ZXJhdG9yKyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kp
CiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBj
b21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9U
cD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj
b21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxf
VHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKz0gX194OyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9y
LShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7
IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBjb21wbGV4
PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9f
eCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4
PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBf
X3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKihjb25z
dCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVy
biBjb21wbGV4PF9UcD4gKF9feCkgKj0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4PF9UcD4m
IF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKj0g
X195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIG9wZXJhdG9yKihjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAg
ICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKj0gX194OyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25zdCBjb21w
bGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21w
bGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwg
Y29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9w
ZXJhdG9yLyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJl
dHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBjb21wbGV4PF9U
cD4mIF9feCkKICAgIHsgcmV0dXJuIF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBf
X3gpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4oLV9feC5yZWFsKCksIC1fX3guaW1hZygpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9
PShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7
IHJldHVybiBfX3gucmVhbCgpID09IF9feS5yZWFsKCkgJiYgX194LmltYWcoKSA9PSBfX3kuaW1h
ZygpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKICAgIHsgcmV0
dXJuIF9feC5yZWFsKCkgPT0gX195ICYmIF9feC5pbWFnKCkgPT0gX1RwKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gX194ID09IF9feS5y
ZWFsKCkgJiYgX1RwKCkgPT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwg
Y29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpICE9IF9feS5y
ZWFsKCkgfHwgX194LmltYWcoKSAhPSBfX3kuaW1hZygpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGNvbXBsZXg8X1RwPiYg
X194LCBjb25zdCBfVHAmIF9feSkKICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgIT0gX195IHx8IF9f
eC5pbWFnKCkgIT0gX1RwKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYg
X195KQogICAgeyByZXR1cm4gX194ICE9IF9feS5yZWFsKCkgfHwgX1RwKCkgIT0gX195LmltYWco
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBjb21wbGV4PF9UcD4mIF9feCkK
ICAgIHsKICAgICAgX1RwIF9fcmVfeCwgX19pbV94OwogICAgICBfQ2hhclQgX19jaDsKICAgICAg
X19pcyA+PiBfX2NoOwogICAgICBpZiAoX19jaCA9PSAnKCcpCiAgICAgICAgewogICAgICAgICAg
X19pcyA+PiBfX3JlX3ggPj4gX19jaDsKICAgICAgICAgIGlmIChfX2NoID09ICcsJykKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9faXMgPj4gX19pbV94ID4+IF9fY2g7CiAgICAgICAgICAg
ICAgaWYgKF9fY2ggPT0gJyknKQogICAgICAgICAgICAgICAgX194ID0gY29tcGxleDxfVHA+KF9f
cmVfeCwgX19pbV94KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2lzLnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp
ZiAoX19jaCA9PSAnKScpCiAgICAgICAgICAgIF9feCA9IGNvbXBsZXg8X1RwPihfX3JlX3gsIF9U
cCgwKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9faXMu
cHV0YmFjayhfX2NoKTsKICAgICAgICAgIF9faXMgPj4gX19yZV94OwogICAgICAgICAgX194ID0g
Y29tcGxleDxfVHA+KF9fcmVfeCwgX1RwKDApKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2lz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBjb21wbGV4PF9U
cD4mIF9feCkKICAgIHsKICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IF9fczsKICAgICAgX19zLmZsYWdzKF9fb3MuZmxhZ3MoKSk7CiAgICAgIF9fcy5pbWJ1ZShfX29z
LmdldGxvYygpKTsKICAgICAgX19zLnByZWNpc2lvbihfX29zLnByZWNpc2lvbigpKTsKICAgICAg
X19zIDw8ICcoJyA8PCBfX3gucmVhbCgpIDw8ICIsIiA8PCBfX3guaW1hZygpIDw8ICcpJzsKICAg
ICAgcmV0dXJuIF9fb3MgPDwgX19zLnN0cigpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcAogICAgcmVhbChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAg
IHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIF9UcAogICAgaW1hZyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsgcmV0dXJuIF9f
ei5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAg
YWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfVHAgX194ID0gX196LnJl
YWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBfX3MgPSBt
YXgoYWJzKF9feCksIGFicyhfX3kpKTsKICAgICAgaWYgKF9fcyA9PSBfVHAoKSkKICAgICAgICBy
ZXR1cm4gX19zOwogICAgICBfX3ggLz0gX19zOwogICAgICBfX3kgLz0gX19zOwogICAgICByZXR1
cm4gX19zICogc3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBhcmcoY29uc3QgY29tcGxleDxfVHA+JiBf
X3opCiAgICB7IHJldHVybiBhdGFuMihfX3ouaW1hZygpLCBfX3oucmVhbCgpKTsgfQoKCgoKCgog
IHRlbXBsYXRlPGJvb2w+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyCiAgICB7CiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19pdChjb25z
dCBjb21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfVHAgX194ID0g
X196LnJlYWwoKTsKICAgICAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICAg
ICAgcmV0dXJuIF9feCAqIF9feCArIF9feSAqIF9feTsKICAgICAgICB9CiAgICB9OwoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyPHRydWU+CiAgICB7CiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19pdChjb25zdCBj
b21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBfVHAgX19yZXMgPSBhYnMoX196
KTsKICAgICAgICAgIHJldHVybiBfX3JlcyAqIF9fcmVzOwogICAgICAgIH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIG5vcm0oY29uc3QgY29tcGxl
eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIHJldHVybiBfTm9ybV9oZWxwZXI8X19pc19mbG9hdGlu
ZzxfVHA+OjpfTV90eXBlPjo6X1NfZG9faXQoX196KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG9sYXIoY29uc3QgX1RwJiBfX3Jo
bywgY29uc3QgX1RwJiBfX3RoZXRhKQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+KF9fcmhvICog
Y29zKF9fdGhldGEpLCBfX3JobyAqIHNpbihfX3RoZXRhKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgY29uaihjb25zdCBjb21wbGV4PF9U
cD4mIF9feikKICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196LmltYWco
KSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIGNvcyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgY29uc3QgX1RwIF9f
eCA9IF9fei5yZWFsKCk7CiAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICBy
ZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29zaChfX3kpLCAtc2luKF9feCkgKiBzaW5o
KF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxl
eDxfVHA+CiAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBjb25z
dCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7
CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChfX3gpICogY29zKF9feSksIHNpbmgoX194
KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IGNvbXBsZXg8X1RwPgogICAgZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgeyByZXR1
cm4gcG9sYXIoZXhwKF9fei5yZWFsKCkpLCBfX3ouaW1hZygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBsb2coY29uc3QgY29tcGxleDxf
VHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4obG9nKGFicyhfX3opKSwgYXJnKF9f
eikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgeyByZXR1cm4gbG9nKF9feikg
LyBsb2coX1RwKDEwLjApKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
Y29tcGxleDxfVHA+CiAgICBzaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAg
IGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOwogICAgICBjb25zdCBfVHAgX195ID0gX196Lmlt
YWcoKTsKICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihzaW4oX194KSAqIGNvc2goX195KSwgY29z
KF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg
ewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1RwIF9feSA9
IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oc2luaChfX3gpICogY29zKF9f
eSksIGNvc2goX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgY29tcGxleDxfVHA+CiAgICBzcXJ0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg
ewogICAgICBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5pbWFnKCk7
CgogICAgICBpZiAoX194ID09IF9UcCgpKQogICAgICAgIHsKICAgICAgICAgIF9UcCBfX3QgPSBz
cXJ0KGFicyhfX3kpIC8gMik7CiAgICAgICAgICByZXR1cm4gY29tcGxleDxfVHA+KF9fdCwgX195
IDwgX1RwKCkgPyAtX190IDogX190KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICBfVHAgX190ID0gc3FydCgyICogKGFicyhfX3opICsgYWJzKF9feCkpKTsKICAgICAg
ICAgIF9UcCBfX3UgPSBfX3QgLyAyOwogICAgICAgICAgcmV0dXJuIF9feCA+IF9UcCgpCiAgICAg
ICAgICAgID8gY29tcGxleDxfVHA+KF9fdSwgX195IC8gX190KQogICAgICAgICAgICA6IGNvbXBs
ZXg8X1RwPihhYnMoX195KSAvIF9fdCwgX195IDwgX1RwKCkgPyAtX191IDogX191KTsKICAgICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9U
cD4KICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgcmV0dXJuIHNp
bihfX3opIC8gY29zKF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBjb21wbGV4PF9UcD4KICAgIHRhbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7
CiAgICAgIHJldHVybiBzaW5oKF9feikgLyBjb3NoKF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4
PF9UcD4mIF9feiwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fcG93X2hlbHBlcihfX3os
IF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4
PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAg
ICB7CiAgICAgIHJldHVybiBleHAoX195ICogbG9nKF9feCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBwb3coY29uc3QgY29tcGxl
eDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgewogICAgICByZXR1cm4g
ZXhwKF9feSAqIGxvZyhfX3gpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4
PF9UcD4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGV4cChfX3kgKiBsb2coX194KSk7CiAgICB9
CgoKCiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PgogIHsKICBwdWJsaWM6CiAgICB0
eXBlZGVmIGZsb2F0IHZhbHVlX3R5cGU7CgogICAgY29tcGxleChmbG9hdCA9IDAuMGYsIGZsb2F0
ID0gMC4wZik7CgoKCiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYp
OwogICAgZXhwbGljaXQgY29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYpOwoKICAg
IGZsb2F0IHJlYWwoKSBjb25zdDsKICAgIGZsb2F0IGltYWcoKSBjb25zdDsKCiAgICBjb21wbGV4
PGZsb2F0PiYgb3BlcmF0b3I9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcis9
KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvci09KGZsb2F0KTsKICAgIGNvbXBs
ZXg8ZmxvYXQ+JiBvcGVyYXRvcio9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRv
ci89KGZsb2F0KTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8
ZmxvYXQ+Jm9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxf
VHA+Jik7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVy
YXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgogICAg
ICBjb21wbGV4PGZsb2F0PiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRl
bXBsYXRlPGNsYXNzIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mb3BlcmF0b3IvPShjb25zdCBj
b21wbGV4PF9UcD4mKTsKCiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4X18gZmxvYXQg
X0NvbXBsZXhUOwogICAgX0NvbXBsZXhUIF9NX3ZhbHVlOwoKICAgIGNvbXBsZXgoX0NvbXBsZXhU
IF9feikgOiBfTV92YWx1ZShfX3opIHsgfQoKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGRvdWJs
ZT47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CiAgfTsKCiAgaW5saW5l
IGZsb2F0CiAgY29tcGxleDxmbG9hdD46OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9fcmVhbF9f
IF9NX3ZhbHVlOyB9CgogIGlubGluZSBmbG9hdAogIGNvbXBsZXg8ZmxvYXQ+OjppbWFnKCkgY29u
c3QKICB7IHJldHVybiBfX2ltYWdfXyBfTV92YWx1ZTsgfQoKICBpbmxpbmUKICBjb21wbGV4PGZs
b2F0Pjo6Y29tcGxleChmbG9hdCByLCBmbG9hdCBpKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVl
ID0gcjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gaTsKICB9CgogIGlubGluZSBjb21wbGV4PGZs
b2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9KGZsb2F0IF9fZikKICB7CiAgICBfX3Jl
YWxfXyBfTV92YWx1ZSA9IF9fZjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gMC4wZjsKICAgIHJl
dHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0
Pjo6b3BlcmF0b3IrPShmbG9hdCBfX2YpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19m
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBs
ZXg8ZmxvYXQ+OjpvcGVyYXRvci09KGZsb2F0IF9fZikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1
ZSAtPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxmbG9hdD4m
CiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yKj0oZmxvYXQgX19mKQogIHsKICAgIF9NX3ZhbHVl
ICo9IF9fZjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYK
ICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IvPShmbG9hdCBfX2YpCiAgewogICAgX01fdmFsdWUg
Lz0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9KGNvbnN0
IGNvbXBsZXg8X1RwPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwo
KTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICAgIHJldHVybiAqdGhpczsK
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAg
Y29tcGxleDxmbG9hdD46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgewog
ICAgX19yZWFsX18gX01fdmFsdWUgKz0gX196LnJlYWwoKTsKICAgIF9faW1hZ19fIF9NX3ZhbHVl
ICs9IF9fei5pbWFnKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0Pjo6b3Bl
cmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICBfX3JlYWxfXyBfTV92
YWx1ZSAtPSBfX3oucmVhbCgpOwogICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7
CiAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IqPShjb25z
dCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19y
ZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsK
ICAgICAgX01fdmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNvbXBsZXg8
ZmxvYXQ+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBf
Q29tcGxleFQgX190OwogICAgICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2lt
YWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAgICBfTV92YWx1ZSAvPSBfX3Q7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8ZG91YmxlPgogIHsK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBsZXgoZG91
YmxlID0wLjAsIGRvdWJsZSA9MC4wKTsKCgoKICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxmbG9h
dD4mKTsKICAgIGV4cGxpY2l0IGNvbXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mKTsK
CiAgICBkb3VibGUgcmVhbCgpIGNvbnN0OwogICAgZG91YmxlIGltYWcoKSBjb25zdDsKCiAgICBj
b21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yPShkb3VibGUpOwogICAgY29tcGxleDxkb3VibGU+JiBv
cGVyYXRvcis9KGRvdWJsZSk7CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yLT0oZG91Ymxl
KTsKICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IqPShkb3VibGUpOwogICAgY29tcGxleDxk
b3VibGU+JiBvcGVyYXRvci89KGRvdWJsZSk7CgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9y
Kz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg
IGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcio9KGNv
bnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21w
bGV4PGRvdWJsZT4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHByaXZhdGU6
CiAgICB0eXBlZGVmIF9fY29tcGxleF9fIGRvdWJsZSBfQ29tcGxleFQ7CiAgICBfQ29tcGxleFQg
X01fdmFsdWU7CgogICAgY29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9feikgeyB9
CgogICAgZnJpZW5kIGNsYXNzIGNvbXBsZXg8ZmxvYXQ+OwogICAgZnJpZW5kIGNsYXNzIGNvbXBs
ZXg8bG9uZyBkb3VibGU+OwogIH07CgogIGlubGluZSBkb3VibGUKICBjb21wbGV4PGRvdWJsZT46
OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBk
b3VibGUKICBjb21wbGV4PGRvdWJsZT46OmltYWcoKSBjb25zdAogIHsgcmV0dXJuIF9faW1hZ19f
IF9NX3ZhbHVlOyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChkb3VibGUg
X19yLCBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19p
bWFnX18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+JgogIGNv
bXBsZXg8ZG91YmxlPjo6b3BlcmF0b3I9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFsX18gX01f
dmFsdWUgPSBfX2Q7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IDAuMDsKICAgIHJldHVybiAqdGhp
czsKICB9CgogIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVy
YXRvcis9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19kOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICBjb21wbGV4PGRv
dWJsZT46Om9wZXJhdG9yLT0oZG91YmxlIF9fZCkKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAt
PSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+Jgog
IGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShkb3VibGUgX19kKQogIHsKICAgIF9NX3ZhbHVl
ICo9IF9fZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGRvdWJsZT4m
CiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvci89KGRvdWJsZSBfX2QpCiAgewogICAgX01fdmFs
dWUgLz0gX19kOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0
b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92YWx1
ZSA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgY29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcis9KGNvbnN0
IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3ou
cmVhbCgpOwogICAgICBfX2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21w
bGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3QgY29tcGxl
eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7
CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8ZG91
YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4m
IF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196
LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUg
Kj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJh
dG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7
CiAgICAgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9f
ei5pbWFnKCk7CiAgICAgIF9NX3ZhbHVlIC89IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKCgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT4KICB7CiAgcHVibGlj
OgogICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBsZXgobG9uZyBk
b3VibGUgPSAwLjBMLCBsb25nIGRvdWJsZSA9IDAuMEwpOwoKCgogICAgY29tcGxleChjb25zdCBj
b21wbGV4PGZsb2F0PiYpOwogICAgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mKTsKCiAg
ICBsb25nIGRvdWJsZSByZWFsKCkgY29uc3Q7CiAgICBsb25nIGRvdWJsZSBpbWFnKCkgY29uc3Q7
CgogICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPSAobG9uZyBkb3VibGUpOwogICAg
Y29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yKz0gKGxvbmcgZG91YmxlKTsKICAgIGNvbXBs
ZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09IChsb25nIGRvdWJsZSk7CiAgICBjb21wbGV4PGxv
bmcgZG91YmxlPiYgb3BlcmF0b3IqPSAobG9uZyBkb3VibGUpOwogICAgY29tcGxleDxsb25nIGRv
dWJsZT4mIG9wZXJhdG9yLz0gKGxvbmcgZG91YmxlKTsKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPShjb25zdCBjb21wbGV4
PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRv
dWJsZT4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09KGNvbnN0IGNv
bXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxv
bmcgZG91YmxlPiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yLz0oY29u
c3QgY29tcGxleDxfVHA+Jik7CgogIHByaXZhdGU6CiAgICB0eXBlZGVmIF9fY29tcGxleF9fIGxv
bmcgZG91YmxlIF9Db21wbGV4VDsKICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKCiAgICBjb21wbGV4
KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KCiAgICBmcmllbmQgY2xhc3MgY29t
cGxleDxmbG9hdD47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxkb3VibGU+OwogIH07CgogIGlu
bGluZQogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGxvbmcgZG91YmxlIF9fciwgbG9u
ZyBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19pbWFn
X18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb21wbGV4PGxv
bmcgZG91YmxlPjo6cmVhbCgpIGNvbnN0CiAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0K
CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29tcGxleDxsb25nIGRvdWJsZT46OmltYWcoKSBjb25z
dAogIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBjb21wbGV4PGxvbmcg
ZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3I9KGxvbmcgZG91YmxlIF9f
cikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fcjsKICAgIF9faW1hZ19fIF9NX3ZhbHVl
ID0gMC4wTDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGxvbmcgZG91
YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IrPShsb25nIGRvdWJsZSBfX3Ip
CiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19yOwogICAgcmV0dXJuICp0aGlzOwogIH0K
CiAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpv
cGVyYXRvci09KGxvbmcgZG91YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBf
X3I7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4m
CiAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0obG9uZyBkb3VibGUgX19yKQogIHsK
ICAgIF9NX3ZhbHVlICo9IF9fcjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21w
bGV4PGxvbmcgZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IvPShsb25n
IGRvdWJsZSBfX3IpCiAgewogICAgX01fdmFsdWUgLz0gX19yOwogICAgcmV0dXJuICp0aGlzOwog
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3Vi
bGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9U
cD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVhbCgpOwogICAg
ICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3Vi
bGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxf
VHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7CiAg
ICAgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBk
b3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3QgY29tcGxl
eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7
CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9u
ZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0oY29uc3QgY29t
cGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7CiAgICAgIF9fcmVhbF9f
IF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CiAgICAg
IF9NX3ZhbHVlICo9IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4
PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsK
ICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAg
ICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgLz0gX190OwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKICBpbmxpbmUKICBjb21wbGV4PGZsb2F0Pjo6Y29t
cGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChf
X3ouX01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxmbG9hdD46OmNvbXBsZXgoY29u
c3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChfX3ou
X01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxkb3VibGU+Ojpjb21wbGV4KGNvbnN0
IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCiAgOiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVl
KSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4
PGxvbmcgZG91YmxlPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwo
KTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICB9CgogIGlubGluZQogIGNv
bXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCiAg
OiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBs
ZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYgX196KQogIDog
X01fdmFsdWUoX0NvbXBsZXhUKF9fei5fTV92YWx1ZSkpIHsgfQp9CiMgMzIgIi91c3IvaW5jbHVk
ZS9nKystdjMvY29tcGxleCIgMiAzCiMgMzkgIktleURhdGEuaCIgMgojIDEgIkZpdHNFcnJvci5o
IiAxCiMgNDAgIktleURhdGEuaCIgMgojIDEgIkZJVFNVdGlsLmgiIDEKIyAyNiAiRklUU1V0aWwu
aCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAxIDMKIyAyNyAiRklUU1V0aWwu
aCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY29tcGxleCIgMSAzCiMgMjggIkZJVFNVdGls
LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMjkgIkZJVFNV
dGlsLmgiIDIKIyAxICJDQ2ZpdHMuaCIgMQojIDMwICJGSVRTVXRpbC5oIiAyCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM3ICJGSVRTVXRpbC5oIiAyCgojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAzOSAiRklUU1V0aWwuaCIgMgoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2Z1bmN0aW9uYWwiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1
bmN0aW9uYWwuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rp
b25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2MrK2NvbmZpZy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5j
dGlvbmFsLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjMg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVu
Y3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy
ZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNz
IF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3Rf
YXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5
cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp
bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGll
czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1
YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n
aWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAg
X1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0
IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29u
c3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K
aW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9f
cHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2Fy
Z3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVk
OgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUo
Y29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVu
dF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1By
ZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5
X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
bj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp
b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsK
cHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg
OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu
dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w
KHZhbHVlLCBfX3gpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3Mg
X1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlv
biYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVy
YXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0
aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVl
OwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAg
ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0
X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv
cChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNz
IF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRp
b24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09w
ZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl
Pgp7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4y
OwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBf
T3BlcmF0aW9uMiYgX195KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSkge30KICB0eXBl
bmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l
IF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9m
bjEoX01fZm4yKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xh
c3MgX09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRp
b24yPgpjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24y
JiBfX2ZuMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24y
PihfX2ZuMSwgX19mbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9P
cGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5
cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9m
bjI7CiAgX09wZXJhdGlvbjMgX01fZm4zOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3Qg
X09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAg
ICBjb25zdCBfT3BlcmF0aW9uMyYgX196KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSks
IF9NX2ZuMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9w
ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSwgX01fZm4zKF9feCkpOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNz
IF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRp
b24yLCBfT3BlcmF0aW9uMz4KY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25z
dCBfT3BlcmF0aW9uMiYgX19mbjIsCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX2ZuMykK
ewogIHJldHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0
aW9uMz4KICAgIChfX2ZuMSwgX19mbjIsIF9fZm4zKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs
IGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9N
X3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBl
eHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6
IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJl
dHVybiBfTV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1
bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9m
dW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6
CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3Rl
ZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50
ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9f
eCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3Qg
ewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2Jp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gp
KF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0Fy
ZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf
SWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0
b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9Q
YWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy
YXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k
X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f
eC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0
IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0
cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307CgoKdGVtcGxhdGUg
PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShj
b25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3Bl
cmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2pl
Y3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9q
ZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0
cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4gewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsK
ICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRf
dHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9y
KCkoKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0
LCBjbGFzcyBfQXJndW1lbnQ+CnN0cnVjdCBfQ29uc3RhbnRfdW5hcnlfZnVuIHsKICB0eXBlZGVm
IF9Bcmd1bWVudCBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsK
ICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0
X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRv
cigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Db25z
dGFudF9iaW5hcnlfZnVuIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVz
dWx0X3R5cGU7CiAgX1Jlc3VsdCBfTV92YWw7CgogIF9Db25zdGFudF9iaW5hcnlfZnVuKGNvbnN0
IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVy
YXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01f
dmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9p
ZF9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IHsKICBjb25zdGFudF92
b2lkX2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+
KF9fdikge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9B
cmd1bWVudCA9IF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0Nv
bnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CnsKICBjb25zdGFudF91bmFyeV9m
dW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQs
IF9Bcmd1bWVudD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAg
ICAgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZzIgPSBfQXJnMT4K
c3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4KICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1
bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+CnsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9S
ZXN1bHQmIF9fdikKICAgIDogX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9B
cmcyPihfX3YpIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50
X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl
dHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29u
c3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1
bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFu
dDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxf
UmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3Ju
ZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpw
cml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsK
ICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5z
aWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1
OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9p
bmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICBy
ZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRp
YWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsK
ICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9
IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSAr
IDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sg
PSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAg
ICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZv
ciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0g
X01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAg
X01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5n
KHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJh
Y3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CiMgNTYyICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp
KCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4g
KF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Qg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZh
dGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAo
X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
X1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw
KiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwg
Y2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw
JiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0
IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2
b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25z
dCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChf
VHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m
KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9y
ZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu
MV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh
dG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBf
X3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo
dm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf
TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkg
Y29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
X0FyZykgY29uc3Q7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7
IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1Jl
dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9m
dW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJl
dHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1
bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5f
cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChf
VHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6
OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAs
X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYo
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9y
ZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp9CiMgNTEgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfZnVuY3Rpb25hbC5oIiAyIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy12My9mdW5j
dGlvbmFsIiAyIDMKIyA0MSAiRklUU1V0aWwuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L3ZhbGFycmF5IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy12My92YWxhcnJheSIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMSAzCiMgMzYgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NtYXRoLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFy
cmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAx
IDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMSAzCiMgNjAgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJpYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA2MSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9udW1lcmljLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9udW1lcmljLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aXRlcmF0b3IuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJp
Yy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEg
MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9udW1lcmljLmgiIDEgMwojIDY0ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX251bWVyaWMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX1RwPgpfVHAgYWNjdW11bGF0ZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBfX2luaXQgPSBfX2luaXQgKyAqX19maXJzdDsKICByZXR1cm4gX19pbml0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeU9wZXJhdGlv
bj4KX1RwIGFjY3VtdWxhdGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LCBfVHAgX19pbml0LAogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5h
cnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICBfX2luaXQgPSBfX2JpbmFyeV9vcChfX2luaXQsICpfX2ZpcnN0KTsKICByZXR1
cm4gX19pbml0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IxLCBjbGFzcyBfSW5w
dXRJdGVyYXRvcjIsIGNsYXNzIF9UcD4KX1RwIGlubmVyX3Byb2R1Y3QoX0lucHV0SXRlcmF0b3Ix
IF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpCiAgICBfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmlyc3QyKTsKICBy
ZXR1cm4gX19pbml0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IxLCBjbGFzcyBf
SW5wdXRJdGVyYXRvcjIsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRp
b24xLCBjbGFzcyBfQmluYXJ5T3BlcmF0aW9uMj4KX1RwIGlubmVyX3Byb2R1Y3QoX0lucHV0SXRl
cmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQsCiAgICAgICAgICAgICAgICAg
X0JpbmFyeU9wZXJhdGlvbjEgX19iaW5hcnlfb3AxLAogICAgICAgICAgICAgICAgIF9CaW5hcnlP
cGVyYXRpb24yIF9fYmluYXJ5X29wMikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg
IF9faW5pdCA9IF9fYmluYXJ5X29wMShfX2luaXQsIF9fYmluYXJ5X29wMigqX19maXJzdDEsICpf
X2ZpcnN0MikpOwogIHJldHVybiBfX2luaXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyYXRvcgpf
X3BhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9UcCopCnsKICBfVHAg
X192YWx1ZSA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBf
X3ZhbHVlID0gX192YWx1ZSArICpfX2ZpcnN0OwogICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwog
IH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
LCBjbGFzcyBfT3V0cHV0SXRlcmF0b3I+Cl9PdXRwdXRJdGVyYXRvcgpwYXJ0aWFsX3N1bShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9P
dXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcGFydGlhbF9zdW0oX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz
cyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVy
YXRpb24+Cl9PdXRwdXRJdGVyYXRvcgpfX3BhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3Ig
X19yZXN1bHQsIF9UcCosIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCnsKICBfVHAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX3Zh
bHVlID0gX19iaW5hcnlfb3AoX192YWx1ZSwgKl9fZmlyc3QpOwogICAgKisrX19yZXN1bHQgPSBf
X3ZhbHVlOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+
Cl9PdXRwdXRJdGVyYXRvcgpwYXJ0aWFsX3N1bShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwg
X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgcmV0dXJuIF9fcGFydGlhbF9zdW0oX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9fYmluYXJ5X29w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0
b3IsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXJhdG9yCl9fYWRqYWNlbnRfZGlmZmVyZW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9UcCopCnsKICBfVHAgX192YWx1ZSA9
ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfVHAgX190bXAg
PSAqX19maXJzdDsKICAgICorK19fcmVzdWx0ID0gX190bXAgLSBfX3ZhbHVlOwogICAgX192YWx1
ZSA9IF9fdG1wOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3I+Cl9PdXRwdXRJdGVyYXRvcgphZGph
Y2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVz
dWx0OwogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX2FkamFjZW50X2RpZmZlcmVu
Y2UoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBf
QmluYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlcmF0b3IKX19hZGphY2VudF9kaWZmZXJlbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1RwKiwKICAgICAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApIHsKICBfVHAgX192YWx1ZSA9ICpf
X2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfVHAgX190bXAgPSAq
X19maXJzdDsKICAgICorK19fcmVzdWx0ID0gX19iaW5hcnlfb3AoX190bXAsIF9fdmFsdWUpOwog
ICAgX192YWx1ZSA9IF9fdG1wOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9CaW5h
cnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyYXRvcgphZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3Ap
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fcmVzdWx0OwogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX2FkamFjZW50X2Rp
ZmZlcmVuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fYmluYXJ5X29wKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9J
bnRlZ2VyLCBjbGFzcyBfTW9ub2lkT3BlcmF0aW9uPgpfVHAgX19wb3dlcihfVHAgX194LCBfSW50
ZWdlciBfX24sIF9Nb25vaWRPcGVyYXRpb24gX19tb25vaWRfb3ApCnsKICBpZiAoX19uID09IDAp
CiAgICByZXR1cm4gaWRlbnRpdHlfZWxlbWVudChfX21vbm9pZF9vcCk7CiAgZWxzZSB7CiAgICB3
aGlsZSAoKF9fbiAmIDEpID09IDApIHsKICAgICAgX19uID4+PSAxOwogICAgICBfX3ggPSBfX21v
bm9pZF9vcChfX3gsIF9feCk7CiAgICB9CgogICAgX1RwIF9fcmVzdWx0ID0gX194OwogICAgX19u
ID4+PSAxOwogICAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICAgIF9feCA9IF9fbW9ub2lkX29wKF9f
eCwgX194KTsKICAgICAgaWYgKChfX24gJiAxKSAhPSAwKQogICAgICAgIF9fcmVzdWx0ID0gX19t
b25vaWRfb3AoX19yZXN1bHQsIF9feCk7CiAgICAgIF9fbiA+Pj0gMTsKICAgIH0KICAgIHJldHVy
biBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9JbnRlZ2VyPgpp
bmxpbmUgX1RwIF9fcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uKQp7CiAgcmV0dXJuIF9fcG93
ZXIoX194LCBfX24sIG11bHRpcGxpZXM8X1RwPigpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9Nb25vaWRPcGVyYXRpb24+CmlubGluZSBfVHAgcG93
ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQp7
CiAgcmV0dXJuIF9fcG93ZXIoX194LCBfX24sIF9fbW9ub2lkX29wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0ludGVnZXI+CmlubGluZSBfVHAgcG93ZXIoX1RwIF9feCwgX0ludGVn
ZXIgX19uKQp7CiAgcmV0dXJuIF9fcG93ZXIoX194LCBfX24pOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZAppb3RhKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfVHAgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgKl9fZmlyc3QrKyA9IF9f
dmFsdWUrKzsKfQoKfQojIDY1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMu
aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDEgMwojIDQz
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgICB0
ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPiBjbGFzcyBfRXhwcjsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBjbGFzcyBfVmFsQXJyYXk7CgogICAg
dGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLAogICAgICAgIHRlbXBsYXRlPGNs
YXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IHN0cnVjdCBfVW5DbG9zOwoKICAg
IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwKICAgICAgICB0ZW1wbGF0ZTxj
bGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhMSwKICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+
IGNsYXNzIF9NZXRhMiwKICAgICAgICBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9C
aW5DbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEs
IGNsYXNzIF9Eb20+IGNsYXNzIF9TQ2xvczsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywg
Y2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBjbGFzcyBfR0Nsb3M7CgogICAgdGVtcGxh
dGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3Mg
X0lDbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEs
IGNsYXNzIF9Eb20+IGNsYXNzIF9WYWxGdW5DbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNs
YXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IGNsYXNzIF9SZWZGdW5DbG9zOwoK
ICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzOwogICAgdGVtcGxhdGU8
Y2xhc3MgX1RwPiBzdHJ1Y3QgX0JpdHdpc2VfYW5kOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBz
dHJ1Y3QgX0JpdHdpc2Vfb3I7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfQml0d2lz
ZV94b3I7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfQml0d2lzZV9ub3Q7CiAgICB0
ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfU2hpZnRfbGVmdDsKICAgIHRlbXBsYXRlPGNsYXNz
IF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodDsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNz
IHZhbGFycmF5OwogICAgY2xhc3Mgc2xpY2U7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNz
IHNsaWNlX2FycmF5OwogICAgY2xhc3MgZ3NsaWNlOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBj
bGFzcyBnc2xpY2VfYXJyYXk7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIG1hc2tfYXJy
YXk7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIGluZGlyZWN0X2FycmF5OwoKfQoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMSAzCiMgMzYgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9hcnJheS5oIiAzCgojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzgg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9hcnJheS5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvY3BwX3R5cGVfdHJhaXRzLmgiIDEgMwojIDM5ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJy
YXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDQyICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKCgoKCgoKICBpbmxpbmUgdm9pZCoKICBfX3ZhbGFycmF5X2dldF9tZW1vcnkoc2l6ZV90
IF9fbikKICB7IHJldHVybiBvcGVyYXRvciBuZXcoX19uKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgaW5saW5lIF9UcCpfX3Jlc3RyaWN0X18KICBfX3ZhbGFycmF5X2dldF9zdG9yYWdl
KHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCpfX3Jlc3RyaWN0X18+
CiAgICAgIChfX3ZhbGFycmF5X2dldF9tZW1vcnkoX19uICogc2l6ZW9mKF9UcCkpKTsKICB9CgoK
ICBpbmxpbmUgdm9pZAogIF9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkodm9pZCogX19wKQogIHsg
b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2w+
CiAgc3RydWN0IF9BcnJheV9kZWZhdWx0X2N0b3IKICB7CgoKICAgIGlubGluZSBzdGF0aWMgdm9p
ZAogICAgX1NfZG9faXQoX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3RfXyBf
X2UpCiAgICB7IHdoaWxlIChfX2IgIT0gX19lKSBuZXcoX19iKyspIF9UcCgpOyB9CiAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHN0cnVjdCBfQXJyYXlfZGVmYXVsdF9jdG9yPF9UcCwg
dHJ1ZT4KICB7CgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBfU19kb19pdChfVHAqIF9fcmVz
dHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkKICAgIHsgbWVtc2V0KF9fYiwgMCwg
KF9fZSAtIF9fYikqc2l6ZW9mKF9UcCkpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogIGlubGluZSB2b2lkCiAgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfVHAqIF9fcmVz
dHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkKICB7CiAgICBfQXJyYXlfZGVmYXVs
dF9jdG9yPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2Rv
X2l0KF9fYiwgX19lKTsKICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KICBz
dHJ1Y3QgX0FycmF5X2luaXRfY3RvcgogIHsKCgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBf
U19kb19pdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSwgY29u
c3QgX1RwIF9fdCkKICAgIHsgd2hpbGUgKF9fYiAhPSBfX2UpIG5ldyhfX2IrKykgX1RwKF9fdCk7
IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9BcnJheV9pbml0X2N0
b3I8X1RwLCB0cnVlPgogIHsKICAgIGlubGluZSBzdGF0aWMgdm9pZAogICAgX1NfZG9faXQoX1Rw
KiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsIGNvbnN0IF9UcCBfX3Qp
CiAgICB7IHdoaWxlIChfX2IgIT0gX19lKSAqX19iKysgPSBfX3Q7IH0KICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGxfY29uc3RydWN0
KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fdCkKICB7CiAgICBfQXJyYXlfaW5pdF9jdG9y
PF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2RvX2l0KF9f
YiwgX19lLCBfX3QpOwogIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KICBz
dHJ1Y3QgX0FycmF5X2NvcHlfY3RvcgogIHsKCgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBf
U19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIGNvbnN0IF9UcCogX19yZXN0cmlj
dF9fIF9fZSwKICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fbykKICAgIHsgd2hpbGUg
KF9fYiAhPSBfX2UpIG5ldyhfX28rKykgX1RwKCpfX2IrKyk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3I8X1RwLCB0cnVlPgogIHsKICAg
IGlubGluZSBzdGF0aWMgdm9pZAogICAgX1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18g
X19iLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsCiAgICAgICAgICAgICBfVHAqIF9fcmVz
dHJpY3RfXyBfX28pCiAgICB7IG1lbWNweShfX28sIF9fYiwgKF9fZSAtIF9fYikqc2l6ZW9mKF9U
cCkpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192
YWxhcnJheV9jb3B5X2NvbnN0cnVjdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pCiAgewogICAgX0Fy
cmF5X2NvcHlfY3RvcjxfVHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlwZT46OgogICAg
ICBfU19kb19pdChfX2IsIF9fZSwgX19vKTsKICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChjb25zdCBfVHAqIF9f
cmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fcywgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQogIHsKICAgIGlmIChfX2lzX2Z1bmRh
bWVudGFsPF9UcD46Ol9NX3R5cGUpCiAgICAgIHdoaWxlIChfX24tLSkgeyAqX19vKysgPSAqX19h
OyBfX2EgKz0gX19zOyB9CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24tLSkgeyBuZXcoX19vKysp
IF9UcCgqX19hKTsgX19hICs9IF9fczsgfQogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICBpbmxpbmUgdm9pZAogIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0IF9UcCogX19y
ZXN0cmljdF9fIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qq
IF9fcmVzdHJpY3RfXyBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jl
c3RyaWN0X18gX19vLCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX2lzX2Z1bmRhbWVudGFsPF9U
cD46Ol9NX3R5cGUpCiAgICAgIHdoaWxlIChfX24tLSkgKl9fbysrID0gX19hWypfX2krK107CiAg
ICBlbHNlCiAgICAgIHdoaWxlIChfX24tLSkgbmV3IChfX28rKykgX1RwKF9fYVsqX19pKytdKTsK
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5
X2Rlc3Ryb3lfZWxlbWVudHMoX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3Rf
XyBfX2UpCiAgewogICAgaWYgKCFfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5cGUpCiAgICAg
IHdoaWxlIChfX2IgIT0gX19lKSB7IF9fYi0+fl9UcCgpOyArK19fYjsgfQogIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgX192YWxhcnJheV9maWxsIChfVHAqIF9fcmVzdHJp
Y3RfXyBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgd2hpbGUgKF9fbi0tKSAq
X19hKysgPSBfX3Q7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgdm9pZAog
IF9fdmFsYXJyYXlfZmlsbCAoX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAogICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fcywgY29uc3QgX1RwJiBfX3QpCiAgeyBmb3IgKHNpemVf
dCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fYSs9X19zKSAqX19hID0gX190OyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGwoX1RwKiBf
X3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCiAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgZm9yIChzaXplX3QgX19q
PTA7IF9fajxfX247ICsrX19qLCArK19faSkgX19hWypfX2ldID0gX190OyB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCBib29sPgogIHN0cnVjdCBfQXJyYXlfY29waWVyCiAgewogICAgaW5s
aW5lIHN0YXRpYyB2b2lkCiAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2Es
IHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKICAgIHsgd2hpbGUgKF9fbi0tKSAq
X19iKysgPSAqX19hKys7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0
IF9BcnJheV9jb3BpZXI8X1RwLCB0cnVlPgogIHsKICAgIGlubGluZSBzdGF0aWMgdm9pZAogICAg
X1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAqIF9f
cmVzdHJpY3RfXyBfX2IpCiAgICB7IG1lbWNweSAoX19iLCBfX2EsIF9fbiAqIHNpemVvZiAoX1Rw
KSk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3Zh
bGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwKICAg
ICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYikKICB7CiAgICBfQXJyYXlfY29w
aWVyPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2RvX2l0
KF9fYSwgX19uLCBfX2IpOwogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUg
dm9pZAogIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXpl
X3QgX19uLCBzaXplX3QgX19zLAogICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18g
X19iKQogIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYiwgX19hICs9
IF9fcykgKl9fYiA9ICpfX2E7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUg
dm9pZAogIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBfVHAq
IF9fcmVzdHJpY3RfXyBfX2IsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBzaXplX3Qg
X19zKQogIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYSwgX19iKz1f
X3MpICpfX2IgPSAqX19hOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZv
aWQKICBfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwKICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faSwKICAgICAgICAgICAg
ICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fbikKICB7IGZvciAoc2l6ZV90
IF9faj0wOyBfX2o8X19uOyArK19faiwgKytfX2IsICsrX19pKSAqX19iID0gX19hWypfX2ldOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2Nv
cHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwKICAgICAgICAgICAg
ICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18g
X19pKQogIHsgZm9yIChzaXplX3QgX19qPTA7IF9fajxfX247ICsrX19qLCArK19fYSwgKytfX2kp
IF9fYlsqX19pXSA9ICpfX2E7IH0KIyAyNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxh
cnJheV9hcnJheS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICBf
X3ZhbGFycmF5X3N1bShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2YsIGNvbnN0IF9UcCogX19y
ZXN0cmljdF9fIF9fbCkKICB7CiAgICBfVHAgX19yID0gX1RwKCk7CiAgICB3aGlsZSAoX19mICE9
IF9fbCkgX19yICs9ICpfX2YrKzsKICAgIHJldHVybiBfX3I7CiAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICBfX3ZhbGFycmF5X3Byb2R1Y3QoY29uc3QgX1RwKiBf
X3Jlc3RyaWN0X18gX19mLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAqIF9fcmVzdHJp
Y3RfXyBfX2wpCiAgewogICAgX1RwIF9fciA9IF9UcCgxKTsKICAgIHdoaWxlIChfX2YgIT0gX19s
KSBfX3IgPSBfX3IgKiAqX19mKys7CiAgICByZXR1cm4gX19yOwogIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UYT4KICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlCiAgX192YWxhcnJh
eV9taW4oY29uc3QgX1RhJiBfX2EpCiAgewogICAgc2l6ZV90IF9fcyA9IF9fYS5zaXplKCk7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UYTo6dmFsdWVfdHlwZSBfVmFsdWVfdHlwZTsKICAgIF9WYWx1
ZV90eXBlIF9fciA9IF9fcyA9PSAwID8gX1ZhbHVlX3R5cGUoKSA6IF9fYVswXTsKICAgIGZvciAo
c2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpCiAgICAgIHsKICAgICAgICBfVmFsdWVf
dHlwZSBfX3QgPSBfX2FbX19pXTsKICAgICAgICBpZiAoX190IDwgX19yKQogICAgICAgICAgX19y
ID0gX190OwogICAgICB9CiAgICByZXR1cm4gX19yOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RhPgogIGlubGluZSB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUKICBfX3ZhbGFycmF5X21heChj
b25zdCBfVGEmIF9fYSkKICB7CiAgICBzaXplX3QgX19zID0gX19hLnNpemUoKTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlIF9WYWx1ZV90eXBlOwogICAgX1ZhbHVlX3R5cGUg
X19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOwogICAgZm9yIChzaXplX3Qg
X19pID0gMTsgX19pIDwgX19zOyArK19faSkKICAgICAgewogICAgICAgIF9WYWx1ZV90eXBlIF9f
dCA9IF9fYVtfX2ldOwogICAgICAgIGlmIChfX3QgPiBfX3IpCiAgICAgICAgICBfX3IgPSBfX3Q7
CiAgICAgIH0KICAgIHJldHVybiBfX3I7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgc3RydWN0IF9BcnJheQogIHsKICAgIGV4cGxpY2l0IF9BcnJheSAoc2l6ZV90KTsKICAg
IGV4cGxpY2l0IF9BcnJheSAoX1RwKiBjb25zdCBfX3Jlc3RyaWN0X18pOwogICAgZXhwbGljaXQg
X0FycmF5IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICBfQXJyYXkgKGNvbnN0IF9UcCogX19y
ZXN0cmljdF9fLCBzaXplX3QpOwoKICAgIF9UcCogYmVnaW4gKCkgY29uc3Q7CgogICAgX1RwKiBj
b25zdCBfX3Jlc3RyaWN0X18gX01fZGF0YTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGwgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fbiwgY29uc3QgX1RwJiBfX3QpCiAgeyBfX3ZhbGFycmF5X2ZpbGwgKF9fYS5fTV9kYXRhLCBf
X24sIF9fdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192
YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIGNv
bnN0IF9UcCYgX190KQogIHsgX192YWxhcnJheV9maWxsIChfX2EuX01fZGF0YSwgX19uLCBfX3Ms
IF9fdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192YWxh
cnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwKICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgX192YWxhcnJheV9maWxs
IChfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fbiwgX190KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9f
YSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKQogIHsgX192YWxhcnJheV9jb3B5IChfX2Eu
X01fZGF0YSwgX19uLCBfX2IuX01fZGF0YSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSB2b2lkCiAgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikKICB7IF9fdmFsYXJyYXlfY29weShfX2Eu
X01fZGF0YSwgX19uLCBfX3MsIF9fYi5fTV9kYXRhKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgX0Fy
cmF5PF9UcD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKQogIHsgX192YWxhcnJheV9jb3B5
IChfX2EuX01fZGF0YSwgX19iLl9NX2RhdGEsIF9fbiwgX19zKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9f
YSwgX0FycmF5PHNpemVfdD4gX19pLAogICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19i
LCBzaXplX3QgX19uKQogIHsgX192YWxhcnJheV9jb3B5IChfX2EuX01fZGF0YSwgX19pLl9NX2Rh
dGEsIF9fYi5fTV9kYXRhLCBfX24pOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxp
bmUgdm9pZAogIF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBf
QXJyYXk8X1RwPiBfX2IsCiAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpCiAg
eyBfX3ZhbGFycmF5X2NvcHkgKF9fYS5fTV9kYXRhLCBfX24sIF9fYi5fTV9kYXRhLCBfX2kuX01f
ZGF0YSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZQogIF9BcnJheTxfVHA+
OjpfQXJyYXkgKHNpemVfdCBfX24pCiAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFn
ZTxfVHA+KF9fbikpCiAgeyBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9NX2RhdGEsIF9N
X2RhdGEgKyBfX24pOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUKICBfQXJy
YXk8X1RwPjo6X0FycmF5IChfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfX3ApIDogX01fZGF0YSAo
X19wKSB7fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9BcnJheTxfVHA+Ojpf
QXJyYXkgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKICAgICAgOiBfTV9kYXRhIChfX3YuX01f
ZGF0YSkge30KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZQogIF9BcnJheTxfVHA+
OjpfQXJyYXkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fcykKICAgIDog
X01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zKSkKICB7IF9fdmFsYXJyYXlf
Y29weV9jb25zdHJ1Y3QoX19iLCBfX3MsIF9NX2RhdGEpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICBpbmxpbmUgX1RwKgogIF9BcnJheTxfVHA+OjpiZWdpbiAoKSBjb25zdAogIHsgcmV0
dXJuIF9NX2RhdGE7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9h
cnJheS5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21l
bnRlZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7
IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAq
X19wICs9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h
dWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBf
X2IpIHsgX1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsg
X19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3AsICsrX19xKSAqX19wICs9ICpfX3E7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1cyAo
X0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg
eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf
X2ksICsrX19wKSAqX19wICs9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp
OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19w
Kz1fX3MsICsrX19xKSAqX19wICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9U
cD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7
IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBf
X3ErPV9fcykgKl9fcCArPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv
bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f
cywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykg
Kl9fcCArPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ks
IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBm
b3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwg
KytfX3EpIF9fYS5fTV9kYXRhWypfX2pdICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6
ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3Ag
KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k
YXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICs9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMg
KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBf
VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChz
aXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gKz0g
X19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
cGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2Is
IHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k
YXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf
X3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wICs9
ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9w
bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5
PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2Rh
dGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19f
cCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgKz0g
Kl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf
YXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3Qg
X0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRh
KTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsr
X19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAr
PSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAm
IF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyAr
K19fcCkgKl9fcCAtPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf
QXJyYXlfYXVnbWVudGVkX21pbnVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJh
eTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5f
TV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLT0gKl9fcTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6
ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19p
PF9fbjsgKytfX2ksICsrX19wKSAqX19wIC09IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h
LCBzaXplX3QgX19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9f
Yi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19f
cypfX247IF9fcCs9X19zLCArK19fcSkgKl9fcCAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h
LCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9f
Yi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19f
bjsgKytfX3AsIF9fcSs9X19zKSAqX19wIC09ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9f
YSwgc2l6ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsg
X1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19p
LCBfX3ArPV9fcykgKl9fcCAtPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5
PHNpemVfdD4gX19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9f
Yi5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRh
K19fbjsgKytfX2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAtPSAqX19xOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5
PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9f
aSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRh
OyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLT0gX19iLl9NX2RhdGFb
Kl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9h
dWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25z
dCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5f
TV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9N
X2RhdGFbKl9fal0gLT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg
X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U
cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2Iu
X01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg
KytfX3A7IH0gKl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5
PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U
cCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2Eu
X01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg
KytfX3E7IH0gKl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf
RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5
PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJv
b2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3Qg
X19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytv
azsgKytfX3A7IH0gKl9fcCAtPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2Es
IHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7
IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICo9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5
PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2Eu
X01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg
KytfX3AsICsrX19xKSAqX19wICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz
cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19h
LCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19h
Ll9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19w
ICo9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVf
dCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9U
cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsr
X19xKSAqX19wICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf
QXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4g
X19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZv
ciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3Er
PV9fcykgKl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4g
dm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Ag
KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9f
cykgKl9fcCAqPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk
IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6
ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9N
X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u
OyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJh
eTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBf
X2kpIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0
YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICo9IF9fYi5fTV9kYXRh
WypfX2pdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf
YXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19p
LCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2og
KF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikg
X19hLl9NX2RhdGFbKl9fal0gKj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2
b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8
Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5f
TV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0
YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpv
aykgeyArK29rOyArK19fcDsgfSAqX19wICo9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNp
emVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAo
X19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5f
TV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUg
KCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgKj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9B
cnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYg
X19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5f
TV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkg
eyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAqPSBfX2VbX19pXTsgfSB9CnRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVz
IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wIC89IF9f
dDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
ZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsg
X1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9f
Yi5fTV9kYXRhK19fbjsgKytfX3AsICsrX19xKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0Fy
cmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBf
VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks
ICsrX19wKSAqX19wIC89IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp
OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19w
Kz1fX3MsICsrX19xKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5
PF9UcD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0
YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19w
LCBfX3ErPV9fcykgKl9fcCAvPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3Mg
X0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6
ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBf
X3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3Ar
PV9fcykgKl9fcCAvPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2
b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6
ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9N
X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u
OyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxf
VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kp
IHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsg
X19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wIC89IF9fYi5fTV9kYXRhWypf
X2pdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn
bWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25z
dCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5f
TV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9N
X2RhdGFbKl9fal0gLz0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19t
LCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsg
X1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9f
Yi5fTV9kYXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29r
OyArK19fcDsgfSAqX19wIC89ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQg
X0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9B
cnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEp
OyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8
X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsr
b2s7ICsrX19xOyB9ICpfX3AgLz0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xh
c3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwg
X0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19u
KSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChz
aXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2sp
IHsgKytvazsgKytfX3A7IH0gKl9fcCAvPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBf
X2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2Rh
dGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICU9IF9fdDsgfSB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5
PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2Eu
X01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg
KytfX3AsICsrX19xKSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz
cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBj
b25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9N
X2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wICU9
IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1
Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3Ms
IF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19w
PV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAq
X19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlf
YXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLCBzaXpl
X3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf
X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3ErPV9fcykgKl9f
cCAlPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJy
YXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3Qg
X0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRh
KTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAlPSBf
X2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJh
eTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNp
emVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3Ep
IF9fYS5fTV9kYXRhWypfX2pdICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRh
K19fbjsgKytfX2osICsrX19wKSAqX19wICU9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMg
KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBf
VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChz
aXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJT0g
X19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
bW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBf
X2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5f
TV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg
KytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19w
ICU9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwg
X0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19i
Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u
OyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpf
X3AgJT0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBf
QXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9f
bSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9f
bS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9f
aTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7
IH0gKl9fcCAlPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv
aWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29u
c3QgX1RwJiBfX3QpIHsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRh
K19fbjsgKytfX3ApICpfX3AgXj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwg
X0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9
X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCBePSAq
X19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn
bWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwg
c2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg
X19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wIF49IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9f
YSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChf
X2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStf
X3MqX19uOyBfX3ArPV9fcywgKytfX3EpICpfX3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2Es
IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19i
Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u
OyArK19fcCwgX19xKz1fX3MpICpfX3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwg
c2l6ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1Rw
KiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBf
X3ArPV9fcykgKl9fcCBePSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXpl
X3Q+IF9faSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01f
ZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247
ICsrX19qLCArK19fcSkgX19hLl9NX2RhdGFbKl9fal0gXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBf
X2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9U
cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxf
X2kuX01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCBePSBfX2IuX01fZGF0YVsqX19qXTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxf
RG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsg
Zm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9f
al0gXj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+
IF9fYiwgc2l6ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19h
Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19u
OyArK19fcSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpf
X3AgXj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVu
dGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9B
cnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5f
TV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsg
KytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19w
IF49ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29u
c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9k
YXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247
ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9f
cCBePSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAm
IF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyAr
K19fcCkgKl9fcCB8PSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf
QXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf
VHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9k
YXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgfD0gKl9fcTsgfSB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v
ciAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9f
bikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsg
KytfX2ksICsrX19wKSAqX19wIHw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg
X19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9f
cCs9X19zLCArK19fcSkgKl9fcCB8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1Rw
PiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsg
Zm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9f
cSs9X19zKSAqX19wIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9t
PiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywg
Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5f
TV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9f
cCB8PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh
eV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBfQXJy
YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChz
aXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19x
KSBfX2EuX01fZGF0YVsqX19qXSB8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19u
LCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9N
X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u
OyArK19faiwgKytfX3ApICpfX3AgfD0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxf
VHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2Us
IHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19r
PTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gfD0gX19lW19fa107
IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJh
eTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19u
KSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAo
X1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCAr
K19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCB8PSAqX19xOyB9IH0g
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxf
VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7
IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19f
cSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0gKl9fcCB8PSAqX19xOyB9IH0gdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3Ig
KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1Rw
PiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19f
cCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCB8PSBfX2VbX19pXTsgfSB9
CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQg
KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAq
IF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgJj0gX190
OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9h
bmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCog
X19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01f
ZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCAmPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4g
X19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAo
X19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAq
X19wICY9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9f
cywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf
X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3ArPV9fcywgKytfX3Ep
ICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh
eV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90
IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19w
PV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgX19xKz1fX3MpICpfX3Ag
Jj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3QgX0V4cHI8
X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9y
IChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAmPSBfX2VbX19p
XTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
YW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgX0FycmF5PF9UcD4gX19i
LCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9
X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcSkgX19hLl9NX2Rh
dGFbKl9fal0gJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf
VHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZv
ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr
K19fcCkgKl9fcCAmPSBfX2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwg
X0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBf
X24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxf
X247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJj0gX19lW19fa107IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBf
X2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBib29s
KiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9UcCogX19x
PV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytfX3ApIHsg
d2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgJj0gKl9fcTsgfSB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4gX19h
LCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29sPiBfX20pIHsgYm9vbCog
b2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1f
X2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrb2ssICsrX19xKSB7IHdo
aWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wICY9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJh
eTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19l
LCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k
YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3
aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAmPSBfX2VbX19pXTsgfSB9CnRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0
IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wIDw8PSBf
X3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVk
X3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19i
KSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9f
cTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCA8PD0gKl9fcTsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9s
ZWZ0IChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3Qg
X19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19u
OyArK19faSwgKytfX3ApICpfX3AgPDw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBf
X2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAo
X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr
X19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIDw8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8
X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAq
IF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9N
X2RhdGErX19uOyArK19fcCwgX19xKz1fX3MpICpfX3AgPDw9ICpfX3E7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAo
X0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwg
c2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg
X19pPF9fbjsgKytfX2ksIF9fcCs9X19zKSAqX19wIDw8PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0Fy
cmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90
IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9k
YXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pd
IDw8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1
Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf
VHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZv
ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr
K19fcCkgKl9fcCA8PD0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9U
cD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg
c2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9
MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA8PD0gX19lW19fa107
IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVm
dCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsIHNp
emVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3Es
ICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIDw8PSAq
X19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hp
ZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9B
cnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5f
TV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsg
KytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19w
IDw8PSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4g
X19tLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2so
X19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg
X19pPF9fbjsgKytfX2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19f
cDsgfSAqX19wIDw8PSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXpl
X3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8
X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9fcCA+Pj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9U
cD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2EuX01f
ZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf
X3AsICsrX19xKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3Mg
X0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2Es
IGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2Eu
X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3Ag
Pj49IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXpl
X3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChf
VHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCAr
K19fcSkgKl9fcCA+Pj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk
IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9U
cD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7
IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBf
X3ErPV9fcykgKl9fcCA+Pj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E
b20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBz
aXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAq
IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9f
cCs9X19zKSAqX19wID4+PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgX0Fy
cmF5PHNpemVfdD4gX19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Eg
KF9fYi5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k
YXRhK19fbjsgKytfX2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSA+Pj0gKl9fcTsgfSB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmln
aHQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8
c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1f
X2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wID4+PSBf
X2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZv
aWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8
c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBz
aXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytf
X2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA+Pj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+
IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJv
b2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBf
X3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkg
eyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCA+Pj0gKl9fcTsgfSB9IHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJy
YXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9f
bSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3Ig
KF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywg
KytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgPj49ICpfX3E7IH0g
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBf
RXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEp
OyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf
X2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wID4+
PSBfX2VbX19pXTsgfSB9CgoKCn0KCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFs
YXJyYXlfYXJyYXkudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFy
cmF5X2FycmF5LnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CnZvaWQKX192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24s
IF9BcnJheTxib29sPiBfX20sIGNvbnN0IF9UcCYgX190KQp7CiAgICBfVHAqIF9fcCA9IF9fYS5f
TV9kYXRhOwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChzaXplX3QgX19p
PTA7IF9faTxfX247ICsrX19pLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUgKCEgKl9f
b2spIHsKICAgICAgICAgICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAgICB9CiAg
ICAgICAgKl9fcCA9IF9fdDsKICAgIH0KfQoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
dm9pZApfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg
X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKQp7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEp
OwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChfVHAqIF9fcT1fX2IuX01f
ZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrX19vaywgKytfX3ApIHsKICAgICAg
ICB3aGlsZSAoISAqX19vaykgewogICAgICAgICAgICArK19fb2s7CiAgICAgICAgICAgICsrX19w
OwogICAgICAgIH0KICAgICAgICAqX19xID0gKl9fcDsKICAgIH0KfQoKICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4Kdm9pZApfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgc2l6
ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKQp7CiAgICBfVHAqIF9f
cSAoX19iLl9NX2RhdGEpOwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChf
VHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrX19vaywg
KytfX3EpIHsKICAgICAgICB3aGlsZSAoISAqX19vaykgewogICAgICAgICAgICArK19fb2s7CiAg
ICAgICAgICAgICsrX19xOwogICAgICAgIH0KICAgICAgICAqX19xID0gKl9fcDsKICAgIH0KfQoK
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9pZApfX3ZhbGFycmF5
X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U
cD4gX19hKQp7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOwogICAgZm9yIChzaXplX3QgX19p
PTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCA9IF9fZVtfX2ldOwp9CgogICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgp2b2lkCl9fdmFsYXJyYXlfY29weSAoY29u
c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgIF9B
cnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcykKewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsK
ICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpfX3AgPSBf
X2VbX19pXTsKfQoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9p
ZApfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9f
biwKICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSkK
ewogICAgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsKICAgIGZvciAoc2l6ZV90IF9faz0wOyBf
X2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9kYXRhWypfX2pdID0gX19lW19fa107Cn0KCiAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CnZvaWQKX192YWxhcnJheV9j
b3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCiAgICAgICAgICAg
ICAgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tKQp7CiAgICBib29sKiBfX29r
IChfX20uX01fZGF0YSk7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOwogICAgZm9yIChzaXpl
X3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUg
KCEgKl9fb2spIHsKICAgICAgICAgICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAg
ICB9CiAgICAgICAgKl9fcCA9IF9fZVtfX2ldOwogICAgfQp9CgoKICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9pZApfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChj
b25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSkKewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsK
ICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApIG5ldyAoX19wKSBf
VHAoX19lW19faV0pOwp9CgoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4Kdm9pZApfX3Zh
bGFycmF5X2NvcHlfY29uc3RydWN0IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikK
ewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKICAgIGJvb2wqIF9fb2sgKF9fbS5fTV9kYXRh
KTsKICAgIGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsr
X19xLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsKICAgICAgICAg
ICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAgICB9CiAgICAgICAgbmV3IChfX3Ep
IF9UcCgqX19wKTsKICAgIH0KfQoKCgoKfQojIDU3MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3ZhbGFycmF5X2FycmF5LmgiIDIgMwojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9t
ZXRhLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5o
IiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFy
cmF5X21ldGEuaCIgMwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4g
Y2xhc3MgX0NvbnN0YW50OwoKCgoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGNsYXNzIF9VbkZ1
bkJhc2UgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVnQ7CgogICAgICAg
IF9VbkZ1bkJhc2UgKGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQpKQogICAgICAgICAgICAg
ICAgOiBfTV9leHByKF9fZSksIF9NX2Z1bmMoX19mKSB7fQoKICAgICAgICBfVnQgb3BlcmF0b3Jb
XSAoc2l6ZV90IF9faSkgY29uc3QgeyByZXR1cm4gX01fZnVuYyhfTV9leHByW19faV0pOyB9CiAg
ICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1cm4gX01fZXhwci5zaXplKCk7IH0KCiAg
ICBwcml2YXRlOgogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CiAgICAgICAgX1Z0ICgqX01f
ZnVuYykoX1Z0KTsKICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBj
bGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4KICAgICAgICBjbGFzcyBfVW5GdW5DbG9zOwoKICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20+CiAgICBzdHJ1Y3QgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiA6IF9V
bkZ1bkJhc2U8X0RvbT4gewogICAgICAgIHR5cGVkZWYgX1VuRnVuQmFzZTxfRG9tPiBfQmFzZTsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Cgog
ICAgICAgIF9VbkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgdmFsdWVfdHlwZSBfX2YodmFsdWVf
dHlwZSkpCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2UsIF9fZikge30KICAgIH07CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U
cD4gOiBfVW5GdW5CYXNlPHZhbGFycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBfVW5GdW5C
YXNlPHZhbGFycmF5PF9UcD4gPiBfQmFzZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl
Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9VbkZ1bkNsb3MgKGNvbnN0IHZhbGFy
cmF5PF9UcD4mIF9fdiwgX1RwIF9fZihfVHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192
LCBfX2YpIHt9CiAgICB9OwoKCgoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4g
Y2xhc3MgX01ldGExLAogICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgTWV0YTIs
CiAgICAgICAgY2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBjbGFzcyBfQmluRnVuQ2xvczsKCiAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5GdW5CYXNlIHsK
ICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIHZh
bHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9WdDsKCiAgICAgICAgX0JpbkZ1
bkJhc2UgKGNvbnN0IF9Eb20xJiBfX2UxLCBjb25zdCBfRG9tMiYgX19lMiwKICAgICAgICAgICAg
ICAgICAgICAgIF9WdCBfX2YgKF9WdCwgX1Z0KSkKICAgICAgICAgICAgICAgIDogX01fZXhwcjEg
KF9fZTEpLCBfTV9leHByMiAoX19lMiksIF9NX2Z1bmMgKF9fZikge30KCiAgICAgICAgdmFsdWVf
dHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX2Z1
bmMgKF9NX2V4cHIxW19faV0sIF9NX2V4cHIyW19faV0pOyB9CiAgICAgICAgc2l6ZV90IHNpemUg
KCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjEuc2l6ZSAoKTsgfQoKICAgIHByaXZhdGU6CiAgICAg
ICAgY29uc3QgX0RvbTEmIF9NX2V4cHIxOwogICAgICAgIGNvbnN0IF9Eb20yJiBfTV9leHByMjsK
ICAgICAgICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNs
YXNzIF9Eb20+IGNsYXNzIF9CaW5GdW5CYXNlMSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGUgOwogICAgICAgIHR5cGVkZWYg
dmFsdWVfdHlwZSBfVnQ7CgogICAgICAgIF9CaW5GdW5CYXNlMSAoY29uc3QgX1Z0JiBfX2MsIGNv
bnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQsIF9WdCkpCiAgICAgICAgICAgICAgICA6IF9NX2V4
cHIxIChfX2MpLCBfTV9leHByMiAoX19lKSwgX01fZnVuYyAoX19mKSB7fQoKICAgICAgICB2YWx1
ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01f
ZnVuYyAoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkg
Y29uc3QgeyByZXR1cm4gX01fZXhwcjIuc2l6ZSAoKTsgfQoKICAgIHByaXZhdGU6CiAgICAgICAg
Y29uc3QgX1Z0JiBfTV9leHByMTsKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByMjsKICAgICAg
ICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9E
b20+IGNsYXNzIF9CaW5GdW5CYXNlMiB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiB2YWx1ZV90
eXBlIF9WdDsKCiAgICAgICAgX0JpbkZ1bkJhc2UyIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IF9W
dCYgX19jLCBfVnQgX19mKF9WdCwgX1Z0KSkKICAgICAgICAgICAgICAgIDogX01fZXhwcjEgKF9f
ZSksIF9NX2V4cHIyIChfX2MpLCBfTV9mdW5jIChfX2YpIHt9CgogICAgICAgIHZhbHVlX3R5cGUg
b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9mdW5jIChf
TV9leHByMVtfX2ldLCBfTV9leHByMik7IH0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7
IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBf
RG9tJiBfTV9leHByMTsKICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOwogICAgICAgIF9WdCAo
Kl9NX2Z1bmMpKF9WdCwgX1Z0KTsKICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNs
YXNzIF9Eb20yPgogICAgc3RydWN0IF9CaW5GdW5DbG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20y
PiA6IF9CaW5GdW5CYXNlPF9Eb20xLF9Eb20yPiB7CiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFz
ZTxfRG9tMSxfRG9tMj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFs
dWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CgogICAg
ICAgIF9CaW5GdW5DbG9zIChjb25zdCBfRG9tMSYgX19lMSwgY29uc3QgX0RvbTImIF9fZTIsCiAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX2YoX1RwLCBfVHApKQogICAgICAgICAgICAgICAgOiBf
QmFzZSAoX19lMSwgX19lMiwgX19mKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPgog
ICAgICAgIDogX0JpbkZ1bkJhc2U8dmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+IHsKICAg
ICAgICB0eXBlZGVmIF9CaW5GdW5CYXNlPHZhbGFycmF5PF9UcD4sIHZhbGFycmF5PF9UcD4gPiBf
QmFzZTsKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluRnVuQ2xv
cyAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3csCiAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX2YoX1RwLCBfVHApKQogICAgICAgICAgICAgICAgOiBf
QmFzZSAoX192LCBfX3csIF9fZikge30KICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4K
ICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiA+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTxf
VHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0Jp
bkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LAogICAg
ICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jh
c2UgKF9fZSwgX192LCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg
ICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUsX0RvbT4KICAgICAgICA6IF9CaW5GdW5CYXNlPHZhbGFycmF5PHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+LF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTxfVHA+
ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0JpbkZ1
bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX0RvbSYgX19lLAogICAgICAg
ICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jhc2Ug
KF9fdiwgX19lLCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICBz
dHJ1Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4KICAgICAgICA6IF9CaW5GdW5CYXNlMjxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2UyPF9Eb20+IF9CYXNlOwoKICAgICAgICBf
QmluRnVuQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBfVHAmIF9fdCwgX1RwIF9fZiAoX1Rw
LCBfVHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX3QsIF9fZikge30KICAgIH07
CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3Rh
bnQsX0V4cHIsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkZ1
bkJhc2UxPF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg
X1RwOwogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiBfQmlu
RnVuQmFzZTE8X0RvbT4gX0Jhc2U7CgogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCBfVHAmIF9f
dCwgY29uc3QgX0RvbSYgX19lLCBfVHAgX19mIChfVHAsIF9UcCkpCiAgICAgICAgICAgICAgICA6
IF9CYXNlIChfX3QsIF9fZSwgX19mKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPgog
ICAgICAgIDogX0JpbkZ1bkJhc2UyPHZhbGFycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBf
QmluRnVuQmFzZTI8dmFsYXJyYXk8X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CgogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Ys
IGNvbnN0IF9UcCYgX190LAogICAgICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkK
ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwgX190LCBfX2YpIHt9CiAgICB9OwoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3RhbnQsX1Zh
bEFycmF5LF9UcCxfVHA+CiAgICAgICAgOiBfQmluRnVuQmFzZTE8dmFsYXJyYXk8X1RwPiA+IHsK
ICAgICAgICB0eXBlZGVmIF9CaW5GdW5CYXNlMTx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAg
ICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9U
cCYgX190LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsCiAgICAgICAgICAgICAgICAgICAgIF9U
cCBfX2YgKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdCwgX192LCBfX2Yp
IHt9CiAgICB9OwoKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRG9tLCB0eXBlbmFtZSBfQXJn
PiBjbGFzcyBfRnVuQmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9GdW5CYXNlIChjb25zdCBfRG9t
JiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQogICAgICAgICAgICAgICAgOiBfTV9leHByIChf
X2UpLCBfTV9mdW5jIChfX2YpIHt9CgogICAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6
ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9mdW5jIChfTV9leHByW19faV0pOyB9
CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7fQoK
ICAgIHByaXZhdGU6CiAgICAgICAgY29uc3QgX0RvbSYgX01fZXhwcjsKICAgICAgICB2YWx1ZV90
eXBlICgqX01fZnVuYykoX0FyZyk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg
ICBzdHJ1Y3QgX1ZhbEZ1bkNsb3M8X0V4cHIsX0RvbT4KICAgICAgICA6IF9GdW5CYXNlPF9Eb20s
IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHsKICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9E
b20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgICB0eXBlZGVmIHZhbHVl
X3R5cGUgX1RwOwoKICAgICAgICBfVmFsRnVuQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBfVHAgX19m
IChfVHApKSA6IF9CYXNlIChfX2UsIF9fZikge30KICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgc3RydWN0IF9WYWxGdW5DbG9zPF9WYWxBcnJheSxfVHA+CiAgICAgICAgOiBf
RnVuQmFzZTx2YWxhcnJheTxfVHA+LCBfVHA+IHsKICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPHZh
bGFycmF5PF9UcD4sIF9UcD4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
CiAgICAgICAgX1ZhbEZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgX1RwIF9fZihf
VHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX2YpIHt9CiAgICB9OwoKICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20+CiAgICBzdHJ1Y3QgX1JlZkZ1bkNsb3M8X0V4cHIsX0RvbT4gOgog
ICAgICAgIF9GdW5CYXNlPF9Eb20sIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmPiB7
CiAgICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlJj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlw
ZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CgogICAgICAgIF9S
ZWZGdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YgKGNvbnN0IF9UcCYpKQogICAgICAg
ICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIHN0cnVjdCBfUmVmRnVuQ2xvczxfVmFsQXJyYXksX1RwPgogICAgICAgIDog
X0Z1bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gewogICAgICAgIHR5cGVkZWYgX0Z1
bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX1JlZkZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4m
IF9fdiwgX1RwIF9fZihjb25zdCBfVHAmKSkKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwg
X19mKSB7fQogICAgfTsKCgoKCgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9P
cGVyLCB0eXBlbmFtZSBfQXJnPgogICAgY2xhc3MgX1VuQmFzZSB7CiAgICBwdWJsaWM6CiAgICAg
ICAgdHlwZWRlZiBfT3Blcjx0eXBlbmFtZSBfQXJnOjp2YWx1ZV90eXBlPiBfT3A7CiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfT3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9V
bkJhc2UgKGNvbnN0IF9BcmcmIF9fZSkgOiBfTV9leHByKF9fZSkge30KICAgICAgICB2YWx1ZV90
eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29uc3Q7CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29u
c3QgeyByZXR1cm4gX01fZXhwci5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25z
dCBfQXJnJiBfTV9leHByOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh
c3MgX09wZXIsIHR5cGVuYW1lIF9Bcmc+CiAgICBpbmxpbmUgdHlwZW5hbWUgX1VuQmFzZTxfT3Bl
ciwgX0FyZz46OnZhbHVlX3R5cGUKICAgIF9VbkJhc2U8X09wZXIsIF9Bcmc+OjpvcGVyYXRvcltd
IChzaXplX3QgX19pKSBjb25zdAogICAgeyByZXR1cm4gX09wKCkgKF9NX2V4cHJbX19pXSk7IH0K
CiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CiAg
ICBzdHJ1Y3QgX1VuQ2xvczxfT3BlciwgX0V4cHIsIF9Eb20+IDogX1VuQmFzZTxfT3BlciwgX0Rv
bT4gewogICAgICAgIHR5cGVkZWYgX0RvbSBfQXJnOwogICAgICAgIHR5cGVkZWYgX1VuQmFzZTxf
T3BlciwgX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVf
dHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfVW5DbG9zIChjb25zdCBfQXJnJiBfX2UpIDogX0Jh
c2UoX19lKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09w
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfVW5DbG9zPF9PcGVyLCBfVmFsQXJyYXksIF9U
cD4gOiBfVW5CYXNlPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4gewogICAgICAgIHR5cGVkZWYgdmFs
YXJyYXk8X1RwPiBfQXJnOwogICAgICAgIHR5cGVkZWYgX1VuQmFzZTxfT3BlciwgdmFsYXJyYXk8
X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUg
dmFsdWVfdHlwZTsKCiAgICAgICAgX1VuQ2xvcyAoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9f
ZSkge30KICAgIH07CgoKCgoKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09w
ZXIsCiAgICAgICAgdHlwZW5hbWUgX0ZpcnN0QXJnLCB0eXBlbmFtZSBfU2Vjb25kQXJnPgogICAg
Y2xhc3MgX0JpbkJhc2UgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgX09wZXI8dHlwZW5h
bWUgX0ZpcnN0QXJnOjp2YWx1ZV90eXBlPiBfT3A7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
T3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9CaW5CYXNlIChjb25zdCBfRmly
c3RBcmcmIF9fZTEsIGNvbnN0IF9TZWNvbmRBcmcmIF9fZTIpCiAgICAgICAgICAgICAgICA6IF9N
X2V4cHIxIChfX2UxKSwgX01fZXhwcjIgKF9fZTIpIHt9CiAgICAgICAgdmFsdWVfdHlwZSBvcGVy
YXRvcltdIChzaXplX3QpIGNvbnN0OwogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0
dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0KCiAgICBwcml2YXRlOgogICAgICAgIGNvbnN0IF9GaXJz
dEFyZyYgX01fZXhwcjE7CiAgICAgICAgY29uc3QgX1NlY29uZEFyZyYgX01fZXhwcjI7CiAgICB9
OwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwKICAgICAgICB0eXBl
bmFtZSBfRmlyc3RBcmcsIHR5cGVuYW1lIF9TZWNvbmRBcmc+CiAgICBpbmxpbmUgdHlwZW5hbWUg
X0JpbkJhc2U8X09wZXIsX0ZpcnN0QXJnLF9TZWNvbmRBcmc+Ojp2YWx1ZV90eXBlCiAgICBfQmlu
QmFzZTxfT3BlcixfRmlyc3RBcmcsX1NlY29uZEFyZz46Om9wZXJhdG9yW10gKHNpemVfdCBfX2kp
IGNvbnN0CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjFbX19pXSwgX01fZXhwcjJbX19pXSk7
IH0KCgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xv
cz4KICAgIGNsYXNzIF9CaW5CYXNlMiB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQ2xvczo6dmFsdWVfdHlwZSBfVnQ7CiAgICAgICAgdHlwZWRlZiBfT3BlcjxfVnQ+IF9P
cDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PcDo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsK
CiAgICAgICAgX0JpbkJhc2UyIChjb25zdCBfQ2xvcyYgX19lLCBjb25zdCBfVnQmIF9fdCkKICAg
ICAgICAgICAgICAgIDogX01fZXhwcjEgKF9fZSksIF9NX2V4cHIyIChfX3QpIHt9CiAgICAgICAg
dmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0OwogICAgICAgIHNpemVfdCBzaXpl
ICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0KCiAgICBwcml2YXRlOgogICAg
ICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMTsKICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9D
bG9zPgogICAgaW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46OnZhbHVlX3R5
cGUKICAgIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46Om9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNv
bnN0CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjFbX19pXSwgX01fZXhwcjIpOyB9CgoKICAg
IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+CiAgICBj
bGFzcyBfQmluQmFzZTEgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Ns
b3M6OnZhbHVlX3R5cGUgX1Z0OwogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7CiAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfT3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAg
IF9CaW5CYXNlMSAoY29uc3QgX1Z0JiBfX3QsIGNvbnN0IF9DbG9zJiBfX2UpCiAgICAgICAgICAg
ICAgICA6IF9NX2V4cHIxIChfX3QpLCBfTV9leHByMiAoX19lKSB7fQogICAgICAgIHZhbHVlX3R5
cGUgb3BlcmF0b3JbXSAoc2l6ZV90KSBjb25zdDsKICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25z
dCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25z
dCBfVnQmIF9NX2V4cHIxOwogICAgICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMjsKICAgIH07Cgog
ICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4KICAg
IGlubGluZSB0eXBlbmFtZQogICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9zPjo6dmFsdWVfdHlwZQog
ICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9zPjo6IG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0
CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CgoKICAgIHRl
bXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbTEsIGNsYXNzIF9E
b20yPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9t
Mj4KICAgICAgICA6IF9CaW5CYXNlPF9PcGVyLF9Eb20xLF9Eb20yPiB7CiAgICAgICAgdHlwZWRl
ZiBfQmluQmFzZTxfT3BlcixfRG9tMSxfRG9tMj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyhjb25z
dCBfRG9tMSYgX19lMSwgY29uc3QgX0RvbTImIF9fZTIpIDogX0Jhc2UoX19lMSwgX19lMikge30K
ICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAs
X1RwPgogICAgICAgIDogX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8X1RwPix2YWxhcnJheTxfVHA+
ID4gewogICAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8X1RwPix2YWxhcnJh
eTxfVHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAg
X0JpbkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiYg
X193KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX3cpIHt9CiAgICB9OwoKICAgIHRl
bXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KICAgIHN0cnVj
dCBfQmluQ2xvczxfT3BlcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPgogICAgICAgIDogX0JpbkJhc2U8X09wZXIsX0RvbSx2YWxhcnJheTx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiA+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsX0RvbSx2YWxhcnJheTxf
VHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2
YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyhjb25zdCBfRG9tJiBfX2UxLCBjb25zdCB2YWxh
cnJheTxfVHA+JiBfX2UyKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lMSwgX19lMikge30K
ICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBf
RG9tPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlLF9Eb20+CiAgICAgICAgOiBfQmluQmFzZTxfT3Blcix2YWxhcnJheTx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPixfRG9tPiB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLHZh
bGFycmF5PF9UcD4sX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8
X1RwPiYgX19lMSwgY29uc3QgX0RvbSYgX19lMikKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9f
ZTEsIF9fZTIpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBf
T3BlciwgY2xhc3MgX0RvbT4KICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfRXhwcixfQ29uc3Rh
bnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkJhc2UyPF9P
cGVyLF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw
OwogICAgICAgIHR5cGVkZWYgX0JpbkJhc2UyPF9PcGVyLF9Eb20+IF9CYXNlOwogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX0Jp
bkNsb3MgKGNvbnN0IF9Eb20mIF9fZTEsIGNvbnN0IF9UcCYgX19lMikgOiBfQmFzZSAoX19lMSwg
X19lMikge30KICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVy
LCBjbGFzcyBfRG9tPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9Db25zdGFudCxfRXhwcix0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+CiAgICAgICAgOiBfQmluQmFzZTE8X09wZXIs
X0RvbT4gewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CiAg
ICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xv
cyAoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKSA6IF9CYXNlIChfX2UxLCBfX2Uy
KSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5
cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfVmFsQXJyYXksX0NvbnN0YW50
LF9UcCxfVHA+CiAgICAgICAgOiBfQmluQmFzZTI8X09wZXIsdmFsYXJyYXk8X1RwPiA+IHsKICAg
ICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAg
ICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCBfVHAmIF9fdCkKICAg
ICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwgX190KSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0
ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmlu
Q2xvczxfT3BlcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+CiAgICAgICAgOiBfQmluQmFz
ZTE8X09wZXIsdmFsYXJyYXk8X1RwPiA+IHsKICAgICAgICB0eXBlZGVmIF9CaW5CYXNlMTxfT3Bl
cix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyAoY29uc3QgX1RwJiBfX3Qs
IGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdCwg
X192KSB7fQogICAgfTsKCgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gY2xhc3MgX1NC
YXNlIHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX1NCYXNlIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHNs
aWNlJiBfX3MpCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIgKF9fZSksIF9NX3NsaWNlIChfX3Mp
IHt9CiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAg
ICAgIHsgcmV0dXJuIF9NX2V4cHJbX01fc2xpY2Uuc3RhcnQgKCkgKyBfX2kgKiBfTV9zbGljZS5z
dHJpZGUgKCldOyB9CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9zbGlj
ZS5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOwog
ICAgICAgIGNvbnN0IHNsaWNlJiBfTV9zbGljZTsKICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBjbGFzcyBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7CiAgICBwdWJsaWM6CiAgICAgICAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX1NCYXNlIChfQXJyYXk8X1RwPiBfX2Es
IGNvbnN0IHNsaWNlJiBfX3MpCiAgICAgICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fZGF0
YStfX3Muc3RhcnQoKSksIF9NX3NpemUgKF9fcy5zaXplKCkpLAogICAgICAgICAgICAgICAgICBf
TV9zdHJpZGUgKF9fcy5zdHJpZGUoKSkge30KICAgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10g
KHNpemVfdCBfX2kpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fYXJyYXkuX01fZGF0YVtfX2kg
KiBfTV9zdHJpZGVdOyB9CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9z
aXplOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsK
ICAgICAgICBjb25zdCBzaXplX3QgX01fc2l6ZTsKICAgICAgICBjb25zdCBzaXplX3QgX01fc3Ry
aWRlOwogICAgfTsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX1NDbG9zPF9FeHBy
LF9Eb20+IDogX1NCYXNlPF9Eb20+IHsKICAgICAgICB0eXBlZGVmIF9TQmFzZTxfRG9tPiBfQmFz
ZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7
CgogICAgICAgIF9TQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBzbGljZSYgX19zKSA6IF9C
YXNlIChfX2UsIF9fcykge30KICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
c3RydWN0IF9TQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9TQmFzZTxfQXJyYXk8X1RwPiA+IHsKICAg
ICAgICB0eXBlZGVmIF9TQmFzZTxfQXJyYXk8X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CgogICAgICAgIF9TQ2xvcyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBz
bGljZSYgX19zKSA6IF9CYXNlIChfX2EsIF9fcykge30KICAgIH07CgoKCgogICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbT4gY2xhc3MgX0dCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX0dCYXNlIChjb25z
dCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKICAgICAgICAgICAgICAg
IDogX01fZXhwciAoX19lKSwgX01faW5kZXgoX19pKSB7fQogICAgICAgIHZhbHVlX3R5cGUgb3Bl
cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9leHByW19NX2lu
ZGV4W19faV1dOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1cm4gX01faW5k
ZXguc2l6ZSgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOwog
ICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9NX2luZGV4OwogICAgfTsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIF9HQmFzZTxfQXJyYXk8X1RwPiA+IHsKICAgIHB1Ymxp
YzoKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICBfR0Jhc2UgKF9BcnJh
eTxfVHA+IF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQogICAgICAgICAgICAgICAg
OiBfTV9hcnJheSAoX19hKSwgX01faW5kZXgoX19pKSB7fQogICAgICAgIHZhbHVlX3R5cGUgb3Bl
cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9hcnJheS5fTV9k
YXRhW19NX2luZGV4W19faV1dOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1
cm4gX01faW5kZXguc2l6ZSgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfQXJyYXk8
X1RwPiBfTV9hcnJheTsKICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsK
ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gc3RydWN0IF9HQ2xvczxfRXhwcixfRG9t
PiA6IF9HQmFzZTxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8X0RvbT4gX0Jhc2U7CiAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAg
ICAgICBfR0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19p
KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CiAgICB9OwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfR0Nsb3M8X1ZhbEFycmF5LF9UcD4gOiBfR0Jh
c2U8X0FycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8X0FycmF5PF9UcD4gPiBf
QmFzZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7CgogICAgICAgIF9HQ2xvcyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXpl
X3Q+JiBfX2kpCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2EsIF9faSkge30KICAgIH07CgoK
CgoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGNsYXNzIF9JQmFzZSB7CiAgICBwdWJsaWM6CiAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAg
ICAgIF9JQmFzZSAoY29uc3QgX0RvbSYgX19lLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kp
CiAgICAgICAgICAgICAgICA6IF9NX2V4cHIgKF9fZSksIF9NX2luZGV4IChfX2kpIHt9CiAgICAg
ICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAgICAgIHsgcmV0
dXJuIF9NX2V4cHJbX01faW5kZXhbX19pXV07IH0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQoKICAgIHByaXZhdGU6CiAgICAgICAgY29uc3Qg
X0RvbSYgX01fZXhwcjsKICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsK
ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gc3RydWN0IF9JQ2xvczxfRXhwcixfRG9t
PiA6IF9JQmFzZTxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiBfSUJhc2U8X0RvbT4gX0Jhc2U7CiAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAg
ICAgICBfSUNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19p
KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CiAgICB9OwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfSUNsb3M8X1ZhbEFycmF5LF9UcD4gOiBfSUJh
c2U8dmFsYXJyYXk8X1RwPiA+IHsKICAgICAgICB0eXBlZGVmIF9JQmFzZTx2YWxhcnJheTxfVHA+
ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0lDbG9z
IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkK
ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fYSwgX19pKSB7fQogICAgfTsKCgoKCiAgICB0ZW1w
bGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPiBjbGFzcyBfRXhwciB7CiAgICBwdWJsaWM6
CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0V4cHIgKGNvbnN0IF9D
bG9zJik7CgogICAgICAgIGNvbnN0IF9DbG9zJiBvcGVyYXRvcigpICgpIGNvbnN0OwoKICAgICAg
ICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8
dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoc2xpY2UpIGNvbnN0OwogICAgICAgIHZhbGFycmF5PHZh
bHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0IGdzbGljZSYpIGNvbnN0OwogICAgICAgIHZhbGFy
cmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7
CiAgICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8
c2l6ZV90PiYpIGNvbnN0OwoKICAgICAgICBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6
X0V4cHIsX0Nsb3M+LCB2YWx1ZV90eXBlPgogICAgICAgIG9wZXJhdG9yKyAoKSBjb25zdDsKCiAg
ICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUsc3RkOjpfRXhwcixfQ2xvcz4sIHZhbHVlX3R5cGU+
CiAgICAgICAgb3BlcmF0b3ItICgpIGNvbnN0OwoKICAgICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3
aXNlX25vdCxzdGQ6Ol9FeHByLF9DbG9zPiwgdmFsdWVfdHlwZT4KICAgICAgICBvcGVyYXRvcn4g
KCkgY29uc3Q7CgogICAgICAgIF9FeHByPF9VbkNsb3M8bG9naWNhbF9ub3Qsc3RkOjpfRXhwcixf
Q2xvcz4sIGJvb2w+CiAgICAgICAgb3BlcmF0b3IhICgpIGNvbnN0OwoKICAgICAgICBzaXplX3Qg
c2l6ZSAoKSBjb25zdDsKICAgICAgICB2YWx1ZV90eXBlIHN1bSAoKSBjb25zdDsKCiAgICAgICAg
dmFsYXJyYXk8dmFsdWVfdHlwZT4gc2hpZnQgKGludCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8
dmFsdWVfdHlwZT4gY3NoaWZ0IChpbnQpIGNvbnN0OwoKICAgICAgdmFsdWVfdHlwZSBtaW4oKSBj
b25zdDsKICAgICAgdmFsdWVfdHlwZSBtYXgoKSBjb25zdDsKCiAgICAgIHZhbGFycmF5PHZhbHVl
X3R5cGU+IGFwcGx5KHZhbHVlX3R5cGUgKCopIChjb25zdCB2YWx1ZV90eXBlJikpIGNvbnN0Owog
ICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBhcHBseSh2YWx1ZV90eXBlICgqKSAodmFsdWVfdHlw
ZSkpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgY29uc3QgX0Nsb3MgX01fY2xvc3VyZTsK
ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6X0V4cHIgKGNvbnN0IF9DbG9zJiBfX2MpIDogX01fY2xv
c3VyZShfX2MpIHt9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSBjb25zdCBfQ2xvcyYKICAgIF9FeHByPF9DbG9zLF9UcD46Om9wZXJhdG9yKCkgKCkg
Y29uc3QKICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmU7IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xv
cywgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3Bl
cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19pXTsg
fQoKICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdmFs
YXJyYXk8X1RwPgogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3BlcmF0b3JbXSAoc2xpY2UgX19zKSBj
b25zdAogICAgeyByZXR1cm4gX01fY2xvc3VyZVtfX3NdOyB9CgogICAgdGVtcGxhdGU8Y2xhc3Mg
X0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxf
Q2xvcyxfVHA+OjpvcGVyYXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpIGNvbnN0CiAgICB7IHJl
dHVybiBfTV9jbG9zdXJlW19fZ3NdOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxfQ2xvcyxfVHA+Ojpv
cGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdAogICAgeyByZXR1cm4g
X01fY2xvc3VyZVtfX21dOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRv
cltdIChjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
bG9zdXJlW19faV07IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIHNpemVfdAogICAgX0V4cHI8X0Nsb3MsX1RwPjo6c2l6ZSAoKSBjb25zdCB7IHJl
dHVybiBfTV9jbG9zdXJlLnNpemUgKCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVu
YW1lIF9UcD4KICBpbmxpbmUgdmFsYXJyYXk8X1RwPgogIF9FeHByPF9DbG9zLCBfVHA+OjpzaGlm
dChpbnQgX19uKSBjb25zdAogIHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuc2hp
ZnQoX19uKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgogIGlubGlu
ZSB2YWxhcnJheTxfVHA+CiAgX0V4cHI8X0Nsb3MsIF9UcD46OmNzaGlmdChpbnQgX19uKSBjb25z
dAogIHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuY3NoaWZ0KF9fbik7IH0KCiAg
dGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgdmFsYXJyYXk8X1Rw
PgogIF9FeHByPF9DbG9zLCBfVHA+OjphcHBseShfVHAgX19mKGNvbnN0IF9UcCYpKSBjb25zdAog
IHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuYXBwbHkoX19mKTsgfQoKICB0ZW1w
bGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+CiAg
X0V4cHI8X0Nsb3MsIF9UcD46OmFwcGx5KF9UcCBfX2YoX1RwKSkgY29uc3QKICB7IHJldHVybiB2
YWxhcnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0KCgogICAgdGVtcGxhdGU8Y2xh
c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9FeHByPF9DbG9zLF9U
cD46OnN1bSAoKSBjb25zdAogICAgewogICAgICAgIHNpemVfdCBfX24gPSBfTV9jbG9zdXJlLnNp
emUoKTsKICAgICAgICBpZiAoX19uID09IDApIHJldHVybiBfVHAoKTsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgX1RwIF9fcyA9IF9NX2Nsb3N1cmVbLS1fX25dOwogICAgICAgICAgICB3aGls
ZSAoX19uICE9IDApIF9fcyArPSBfTV9jbG9zdXJlWy0tX19uXTsKICAgICAgICAgICAgcmV0dXJu
IF9fczsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBf
VHA+CiAgaW5saW5lIF9UcAogIF9FeHByPF9DbG9zLCBfVHA+OjptaW4oKSBjb25zdAogIHsgcmV0
dXJuIF9fdmFsYXJyYXlfbWluKF9NX2Nsb3N1cmUpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9DbG9z
LCB0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9UcAogIF9FeHByPF9DbG9zLCBfVHA+OjptYXgoKSBj
b25zdAogIHsgcmV0dXJuIF9fdmFsYXJyYXlfbWF4KF9NX2Nsb3N1cmUpOyB9CgogICAgdGVtcGxh
dGU8Y2xhc3MgX0RvbSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9FeHByPF9VbkNsb3M8bG9n
aWNhbF9ub3QsX0V4cHIsX0RvbT4sIGJvb2w+CiAgICBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9y
ISAoKSBjb25zdAogICAgewogICAgICAgIHR5cGVkZWYgX1VuQ2xvczxsb2dpY2FsX25vdCxzdGQ6
Ol9FeHByLF9Eb20+IF9DbG9zdXJlOwogICAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+
IChfQ2xvc3VyZSh0aGlzLT5fTV9jbG9zdXJlKSk7CiAgICB9CiMgNzg1ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5oIiAzCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0
eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6X0V4cHIs
X0RvbT4sX1RwPiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yICsgKCkgY29uc3QgeyB0eXBlZGVm
IF9VbkNsb3M8X1VuYXJ5X3BsdXMsc3RkOjpfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9F
eHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlICh0aGlzLT5fTV9jbG9zdXJlKSk7IH0KICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8bmVn
YXRlLHN0ZDo6X0V4cHIsX0RvbT4sX1RwPiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yIC0gKCkg
Y29uc3QgeyB0eXBlZGVmIF9VbkNsb3M8bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAodGhpcy0+X01fY2xvc3VyZSkp
OyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf
VW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6Ol9FeHByLF9Eb20+LF9UcD4gX0V4cHI8X0RvbSxfVHA+
OjpvcGVyYXRvciB+ICgpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6
Ol9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1
cmUgKHRoaXMtPl9NX2Nsb3N1cmUpKTsgfQojIDg1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3ZhbGFycmF5X21ldGEuaCIgMwogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20y
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5
cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3Bl
cmF0b3IgKyAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBf
X3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFt
ZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxf
RXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf
VmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgcGx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYg
X190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5
cGVuYW1lIHBsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxw
bHVzLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns
b3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3Mg
X0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciArIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRl
ZiB0eXBlbmFtZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs
b3M8cGx1cyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNs
YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9FeHByLF9WYWxBcnJheSxfRG9t
LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKyAoY29uc3QgX0V4cHI8X0RvbSx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIHBsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsg
dHlwZWRlZiBfQmluQ2xvczxwbHVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJl
OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7
IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX1ZhbEFy
cmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIHBsdXM8
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciArIChjb25z
dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf
RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBwbHVzPF9UcD46OnJlc3VsdF90
eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfRXhwcixfVHAsX0Rv
bT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192
LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt
ZSBtaW51czx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv
ciAtIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwg
Y29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlw
ZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIG1p
bnVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX0V4
cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh
bHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4g
aW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYg
X190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5
cGVuYW1lIG1pbnVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8
bWludXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX0NvbnN0YW50LF9FeHByLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgLSAoY29uc3QgdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5
cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf
QmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtaW51cyxfRXhwcixfVmFsQXJy
YXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgbWludXM8dHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAtIChjb25zdCBfRXhw
cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90eXBl
IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJn
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2Ug
KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt
aW51cyxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlw
ZW5hbWUgbWludXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVy
YXRvciAtIChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj
b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBtaW51czxf
VHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX1ZhbEFycmF5
LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g
KF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xh
c3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9E
b20xLF9Eb20yPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlw
ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBf
RG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6
OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBf
QXJnOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1
ZTsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCks
IF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt
dWx0aXBsaWVzLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
LCB0eXBlbmFtZSBtdWx0aXBsaWVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRf
dHlwZT4gb3BlcmF0b3IgKiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlw
bGllczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxp
ZXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv
c3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfQ29uc3RhbnQsX0V4cHIsdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf
QXJnOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1
ZTsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdCwg
X192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11
bHRpcGxpZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s
IHR5cGVuYW1lIG11bHRpcGxpZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90
eXBlPiBvcGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h
bWUgbXVsdGlwbGllczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9z
PG11bHRpcGxpZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXks
X0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGll
czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNv
bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy
PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X1RwPjo6
cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5
LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g
KF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xh
c3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9FeHByLF9Eb20x
LF9Eb20yPiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJl
c3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6
dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVl
X3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0
eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRl
ZiBfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9
IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxkaXZpZGVzLF9FeHBy
LF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBkaXZp
ZGVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgLyAo
Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgZGl2aWRlczxfQXJnPjo6cmVzdWx0X3R5
cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX0NvbnN0YW50LF9Eb20s
X0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAo
X192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNs
b3M8ZGl2aWRlcyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t
PiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5
cGU+IG9wZXJhdG9yIC8gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYg
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8
X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9Db25z
dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh
bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIGRpdmlkZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7
IHR5cGVkZWYgdHlwZW5hbWUgZGl2aWRlczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBl
ZGVmIF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsg
fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfVmFs
QXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgZGl2
aWRlczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC8g
KGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9F
eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X1RwPjo6
cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9F
eHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9D
bG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3Mg
X0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9FeHByLF9FeHByLF9Eb20xLF9E
b20yPiwgdHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3Vs
dF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFs
dWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5
cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBl
ZGVmIHR5cGVuYW1lIG1vZHVsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf
QmluQ2xvczxtb2R1bHVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9FeHByLF9D
b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtb2R1bHVz
PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUg
X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0Fy
Zz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192
ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8
bW9kdWx1cyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwg
dHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+
IG9wZXJhdG9yICUgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg
X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIG1vZHVsdXM8X0Fy
Zz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFu
dCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVl
PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG1vZHVsdXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5
cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVm
IF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJy
YXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbW9kdWx1
czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICUgKGNv
bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy
PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG1vZHVsdXM8X1RwPjo6cmVz
dWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9FeHBy
LF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9z
dXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv
bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEs
X0RvbTI+LCB0eXBlbmFtZSBfQml0d2lzZV94b3I8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+
OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0Rv
bTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2
YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0Fy
ZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV94b3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1
ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAo
KSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9z
PF9CaXR3aXNlX3hvcixfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+Ojpy
ZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsg
dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUg
X0JpdHdpc2VfeG9yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8
X0JpdHdpc2VfeG9yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxh
dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfQ29uc3Rh
bnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdp
c2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3Ig
XiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9t
LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9Bcmc+Ojpy
ZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9Db25zdGFu
dCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVl
PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfQXJnPjo6cmVzdWx0X3R5cGUg
X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0Rv
bSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJl
IChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu
Q2xvczxfQml0d2lzZV94b3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIF4gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl
ZGVmIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVk
ZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1
cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkp
KTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5hbWUg
X0JpdHdpc2VfYW5kPHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9w
ZXJhdG9yICYgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYg
X192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykg
eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h
bWUgX0JpdHdpc2VfYW5kPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs
b3M8X0JpdHdpc2VfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9hbmQsX0V4
cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9C
aXR3aXNlX2FuZDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJh
dG9yICYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwg
Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDxfQXJn
Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfRXhw
cixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9W
YWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9hbmQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICYgKGNvbnN0IHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJn
OyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVl
OyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9t
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3Qs
IF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf
Qml0d2lzZV9hbmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVz
dWx0X3R5cGU+IG9wZXJhdG9yICYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0
eXBlbmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf
QmluQ2xvczxfQml0d2lzZV9hbmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsg
fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5k
LF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFt
ZSBfQml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv
cGVyYXRvciAmIChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192
LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlw
ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBfQml0
d2lzZV9hbmQ8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3
aXNlX2FuZCxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRlbXBsYXRl
PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNl
X29yLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5h
bWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgX0V4
cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9E
b20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9vcjxfQXJn
Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9FeHBy
LF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1
ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9t
LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsg
dHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9vcjxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0
eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9D
bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwg
X190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3
aXNlX29yLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0
eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5
cGU+IG9wZXJhdG9yIHwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYg
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNl
X29yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vf
b3IsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv
c3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX1ZhbEFycmF5LF9E
b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9CaXR3aXNlX29yPHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgX0V4
cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1
bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX1ZhbEFy
cmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChf
Q2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX29yPHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0
eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Ns
b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2Ug
KCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt
ZSBfU2hpZnRfbGVmdDx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv
cGVyYXRvciA8PCAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+
JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193
KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl
bmFtZSBfU2hpZnRfbGVmdDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5D
bG9zPF9TaGlmdF9sZWZ0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhw
cixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1No
aWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv
ciA8PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj
b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46
OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixf
Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1
ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3QgdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5
cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlw
ZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAo
KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRf
bGVmdCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlw
ZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBl
PiBvcGVyYXRvciA8PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1l
IF9TaGlmdF9sZWZ0PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8
X1NoaWZ0X2xlZnQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5
LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9s
ZWZ0PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPDwg
KGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9F
eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PF9U
cD46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFs
QXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh
bHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20x
LCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixf
RXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tMTo6
dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29uc3QgX0V4cHI8X0RvbTEs
dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVu
YW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZh
bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3Vs
dF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX0V4cHIs
X0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Ns
b3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9F
eHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBl
ZGVmIHR5cGVuYW1lIF9TaGlmdF9yaWdodDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBl
ZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9f
dCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRf
cmlnaHQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5
cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5
cGU+IG9wZXJhdG9yID4+IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNv
bnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVm
IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRf
cmlnaHQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRf
cmlnaHQsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9FeHByLF9WYWxBcnJh
eSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxh
cnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9yaWdodDxfQXJn
Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhw
cixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9W
YWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJh
eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X1RwPjo6cmVzdWx0X3R5
cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX0V4cHIs
X1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1
cmUgKF9fdiwgX19lICgpKSk7IH0KIyA5MjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxh
cnJheV9tZXRhLmgiIDMKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwg
Ym9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1
ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlw
ZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVk
ZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJl
OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkp
OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2Fu
ZCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4g
b3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5k
LF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+
IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf
QXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9Db25zdGFudCxfRXhwcixfQXJnLF9E
b20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3Qs
IF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxs
b2dpY2FsX2FuZCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9C
aW5DbG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVt
cGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxB
cnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRv
ciAmJiAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYg
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9h
bmQsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3Mg
X0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfRXhw
cixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9t
MSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlw
ZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6
dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX0V4cHIs
X0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9z
dXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciB8fCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
JiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg
X0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfQ29u
c3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0
b3IgfHwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8
X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0NvbnN0
YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s
PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9tLHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
IF9UcDsgdHlwZWRlZiBfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9WYWxBcnJheSxfRG9tLF9U
cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAo
KSwgX192KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxv
Z2ljYWxfb3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4s
IGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmlu
Q2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVx
dWFsX3RvLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0
IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhw
cjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX0V4
cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9v
bD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20s
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0
eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9z
dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkp
OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxf
Q29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3Bl
cmF0b3IgPT0gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4
cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9Db25z
dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9v
bD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg
X1RwOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4g
X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwg
X192KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFs
X3RvLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29s
PiBvcGVyYXRvciA9PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8
ZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFs
X3RvLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9F
eHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf
RG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1l
IF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9F
eHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJv
b2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBp
bmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciAhPSAoY29uc3QgX0V4cHI8
X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B
cmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9B
cmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3Yg
KCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxu
b3RfZXF1YWxfdG8sX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0Rv
bT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBf
X3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0
eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxu
b3RfZXF1YWxfdG8sX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8
Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfVmFs
QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgIT0g
KGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3Qg
dmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxf
RXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
Ym9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB2YWxhcnJh
eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHBy
LF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3Vy
ZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20y
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJv
b2w+IG9wZXJhdG9yIDwgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90
eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4m
IF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg
X0JpbkNsb3M8bGVzcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxh
dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3MsX0V4cHIsX0NvbnN0YW50
LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDwgKGNvbnN0
IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0Fy
Zz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAo
KSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxl
c3MsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+
IG9wZXJhdG9yIDwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg
X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0NvbnN0
YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s
PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPGxlc3MsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0
eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfVmFsQXJyYXks
X0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPCAo
Y29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4
cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXks
X0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D
bG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3Mg
X0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9E
b20yPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6
OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1
ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsg
dHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3Vy
ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkp
KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixf
RXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3Bl
cmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192
LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixf
Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+
IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg
X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFs
QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPiAo
Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2
YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixf
VmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4g
KF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsg
dHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1
cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7
IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9C
aW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCBib29sPiBvcGVyYXRv
ciA8PSAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3Ys
IGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5
cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxs
ZXNzX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfRXhwcixfQ29uc3Rh
bnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPD0gKGNv
bnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0NvbnN0YW50
LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1
cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9C
aW5DbG9zPGxlc3NfZXF1YWwsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yIDw9IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f
dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmlu
Q2xvczxsZXNzX2VxdWFsLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9FeHByLF9W
YWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciA8
PSAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z
dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxf
RXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
Ym9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA8PSAoY29uc3QgdmFsYXJyYXk8
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0V4cHIsX1Rw
LF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChf
X3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20y
PiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2
YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVf
dHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5
cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Ns
b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193
ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0
ZXJfZXF1YWwsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s
IGJvb2w+IG9wZXJhdG9yID49IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBl
ZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxncmVh
dGVyX2VxdWFsLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4
cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNs
YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf
RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+PSAo
Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfQ29uc3RhbnQs
X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf
Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg
X1RwOyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0V4cHIsX1ZhbEFycmF5LF9Eb20s
X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19l
ICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8
Z3JlYXRlcl9lcXVhbCxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxf
RG9tPiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVm
IF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3Vy
ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsg
fQojIDk1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFycmF5X21ldGEuaCIgMwogICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4s
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYWJzKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhYnMpKSk7
IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJy
YXksX1RwPixfVHA+IGFicyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5G
dW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Rw
PiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmYWJzKSkpOyB9CiAgICB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiBjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5
cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvcykpKTsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9U
cD4gY29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1Zh
bEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3Vy
ZSAoX192LCAoX1RwKCopKF9UcCkpKCZjb3MpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+
IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+IGFjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg
X19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1Vu
RnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4o
X0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmFjb3MpKSk7IH0gdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGFjb3Mo
Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXks
X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3Ys
IChfVHAoKikoX1RwKSkoJmFjb3MpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
IGNvc2goY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xv
czxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1
cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvc2gpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGNvc2goY29uc3Qg
dmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAo
KikoX1RwKSkoJmNvc2gpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHNpbihj
b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHBy
LF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2Uo
KSwgKF9UcCgqKShfVHApKSgmc2luKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW4oY29uc3QgdmFsYXJyYXk8
X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSko
JnNpbikpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNs
b3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXNpbihjb25zdCBfRXhw
cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9D
bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgq
KShfVHApKSgmYXNpbikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf
VW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gYXNpbihjb25zdCB2YWxhcnJheTxfVHA+JiBf
X3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmYXNpbikp
KTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4
cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gc2luaChjb25zdCBfRXhwcjxfRG9t
LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJl
OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHAp
KSgmc2luaCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5D
bG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gc2luaChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsg
dHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmc2luaCkpKTsgfQog
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0Rv
bT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZ0YW4p
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFs
QXJyYXksX1RwPixfVHA+IHRhbihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBf
VW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
X1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuKSkpOyB9CiAgICB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiB0YW5oKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw
OyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZ0YW5oKSkpOyB9IHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U
cD4sX1RwPiB0YW5oKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNs
b3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChf
Q2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZ0YW5oKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiBhdGFuKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl
ZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhdGFuKSkpOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1Rw
PiBhdGFuKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1Zh
bEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3Vy
ZSAoX192LCAoX1RwKCopKF9UcCkpKCZhdGFuKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiBleHAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg
X19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1Vu
RnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4o
X0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmV4cCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gZXhwKGNv
bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U
cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAo
X1RwKCopKF9UcCkpKCZleHApKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf
RXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGxv
Zyhjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlw
ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9F
eHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShf
X2UoKSwgKF9UcCgqKShfVHApKSgmbG9nKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBsb2coY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3Vy
ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1Rw
KSkoJmxvZykpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1
bkNsb3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gbG9nMTAoY29uc3Qg
X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9t
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChf
VHAoKikoX1RwKSkoJmxvZzEwKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9F
eHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBsb2cxMChjb25zdCB2YWxhcnJheTxf
VHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgm
bG9nMTApKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfVW5GdW5D
bG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHNxcnQoY29uc3QgX0V4
cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAo
KikoX1RwKSkoJnNxcnQpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8
X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHNxcnQoY29uc3QgdmFsYXJyYXk8X1RwPiYg
X192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSkoJnNxcnQp
KSk7IH0KIyAxMDU4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5oIiAz
CnRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5GdW5D
bG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT5h
dGFuMiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX2Ux
LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fZTIpIHsg
dHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNs
b3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZTEgKCksIF9fZTIgKCksIChfVHAoKikoX1RwLCBfVHApKSgm
YXRhbjIpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9z
PF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiBhdGFuMiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVk
ZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdiwgKF9UcCgqKShfVHAs
IF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0Jp
bkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4s
IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25zdCB2YWxhcnJheTx0eXBlbmFt
ZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSwgKF9UcCgq
KShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25zdCBfRXhwcjxfRG9t
LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsg
dHlwZWRlZiBfQmluRnVuQ2xvczxfRXhwcixfQ29uc3RhbnQsX0RvbSxfVHA+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX190LCAoX1RwKCop
KF9UcCwgX1RwKSkoJmF0YW4yKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxf
RG9tPiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXRhbjIgKGNvbnN0IHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5
cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fZSAoKSwgKF9UcCgqKShf
VHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhw
cjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IGF0YW4yIChj
b25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykgeyB0eXBl
ZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCBfX3csIChfVHAoKikoX1Rw
LF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf
QmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gYXRhbjIgKGNvbnN0
IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIHsgdHlwZWRlZiBfQmluRnVuQ2xv
czxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns
b3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190LCAoX1RwKCopKF9UcCxfVHApKSgmYXRhbjIp
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0Nv
bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IGF0YW4yIChjb25zdCBfVHAmIF9fdCwgY29u
c3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9W
YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D
bG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJmF0YW4yKSkpOyB9CnRlbXBsYXRl
PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9FeHBy
LF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT5wb3cgKGNvbnN0
IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX19lMSwgY29uc3QgX0V4
cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX2UyKSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9F
eHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D
bG9zdXJlIChfX2UxICgpLCBfX2UyICgpLCAoX1RwKCopKF9UcCwgX1RwKSkoJnBvdykpKTsgfSB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFy
cmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+IHBvdyAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg
X19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5
cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8
X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LF9UcD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdiwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7
IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9WYWxBcnJh
eSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiBwb3cgKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbGFycmF5PiYg
X192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsg
dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluRnVuQ2xv
czxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpLCAoX1RwKCopKF9UcCwgX1RwKSkoJnBvdykp
KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIs
X0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+IHBvdyAoY29uc3QgX0V4cHI8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fZSwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVk
ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4
cHIsX0NvbnN0YW50LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U
cD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdCwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7IH0g
dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9Db25zdGFudCxf
RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiBwb3cgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg
X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50
LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D
bG9zdXJlIChfX3QsIF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxB
cnJheSxfVHAsX1RwPiwgX1RwPiBwb3cgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3Qg
dmFsYXJyYXk8X1RwPiYgX193KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxB
cnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9z
dXJlIChfX3YsIF9fdywgKF9UcCgqKShfVHAsX1RwKSkoJnBvdykpKTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9U
cCxfVHA+LF9UcD4gcG93IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IF9UcCYgX190
KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCwgKF9U
cCgqKShfVHAsX1RwKSkoJnBvdykpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf
RXhwcjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gcG93IChj
b25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1
bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJnBv
dykpKTsgfQoKCgp9CiMgODkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXku
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIHZhbGFy
cmF5CiAgewogIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCgogICAgICB2
YWxhcnJheSgpOwogICAgICBleHBsaWNpdCB2YWxhcnJheShzaXplX3QpOwogICAgICB2YWxhcnJh
eShjb25zdCBfVHAmLCBzaXplX3QpOwogICAgICB2YWxhcnJheShjb25zdCBfVHAqIF9fcmVzdHJp
Y3RfXywgc2l6ZV90KTsKICAgICAgdmFsYXJyYXkoY29uc3QgdmFsYXJyYXkmKTsKICAgICAgdmFs
YXJyYXkoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYpOwogICAgICB2YWxhcnJheShjb25zdCBnc2xp
Y2VfYXJyYXk8X1RwPiYpOwogICAgICB2YWxhcnJheShjb25zdCBtYXNrX2FycmF5PF9UcD4mKTsK
ICAgICAgdmFsYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYpOwogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPgogICAgICB2YWxhcnJheShjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSk7
CiAgICAgfnZhbGFycmF5KCk7CgoKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0
IHZhbGFycmF5PF9UcD4mKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U
cCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXk8X1Rw
PiYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5PF9U
cD4mKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1Rw
PiYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXk8
X1RwPiYpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gdmFsYXJyYXk8X1RwPiYKICAgICAg
ICBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOwoKCgogICAgICBjb25zdCBfVHAm
IG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKICAgICAgX1RwJiBvcGVyYXRvcltdKHNpemVfdCk7
CgogICAgICBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4gb3BlcmF0b3JbXShzbGlj
ZSkgY29uc3Q7CiAgICAgIHNsaWNlX2FycmF5PF9UcD4gb3BlcmF0b3JbXShzbGljZSk7CiAgICAg
IF9FeHByPF9HQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGlj
ZSYpIGNvbnN0OwogICAgICBnc2xpY2VfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGlj
ZSYpOwogICAgICB2YWxhcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4m
KSBjb25zdDsKICAgICAgbWFza19hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8
Ym9vbD4mKTsKICAgICAgX0V4cHI8X0lDbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPgogICAgICAg
IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpIGNvbnN0OwogICAgICBpbmRpcmVj
dF9hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOwoKCiAgICAg
IF9FeHByPF9VbkNsb3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4sX1RwPiBvcGVyYXRvcisg
KCkgY29uc3Q7CiAgICAgIF9FeHByPF9VbkNsb3M8bmVnYXRlLF9WYWxBcnJheSxfVHA+LF9UcD4g
b3BlcmF0b3ItICgpIGNvbnN0OwogICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxfVmFs
QXJyYXksX1RwPixfVHA+IG9wZXJhdG9yfiAoKSBjb25zdDsKICAgICAgX0V4cHI8X1VuQ2xvczxs
b2dpY2FsX25vdCxfVmFsQXJyYXksX1RwPixib29sPiBvcGVyYXRvciEgKCkgY29uc3Q7CgoKICAg
ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAoY29uc3QgX1RwJik7CiAgICAgIHZhbGFycmF5
PF9UcD4mIG9wZXJhdG9yLz0gKGNvbnN0IF9UcCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVy
YXRvciU9IChjb25zdCBfVHAmKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAoY29u
c3QgX1RwJik7CiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLT0gKGNvbnN0IF9UcCYpOwog
ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCBfVHAmKTsKICAgICAgdmFsYXJy
YXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgX1RwJik7CiAgICAgIHZhbGFycmF5PF9UcD4mIG9w
ZXJhdG9yfD0gKGNvbnN0IF9UcCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcjw8PShj
b25zdCBfVHAmKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0oY29uc3QgX1RwJik7
CiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsK
ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwog
ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvciU9IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAg
ICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKICAg
ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwogICAg
ICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICAg
IHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKICAgICAg
dmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwogICAgICB2
YWxhcnJheTxfVHA+JiBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICAgIHZh
bGFycmF5PF9UcD4mIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKCiAgICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAoY29u
c3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAg
dmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAo
Y29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAg
ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAg
ICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3It
PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg
ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0
b3J8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+
CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+
Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3Bl
cmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9E
b20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0oY29uc3QgX0V4cHI8X0RvbSxf
VHA+Jik7CgoKCiAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAgICAgIF9UcCBzdW0oKSBjb25z
dDsKICAgICAgX1RwIG1pbigpIGNvbnN0OwogICAgICBfVHAgbWF4KCkgY29uc3Q7CgoKCgogICAg
ICB2YWxhcnJheTxfVHA+IHNoaWZ0IChpbnQpIGNvbnN0OwogICAgICB2YWxhcnJheTxfVHA+IGNz
aGlmdChpbnQpIGNvbnN0OwogICAgICBfRXhwcjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPixf
VHA+IGFwcGx5KF9UcCBmdW5jKF9UcCkpIGNvbnN0OwogICAgICBfRXhwcjxfUmVmRnVuQ2xvczxf
VmFsQXJyYXksX1RwPixfVHA+IGFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCYpKSBjb25zdDsKICAg
ICAgdm9pZCByZXNpemUoc2l6ZV90IF9fc2l6ZSwgX1RwIF9fYyA9IF9UcCgpKTsKCiAgcHJpdmF0
ZToKICAgICAgc2l6ZV90IF9NX3NpemU7CiAgICAgIF9UcCogX19yZXN0cmljdF9fIF9NX2RhdGE7
CgogICAgICBmcmllbmQgY2xhc3MgX0FycmF5PF9UcD47CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzIDogdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewog
ICAgICBfVHAgb3BlcmF0b3IoKSAoY29uc3QgX1RwJiBfX3QpIGNvbnN0IHsgcmV0dXJuIF9fdDsg
fQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9CaXR3aXNlX2FuZCA6IGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9f
eCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYgX195OyB9CiAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vfb3IgOiBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+IHsKICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gsIF9UcCBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCB8IF9feTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0
IF9CaXR3aXNlX3hvciA6IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogICAgICBfVHAg
b3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194IF4gX195OyB9
CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vfbm90IDogdW5h
cnlfZnVuY3Rpb248X1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9fdCkgY29u
c3QgeyByZXR1cm4gfl9fdDsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0
IF9TaGlmdF9sZWZ0IDogdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0
b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw8IF9feTsgfQogIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodCA6IHVuYXJ5X2Z1
bmN0aW9uPF9UcCxfVHA+IHsKICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gsIF9UcCBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA+PiBfX3k7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoc2l6
ZV90IF9faSkgY29uc3QKICB7IHJldHVybiBfTV9kYXRhW19faV07IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogIGlubGluZSBfVHAmCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoc2l6
ZV90IF9faSkKICB7IHJldHVybiBfTV9kYXRhW19faV07IH0KCn0KCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3NsaWNlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c2xpY2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpjbGFzcyBzbGljZQp7CnB1YmxpYzoKICAgIHNs
aWNlICgpOwogICAgc2xpY2UgKHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwoKICAgIHNpemVfdCBz
dGFydCAoKSBjb25zdDsKICAgIHNpemVfdCBzaXplICgpIGNvbnN0OwogICAgc2l6ZV90IHN0cmlk
ZSAoKSBjb25zdDsKCnByaXZhdGU6CiAgICBzaXplX3QgX01fb2ZmOwogICAgc2l6ZV90IF9NX3N6
OwogICAgc2l6ZV90IF9NX3N0Owp9OwoKaW5saW5lIHNsaWNlOjpzbGljZSAoKSB7fQoKaW5saW5l
IHNsaWNlOjpzbGljZSAoc2l6ZV90IF9fbywgc2l6ZV90IF9fZCwgc2l6ZV90IF9fcykKICAgICAg
ICA6IF9NX29mZiAoX19vKSwgX01fc3ogKF9fZCksIF9NX3N0IChfX3MpIHt9CgppbmxpbmUgc2l6
ZV90CnNsaWNlOjpzdGFydCAoKSBjb25zdAogIHsgcmV0dXJuIF9NX29mZjsgfQoKaW5saW5lIHNp
emVfdApzbGljZTo6c2l6ZSAoKSBjb25zdAogIHsgcmV0dXJuIF9NX3N6OyB9CgppbmxpbmUgc2l6
ZV90CnNsaWNlOjpzdHJpZGUgKCkgY29uc3QKICB7IHJldHVybiBfTV9zdDsgfQoKfQojIDI1MiAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc2xpY2VfYXJyYXkuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zbGljZV9hcnJheS5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBzbGljZV9hcnJheQogICAgewogICAgcHVibGljOgog
ICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICAgIHZvaWQgb3BlcmF0b3I9IChj
b25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25z
dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2
YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCB2YWxh
cnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2YWxhcnJh
eTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxf
VHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+
JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxfVHA+Jikg
Y29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29u
c3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0
OwogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsK
ICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwICYpOwoKCiAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+
JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJh
dG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m
KSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0
b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp
IGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRv
ci09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg
Y29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y
Jj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBj
b25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I8
PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg
Y29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsK
ICAgICAgICBzbGljZV9hcnJheShfQXJyYXk8X1RwPiwgY29uc3Qgc2xpY2UmKTsKCiAgICAgICAg
Y29uc3Qgc2l6ZV90IF9NX3N6OwogICAgICAgIGNvbnN0IHNpemVfdCBfTV9zdHJpZGU7CiAgICAg
ICAgY29uc3QgX0FycmF5PF9UcD4gX01fYXJyYXk7CgoKICAgICAgICBzbGljZV9hcnJheSAoY29u
c3Qgc2xpY2VfYXJyYXkmKTsKCgogICAgICAgIHNsaWNlX2FycmF5ICgpOwogICAgICAgIHNsaWNl
X2FycmF5JiBvcGVyYXRvcj0gKGNvbnN0IHNsaWNlX2FycmF5Jik7CiAgICB9OwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBzbGljZV9hcnJheTxfVHA+OjpzbGljZV9hcnJh
eSAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBzbGljZSYgX19zKQogICAgICAgICAgICA6IF9NX3N6
IChfX3Muc2l6ZSAoKSksIF9NX3N0cmlkZSAoX19zLnN0cmlkZSAoKSksCiAgICAgICAgICAgICAg
X01fYXJyYXkgKF9fYS5iZWdpbiAoKSArIF9fcy5zdGFydCAoKSkge30KCgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5KGNv
bnN0IHNsaWNlX2FycmF5PF9UcD4mIGEpCiAgICAgICAgICAgIDogX01fc3ooYS5fTV9zeiksIF9N
X3N0cmlkZShhLl9NX3N0cmlkZSksIF9NX2FycmF5KGEuX01fYXJyYXkpIHt9CgoKCgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHNsaWNlX2FycmF5PF9UcD46
Om9wZXJhdG9yPSAoY29uc3QgX1RwJiBfX3QpCiAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX01fYXJy
YXksIF9NX3N6LCBfTV9zdHJpZGUsIF9fdCk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgdm9pZAogICAgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2
YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0CiAgICB7IF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9U
cD4gKF9fdiksIF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlKTsgfQoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICBpbmxpbmUgdm9pZAogICAg
c2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkg
Y29uc3QKICAgIHsgX192YWxhcnJheV9jb3B5IChfX2UsIF9NX3N6LCBfTV9hcnJheSwgX01fc3Ry
aWRlKTsgfQojIDE0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NsaWNlX2FycmF5LmgiIDMK
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy
YXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50
ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChf
X3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw
PiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9N
X3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9p
ZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192
KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX3N6LCBfTV9z
dHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh
dGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0g
KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2
aWRlcyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3Qg
dmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01f
YXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8
X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9B
cnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7
IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+Ojpv
cGVyYXRvciArPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt
ZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3Yp
KTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZv
aWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg
X19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX3N0cmlkZSwg
X19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9h
cnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJy
YXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E
b20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfRXhw
cjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJh
eSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2YWxhcnJheTxfVHA+
JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9zeiwgX01f
c3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49
IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hv
ciAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwg
X01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+Ojpv
cGVyYXRvciAmPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1
Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9zdHJpZGUsIF9fZSwgX01fc3opOyB9CnRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0g
KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChf
TV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJh
eTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsg
X0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0K
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy
YXRvciA8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVu
dGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAo
X192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8X0RvbSxf
VHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwg
X01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2
b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYg
X192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfTV9z
eiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJh
dG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21l
bnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KCgoK
fQojIDI1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZ3NsaWNlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvZ3NsaWNlLmgiIDMKCm5hbWVzcGFjZSBzdGQgewoKICAgIGNsYXNzIGdz
bGljZQogICAgewogICAgcHVibGljOgogICAgICAgIGdzbGljZSAoKTsKICAgICAgICBnc2xpY2Ug
KHNpemVfdCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m
KTsKCgoKICAgICAgICBnc2xpY2UoY29uc3QgZ3NsaWNlJik7CiAgICAgICAgfmdzbGljZSgpOwoK
CiAgICAgICAgZ3NsaWNlJiBvcGVyYXRvcj0gKGNvbnN0IGdzbGljZSYpOwoKICAgICAgICBzaXpl
X3Qgc3RhcnQgKCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8c2l6ZV90PiBzaXplICgpIGNvbnN0
OwogICAgICAgIHZhbGFycmF5PHNpemVfdD4gc3RyaWRlICgpIGNvbnN0OwoKICAgIHByaXZhdGU6
CiAgICAgICAgc3RydWN0IF9JbmRleGVyIHsKICAgICAgICAgICAgc2l6ZV90IF9NX2NvdW50Owog
ICAgICAgICAgICBzaXplX3QgX01fc3RhcnQ7CiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4g
X01fc2l6ZTsKICAgICAgICAgICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9zdHJpZGU7CiAgICAgICAg
ICAgIHZhbGFycmF5PHNpemVfdD4gX01faW5kZXg7CiAgICAgICAgICAgIF9JbmRleGVyKHNpemVf
dCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZh
bGFycmF5PHNpemVfdD4mKTsKICAgICAgICAgICAgdm9pZCBfTV9pbmNyZW1lbnRfdXNlKCkgeyAr
K19NX2NvdW50OyB9CiAgICAgICAgICAgIHNpemVfdCBfTV9kZWNyZW1lbnRfdXNlKCkgeyByZXR1
cm4gLS1fTV9jb3VudDsgfQogICAgICAgIH07CgogICAgICAgIF9JbmRleGVyKiBfTV9pbmRleDsK
CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBmcmllbmQgY2xhc3MgdmFsYXJyYXk7CiAg
ICB9OwoKICAgIGlubGluZSBzaXplX3QKICAgIGdzbGljZTo6c3RhcnQgKCkgY29uc3QKICAgIHsg
cmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0YXJ0IDogMDsgfQoKICAgIGlubGluZSB2
YWxhcnJheTxzaXplX3Q+CiAgICBnc2xpY2U6OnNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIF9N
X2luZGV4ID8gX01faW5kZXgtPl9NX3NpemUgOiB2YWxhcnJheTxzaXplX3Q+KCk7IH0KCiAgICBp
bmxpbmUgdmFsYXJyYXk8c2l6ZV90PgogICAgZ3NsaWNlOjpzdHJpZGUgKCkgY29uc3QKICAgIHsg
cmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0cmlkZSA6IHZhbGFycmF5PHNpemVfdD4o
KTsgfQoKICAgIGlubGluZSBnc2xpY2U6OmdzbGljZSAoKSA6IF9NX2luZGV4KDApIHt9CgogICAg
aW5saW5lCiAgICBnc2xpY2U6OmdzbGljZShzaXplX3QgX19vLCBjb25zdCB2YWxhcnJheTxzaXpl
X3Q+JiBfX2wsCiAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX3Mp
CiAgICAgICAgICAgIDogX01faW5kZXgobmV3IGdzbGljZTo6X0luZGV4ZXIoX19vLCBfX2wsIF9f
cykpIHt9CgogICAgaW5saW5lCiAgICBnc2xpY2U6OmdzbGljZShjb25zdCBnc2xpY2UmIF9fZykg
OiBfTV9pbmRleChfX2cuX01faW5kZXgpCiAgICB7IGlmIChfTV9pbmRleCkgX01faW5kZXgtPl9N
X2luY3JlbWVudF91c2UoKTsgfQoKICAgIGlubGluZQogICAgZ3NsaWNlOjp+Z3NsaWNlKCkKICAg
IHsgaWYgKF9NX2luZGV4ICYmIF9NX2luZGV4LT5fTV9kZWNyZW1lbnRfdXNlKCkgPT0gMCkgZGVs
ZXRlIF9NX2luZGV4OyB9CgogICAgaW5saW5lIGdzbGljZSYKICAgIGdzbGljZTo6b3BlcmF0b3I9
IChjb25zdCBnc2xpY2UmIF9fZykKICAgIHsKICAgICAgICBpZiAoX19nLl9NX2luZGV4KSBfX2cu
X01faW5kZXgtPl9NX2luY3JlbWVudF91c2UoKTsKICAgICAgICBpZiAoX01faW5kZXggJiYgX01f
aW5kZXgtPl9NX2RlY3JlbWVudF91c2UoKSA9PSAwKSBkZWxldGUgX01faW5kZXg7CiAgICAgICAg
X01faW5kZXggPSBfX2cuX01faW5kZXg7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCn0K
IyAyNTQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2dzbGljZV9hcnJheS5oIiAxIDMKIyAzNiAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL2dzbGljZV9hcnJheS5oIiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIGdzbGljZV9hcnJheQogICAgewogICAgcHVi
bGljOgogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICAgIHZvaWQgb3BlcmF0
b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcio9
IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChj
b25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25z
dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2
YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxh
cnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJh
eTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxf
VHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+
JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+Jikg
Y29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29u
c3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RwJik7CgogICAgICAgIHRlbXBsYXRl
PGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw
PiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVy
YXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3IvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+
JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJh
dG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m
KSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0
b3ItPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp
IGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRv
ciY9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3J8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg
Y29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y
PDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp
IGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgX0FycmF5PF9UcD4gX01fYXJyYXk7CiAgICAg
ICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7CgogICAgICAgIGZyaWVuZCBjbGFz
cyB2YWxhcnJheTxfVHA+OwoKICAgICAgICBnc2xpY2VfYXJyYXkgKF9BcnJheTxfVHA+LCBjb25z
dCB2YWxhcnJheTxzaXplX3Q+Jik7CgoKICAgICAgICBnc2xpY2VfYXJyYXkgKGNvbnN0IGdzbGlj
ZV9hcnJheSYpOwoKCiAgICAgICAgZ3NsaWNlX2FycmF5KCk7CiAgICAgICAgZ3NsaWNlX2FycmF5
JiBvcGVyYXRvcj0gKGNvbnN0IGdzbGljZV9hcnJheSYpOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUKICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJy
YXkgKF9BcnJheTxfVHA+IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKICAgICAgICAgICAgOiBfTV9hcnJheSAoX19h
KSwgX01faW5kZXggKF9faSkge30KCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5IChjb25zdCBnc2xpY2VfYXJy
YXk8X1RwPiYgX19hKQogICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fYXJyYXkpLCBfTV9p
bmRleCAoX19hLl9NX2luZGV4KSB7fQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgdm9pZAogICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX1RwJiBf
X3QpCiAgICB7CiAgICAgICAgX192YWxhcnJheV9maWxsIChfTV9hcnJheSwgX0FycmF5PHNpemVf
dD4oX01faW5kZXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgX01faW5kZXguc2l6ZSgpLCBf
X3QpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAg
ICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgICAgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiAoX192KSwg
X192LnNpemUgKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBfTV9hcnJheSwgX0FycmF5PHNp
emVfdD4oX01faW5kZXgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICB0
ZW1wbGF0ZTxjbGFzcyBFPgogICAgaW5saW5lIHZvaWQKICAgIGdzbGljZV9hcnJheTxfVHA+Ojpv
cGVyYXRvcj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QKICAgIHsKICAgICAgICBf
X3ZhbGFycmF5X2NvcHkgKF9fZSwgX01faW5kZXguc2l6ZSgpLCBfTV9hcnJheSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7CiAgICB9CiMgMTUyICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZ3NsaWNlX2FycmF5LmgiIDMKdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0
IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMg
KF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBf
X3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBp
bmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPEUs
IF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9NX2FycmF5
LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgpKTsgfQp0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRv
ciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf
ZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4g
KF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNs
YXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3Qg
X0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01f
YXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9
CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9w
ZXJhdG9yICU9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21l
bnRlZF9tb2R1bHVzIChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8
X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh
dGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChj
b25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVz
IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUo
KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf
YXVnbWVudGVkX3BsdXMgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJh
eTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1w
bGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0g
KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMg
KF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgp
KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+
OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9h
dWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJh
eTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1w
bGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0g
KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVz
IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUo
KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf
YXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5
PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs
YXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAo
Y29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfeG9yIChf
TV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7
IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6
b3BlcmF0b3IgJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVn
bWVudGVkX2FuZCAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9U
cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl
PGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29u
c3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9h
cnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0K
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3Bl
cmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVu
dGVkX29yIChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAo
X192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh
c3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBf
RXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXks
IF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9CnRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9y
IDw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf
c2hpZnRfbGVmdCAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9U
cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl
PGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNv
bnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xl
ZnQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6
ZSgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxf
VHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJy
YXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5k
ZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9w
ZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdt
ZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9f
ZSwgX01faW5kZXguc2l6ZSgpKTsgfQoKCgp9CiMgMjU1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9tYXNr
X2FycmF5LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbWFza19hcnJheS5o
IiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBtYXNr
X2FycmF5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAg
ICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAg
ICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2
b2lkIG9wZXJhdG9yJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lk
IG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9w
ZXJhdG9yLT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJh
dG9yXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9y
Jj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yfD0g
KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNv
bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0
IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1Rw
Jik7CgoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y
PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNv
bnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvci89
IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29u
c3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKz0g
KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9E
b20+CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25z
dDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAo
Y29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Rv
bT4KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0
OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChj
b25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PgogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7
CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNv
bnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgbWFza19h
cnJheSAoX0FycmF5PF9UcD4sIHNpemVfdCwgX0FycmF5PGJvb2w+KTsKICAgICAgICBmcmllbmQg
Y2xhc3MgdmFsYXJyYXk8X1RwPjsKCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3N6OwogICAgICAg
IGNvbnN0IF9BcnJheTxib29sPiBfTV9tYXNrOwogICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9N
X2FycmF5OwoKICAgICAgICBtYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5Jik7CgoKICAgICAg
ICBtYXNrX2FycmF5ICgpOwogICAgICAgIG1hc2tfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3QgbWFz
a19hcnJheSYpOwogICAgfTsKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IG1hc2tfYXJyYXk8X1RwPjo6bWFza19hcnJheSAoY29uc3QgbWFza19hcnJheTxfVHA+JiBhKQog
ICAgICAgICAgICA6IF9NX3N6IChhLl9NX3N6KSwgX01fbWFzayAoYS5fTV9tYXNrKSwgX01fYXJy
YXkgKGEuX01fYXJyYXkpIHt9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
CiAgICBtYXNrX2FycmF5PF9UcD46Om1hc2tfYXJyYXkgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fcywgX0FycmF5PGJvb2w+IF9fbSkKICAgICAgICAgICAgOiBfTV9zeiAoX19zKSwgX01fbWFz
ayAoX19tKSwgX01fYXJyYXkgKF9fYSkge30KCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgdm9pZAogICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9U
cCYgX190KQogICAgeyBfX3ZhbGFycmF5X2ZpbGwgKF9NX2FycmF5LCBfTV9zeiwgX01fbWFzaywg
X190KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBt
YXNrX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25z
dAogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSwg
X01fYXJyYXksIF9NX21hc2spOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVt
cGxhdGU8Y2xhc3MgRT4KICAgIGlubGluZSB2b2lkCiAgICBtYXNrX2FycmF5PF9UcD46Om9wZXJh
dG9yPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdAogICAgeyBfX3ZhbGFycmF5X2Nv
cHkgKF9fZSwgX19lLnNpemUgKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQojIDE0MyAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL21hc2tfYXJyYXkuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IHZhbGFycmF5
PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9NX2FycmF5
LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+
OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h
dWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkp
OyB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+Ojpv
cGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt
ZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yu
c2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxp
bmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCBfRXhwcjxFLCBfVHA+
JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01fbWFz
aywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9p
ZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp
IGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfTV9hcnJheSwgX01fbWFzaywgX0Fy
cmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRl
bXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0g
KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVs
dXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0
IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9NX2Fy
cmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxf
VHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh
eV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9
CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVy
YXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50
ZWRfbWludXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUg
KCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZv
aWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l
KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2Us
IF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tf
YXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3Qg
eyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChf
X3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz
cyBFPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfRXhw
cjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBf
TV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4m
IF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX01fYXJyYXksIF9NX21hc2ssIF9B
cnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0
ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yICY9
IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQg
KF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZh
bGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwg
X01fbWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6
b3BlcmF0b3IgfD0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVn
bWVudGVkX29yIChfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0KdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8
PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hp
ZnRfbGVmdCAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p
ZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l
KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX21hc2ss
IF9fZSwgX19lLnNpemUgKCkpOyB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQg
bWFza19hcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikg
Y29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwgX01fbWFzaywg
X0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3Ig
Pj49IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9z
aGlmdF9yaWdodCAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9CgoKCn0K
IyAyNTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2luZGlyZWN0X2FycmF5LmgiIDEgMwojIDM2ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvaW5kaXJlY3RfYXJyYXkuaCIgMwoKbmFtZXNwYWNlIHN0ZCB7
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgaW5kaXJlY3RfYXJyYXkKICAgIHsKICAg
IHB1YmxpYzoKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICB2b2lkIG9w
ZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0
b3IqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3Iv
PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3IrPSAoY29u
c3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3ItPSAoY29uc3Qg
dmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3ImPSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3J8PSAoY29uc3QgdmFsYXJyYXk8
X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IHZhbGFycmF5PF9U
cD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPj49IChjb25zdCB2YWxhcnJheTxfVHA+
JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9UcCYpOwoKCiAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX0V4cHI8
X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAg
dm9pZCBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9FeHBy
PF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAg
IHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAg
IHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCBfRXhw
cjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAg
ICB2b2lkIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgX0V4
cHI8X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAg
ICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNvbnN0IF9F
eHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAg
ICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0
IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgaW5kaXJlY3RfYXJy
YXkgKGNvbnN0IGluZGlyZWN0X2FycmF5Jik7CiAgICBpbmRpcmVjdF9hcnJheSAoX0FycmF5PF9U
cD4sIHNpemVfdCwgX0FycmF5PHNpemVfdD4pOwoKICAgIGZyaWVuZCBjbGFzcyB2YWxhcnJheTxf
VHA+OwogICAgZnJpZW5kIGNsYXNzIGdzbGljZV9hcnJheTxfVHA+OwoKICAgIGNvbnN0IHNpemVf
dCBfTV9zejsKICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4OwogICAgY29uc3QgX0Fy
cmF5PF9UcD4gX01fYXJyYXk7CgoKICAgICAgICBpbmRpcmVjdF9hcnJheSAoKTsKICAgICAgICBp
bmRpcmVjdF9hcnJheSYgb3BlcmF0b3I9IChjb25zdCBpbmRpcmVjdF9hcnJheSYpOwogICAgfTsK
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgaW5kaXJlY3RfYXJyYXk8X1Rw
Pjo6aW5kaXJlY3RfYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19hKQogICAgICAg
ICAgICA6IF9NX3N6IChfX2EuX01fc3opLCBfTV9pbmRleCAoX19hLl9NX2luZGV4KSwKICAgICAg
ICAgICAgICBfTV9hcnJheSAoX19hLl9NX2FycmF5KSB7fQoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZQogICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6aW5kaXJlY3RfYXJyYXkg
KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpCiAgICAgICAgICAgIDogX01fc3ogKF9f
cyksIF9NX2luZGV4IChfX2kpLCBfTV9hcnJheSAoX19hKSB7fQoKCgoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy
YXRvcj0gKGNvbnN0IF9UcCYgX190KQogICAgeyBfX3ZhbGFycmF5X2ZpbGwoX01fYXJyYXksIF9N
X2luZGV4LCBfTV9zeiwgX190KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSB2b2lkCiAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IHZhbGFy
cmF5PF9UcD4mIF9fdikgY29uc3QKICAgIHsgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiAo
X192KSwgX01fc3osIF9NX2FycmF5LCBfTV9pbmRleCk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgaW5saW5lIHZvaWQKICAgIGluZGly
ZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNv
bnN0CiAgICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9zeiwgX01fYXJyYXksIF9NX2luZGV4
KTsgfQojIDE0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2luZGlyZWN0X2FycmF5LmgiIDMK
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+Ojpv
cGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt
ZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwg
X01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s
aW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPF9E
b20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJy
YXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCB2YWxhcnJheTxf
VHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01f
aW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+Ojpv
cGVyYXRvciAvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1
Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9CnRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0
b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVk
X21vZHVsdXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lk
IGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m
IF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBfTV9pbmRl
eCwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRp
cmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBj
b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8
X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh
c3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNv
bnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAo
X01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCB2YWxh
cnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX01fYXJyYXks
IF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh
eV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0KdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy
YXRvciBePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50
ZWRfeG9yIChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0g
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBp
bmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBf
X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9pbmRleCwgX19l
LCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h
cnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChf
X3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgX0V4
cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5
LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg
dm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgdmFsYXJyYXk8X1Rw
PiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfb3IgKF9NX2FycmF5LCBfTV9pbmRleCwg
X0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9y
IHw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVk
X29yIChfTV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9CnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25z
dCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0
IChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVj
dF9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBj
b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX2luZGV4LCBf
X2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGluZGlyZWN0
X2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25z
dCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfTV9pbmRleCwgX0Fy
cmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl
PGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yID4+
PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9z
aGlmdF9yaWdodCAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQoKCgp9CiMgMjU3
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2
YWxhcnJheSAoKSA6IF9NX3NpemUgKDApLCBfTV9kYXRhICgwKSB7fQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChzaXplX3QgX19uKQog
ICAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4o
X19uKSkKICB7IF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSAr
IF9fbik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+
Ojp2YWxhcnJheSAoY29uc3QgX1RwJiBfX3QsIHNpemVfdCBfX24pCiAgICA6IF9NX3NpemUoX19u
KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKICB7IF9fdmFsYXJy
YXlfZmlsbF9jb25zdHJ1Y3QgKF9NX2RhdGEsIF9NX2RhdGEgKyBfX24sIF9fdCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29u
c3QgX1RwKiBfX3Jlc3RyaWN0X18gX19wLCBzaXplX3QgX19uKQogICAgOiBfTV9zaXplKF9fbiks
IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpCiAgeyBfX3ZhbGFycmF5
X2NvcHlfY29uc3RydWN0IChfX3AsIF9fcCArIF9fbiwgX01fZGF0YSk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KQogICAgOiBfTV9zaXplKF9fdi5fTV9zaXplKSwgX01fZGF0YShfX3Zh
bGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX192Ll9NX3NpemUpKQogIHsgX192YWxhcnJheV9jb3B5
X2NvbnN0cnVjdCAoX192Ll9NX2RhdGEsIF9fdi5fTV9kYXRhICsgX01fc2l6ZSwgX01fZGF0YSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxh
cnJheSAoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKICAgIDogX01fc2l6ZShfX3NhLl9N
X3N6KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zYS5fTV9zeikpCiAg
ewogICAgX192YWxhcnJheV9jb3B5CiAgICAgIChfX3NhLl9NX2FycmF5LCBfX3NhLl9NX3N6LCBf
X3NhLl9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOwogIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgZ3NsaWNl
X2FycmF5PF9UcD4mIF9fZ2EpCiAgICA6IF9NX3NpemUoX19nYS5fTV9pbmRleC5zaXplKCkpLAog
ICAgICBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKICB7CiAg
ICBfX3ZhbGFycmF5X2NvcHkKICAgICAgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9f
Z2EuX01faW5kZXgpLAogICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOwogIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJh
eSAoY29uc3QgbWFza19hcnJheTxfVHA+JiBfX21hKQogICAgOiBfTV9zaXplKF9fbWEuX01fc3op
LCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX21hLl9NX3N6KSkKICB7CiAg
ICBfX3ZhbGFycmF5X2NvcHkKICAgICAgKF9fbWEuX01fYXJyYXksIF9fbWEuX01fbWFzaywgX0Fy
cmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgaW5kaXJlY3RfYXJyYXk8
X1RwPiYgX19pYSkKICAgIDogX01fc2l6ZShfX2lhLl9NX3N6KSwgX01fZGF0YShfX3ZhbGFycmF5
X2dldF9zdG9yYWdlPF9UcD4oX19pYS5fTV9zeikpCiAgewogICAgX192YWxhcnJheV9jb3B5CiAg
ICAgIChfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LCBfQXJyYXk8X1RwPihfTV9kYXRhKSwg
X01fc2l6ZSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E
b20+CiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBfRXhwcjxfRG9tLCBf
VHA+JiBfX2UpCiAgICA6IF9NX3NpemUoX19lLnNpemUgKCkpLCBfTV9kYXRhKF9fdmFsYXJyYXlf
Z2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9z
aXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSB2YWxhcnJheTxfVHA+Ojp+dmFsYXJyYXkgKCkKICB7CiAgICAgIF9fdmFsYXJyYXlf
ZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CiAgICAgIF9fdmFs
YXJyYXlfcmVsZWFzZV9tZW1vcnkoX01fZGF0YSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChj
b25zdCB2YWxhcnJheTxfVHA+JiBfX3YpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkoX192Ll9N
X2RhdGEsIF9NX3NpemUsIF9NX2RhdGEpOwogICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1Rw
Pjo6b3BlcmF0b3I9IChjb25zdCBfVHAmIF9fdCkKICB7CiAgICAgIF9fdmFsYXJyYXlfZmlsbCAo
X01fZGF0YSwgX01fc2l6ZSwgX190KTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+JgogIHZhbGFycmF5PF9UcD46
Om9wZXJhdG9yPSAoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKICB7CiAgICAgIF9fdmFs
YXJyYXlfY29weSAoX19zYS5fTV9hcnJheSwgX19zYS5fTV9zeiwKICAgICAgICAgICAgICBfX3Nh
Ll9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFs
YXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYgX19nYSkKICB7
CiAgICAgIF9fdmFsYXJyYXlfY29weSAoX19nYS5fTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX19n
YS5fTV9pbmRleCksCiAgICAgICAgICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5s
aW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBtYXNr
X2FycmF5PF9UcD4mIF9fbWEpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fbWEuX01fYXJy
YXksIF9fbWEuX01fbWFzaywKICAgICAgICAgICAgICBfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01f
c2l6ZSk7CiAgICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0
IGluZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9f
aWEuX01fYXJyYXksIF9faWEuX01faW5kZXgsCiAgICAgICAgICAgICAgIF9BcnJheTxfVHA+KF9N
X2RhdGEpLCBfTV9zaXplKTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogIGlubGluZSB2YWxhcnJheTxfVHA+Jgog
IHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lKQog
IHsKICAgICAgX192YWxhcnJheV9jb3B5IChfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2Rh
dGEpKTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KICB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvcltdIChzbGljZSBfX3MpIGNvbnN0CiAgewogICAgICB0eXBlZGVmIF9TQ2xvczxf
VmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+
IChfQ2xvc3VyZSAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcykpOwogIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogIGlubGluZSBzbGljZV9hcnJheTxfVHA+CiAgdmFsYXJyYXk8X1RwPjo6
b3BlcmF0b3JbXSAoc2xpY2UgX19zKQogIHsKICAgICAgcmV0dXJuIHNsaWNlX2FycmF5PF9UcD4g
KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogIGlubGluZSBfRXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KICB2YWxhcnJheTxf
VHA+OjpvcGVyYXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpIGNvbnN0CiAgewogICAgICB0eXBl
ZGVmIF9HQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKICAgICAgcmV0dXJuIF9FeHByPF9D
bG9zdXJlLCBfVHA+CiAgICAgICAgICAoX0Nsb3N1cmUgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBf
X2dzLl9NX2luZGV4LT5fTV9pbmRleCkpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
IGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10gKGNv
bnN0IGdzbGljZSYgX19ncykKICB7CiAgICAgIHJldHVybiBnc2xpY2VfYXJyYXk8X1RwPgogICAg
ICAgICAgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2dzLl9NX2luZGV4LT5fTV9pbmRleCk7CiAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4KICB2YWxh
cnJheTxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdAog
IHsKICAgICAgc2l6ZV90IF9fcyAoMCk7CiAgICAgIHNpemVfdCBfX2UgKF9fbS5zaXplICgpKTsK
ICAgICAgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX2U7ICsrX19pKQogICAgICAgICAgaWYgKF9f
bVtfX2ldKSArK19fczsKICAgICAgcmV0dXJuIHZhbGFycmF5PF9UcD4gKG1hc2tfYXJyYXk8X1Rw
PiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQXJyYXk8Ym9vbD4gKF9fbSkpKTsKICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICBpbmxpbmUgbWFza19hcnJheTxfVHA+CiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0
b3JbXSAoY29uc3QgdmFsYXJyYXk8Ym9vbD4mIF9fbSkKICB7CiAgICAgIHNpemVfdCBfX3MgKDAp
OwogICAgICBzaXplX3QgX19lIChfX20uc2l6ZSAoKSk7CiAgICAgIGZvciAoc2l6ZV90IF9faT0w
OyBfX2k8X19lOyArK19faSkKICAgICAgICAgIGlmIChfX21bX19pXSkgKytfX3M7CiAgICAgIHJl
dHVybiBtYXNrX2FycmF5PF9UcD4gKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsIF9BcnJheTxi
b29sPiAoX19tKSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9FeHBy
PF9JQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10g
KGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkgY29uc3QKICB7CiAgICAgIHR5cGVkZWYgX0lD
bG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOwogICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
IF9UcD4gKF9DbG9zdXJlICgqdGhpcywgX19pKSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgaW5saW5lIGluZGlyZWN0X2FycmF5PF9UcD4KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRv
cltdIChjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCiAgewogICAgICByZXR1cm4gaW5kaXJl
Y3RfYXJyYXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9faS5zaXplKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PHNpemVfdD4gKF9faSkpOwogIH0KCiAgdGVt
cGxhdGU8Y2xhc3MgX1RwPgogIGlubGluZSBzaXplX3QgdmFsYXJyYXk8X1RwPjo6c2l6ZSAoKSBj
b25zdCB7IHJldHVybiBfTV9zaXplOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcD4KICBpbmxpbmUg
X1RwCiAgdmFsYXJyYXk8X1RwPjo6c3VtICgpIGNvbnN0CiAgewogICAgICByZXR1cm4gX192YWxh
cnJheV9zdW0oX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOwogIH0KIyA0NzcgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+
CiAgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KICAgICB2YWxhcnJheTxfVHA+OjpzaGlmdChpbnQg
X19uKSBjb25zdAogICAgIHsKICAgICAgIF9UcCogY29uc3QgX19hID0gc3RhdGljX2Nhc3Q8X1Rw
Kj4KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9UcCkgKiBfTV9zaXplKSk7CiAg
ICAgICBpZiAoX19uID09IDApCiAgICAgICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01f
ZGF0YSwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7CiAgICAgICBlbHNlIGlmIChfX24gPiAwKQog
ICAgICAgICB7CiAgICAgICAgICAgaWYgKHNpemVfdChfX24pID4gX01fc2l6ZSkKICAgICAgICAg
ICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgKyBfX24pOwogICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2Nv
bnN0cnVjdChfTV9kYXRhK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7CiAgICAgICAgICAg
ICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hK19NX3NpemUtX19uLCBfX2EgKyBf
TV9zaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICB7
CiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoX01fZGF0YSwgX01fZGF0YStf
TV9zaXplK19fbiwgX19hLV9fbik7CiAgICAgICAgICAgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0
cnVjdChfX2EsIF9fYSAtIF9fbik7CiAgICAgICAgIH0KICAgICAgIHJldHVybiB2YWxhcnJheTxf
VHA+IChfX2EsIF9NX3NpemUpOwogICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAgICBp
bmxpbmUgdmFsYXJyYXk8X1RwPgogICAgIHZhbGFycmF5PF9UcD46OmNzaGlmdCAoaW50IF9fbikg
Y29uc3QKICAgICB7CiAgICAgICBfVHAqIGNvbnN0IF9fYSA9IHN0YXRpY19jYXN0PF9UcCo+CiAg
ICAgICAgIChfX2J1aWx0aW5fYWxsb2NhIChzaXplb2YoX1RwKSAqIF9NX3NpemUpKTsKICAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRh
LCBfTV9kYXRhICsgX01fc2l6ZSwgX19hKTsKICAgICAgIGVsc2UgaWYgKF9fbiA+IDApCiAgICAg
ICAgIHsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9NX2RhdGEsIF9NX2Rh
dGErX19uLCBfX2ErX01fc2l6ZS1fX24pOwogICAgICAgICAgIF9fdmFsYXJyYXlfY29weV9jb25z
dHJ1Y3QoX01fZGF0YStfX24sIF9NX2RhdGEgKyBfTV9zaXplLCBfX2EpOwogICAgICAgICB9CiAg
ICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0
CiAgICAgICAgICAgICAoX01fZGF0YSArIF9NX3NpemUrX19uLCBfTV9kYXRhICsgX01fc2l6ZSwg
X19hKTsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0CiAgICAgICAgICAgICAo
X01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUrX19uLCBfX2EgLSBfX24pOwogICAgICAgICB9CiAg
ICAgICByZXR1cm4gdmFsYXJyYXk8X1RwPihfX2EsIF9NX3NpemUpOwogICAgIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcD4KICBpbmxpbmUgdm9pZAogIHZhbGFycmF5PF9UcD46OnJlc2l6ZSAoc2l6
ZV90IF9fbiwgX1RwIF9fYykKICB7CgoKCiAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMo
X01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOwogICAgaWYgKF9NX3NpemUgIT0gX19uKQogICAg
ICB7CiAgICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRhKTsKICAgICAgICBf
TV9zaXplID0gX19uOwogICAgICAgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9U
cD4oX19uKTsKICAgICAgfQogICAgX192YWxhcnJheV9maWxsX2NvbnN0cnVjdChfTV9kYXRhLCBf
TV9kYXRhICsgX19uLCBfX2MpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGlu
ZSBfVHAKICB2YWxhcnJheTxfVHA+OjptaW4oKSBjb25zdAogIHsKICAgICAgcmV0dXJuICptaW5f
ZWxlbWVudCAoX01fZGF0YSwgX01fZGF0YStfTV9zaXplKTsKICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICBpbmxpbmUgX1RwCiAgdmFsYXJyYXk8X1RwPjo6bWF4KCkgY29uc3QKICB7CiAg
ICAgIHJldHVybiAqbWF4X2VsZW1lbnQgKF9NX2RhdGEsIF9NX2RhdGErX01fc2l6ZSk7CiAgfQoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgaW5saW5lIF9FeHByPF9WYWxGdW5DbG9zPF9WYWxBcnJh
eSxfVHA+LF9UcD4KICB2YWxhcnJheTxfVHA+OjphcHBseSAoX1RwIGZ1bmMgKF9UcCkpIGNvbnN0
CiAgewogICAgICB0eXBlZGVmIF9WYWxGdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOwog
ICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKCp0aGlzLCBmdW5jKSk7
CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9W
YWxBcnJheSxfVHA+LF9UcD4KICB2YWxhcnJheTxfVHA+OjphcHBseSAoX1RwIGZ1bmMgKGNvbnN0
IF9UcCAmKSkgY29uc3QKICB7CiAgICAgIHR5cGVkZWYgX1JlZkZ1bkNsb3M8X1ZhbEFycmF5LF9U
cD4gX0Nsb3N1cmU7CiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAo
KnRoaXMsIGZ1bmMpKTsKICB9CiMgNTgyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3Zh
bGFycmF5LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNs
b3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4sIF9UcD4gdmFsYXJyYXk8X1RwPjo6b3BlcmF0
b3IgKygpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykp
OyB9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPG5lZ2F0
ZSxfVmFsQXJyYXksX1RwPiwgX1RwPiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAtKCkgY29uc3Qg
eyB0eXBlZGVmIF9VbkNsb3M8bmVnYXRlLF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9CiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxfVmFsQXJyYXks
X1RwPiwgX1RwPiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciB+KCkgY29uc3QgeyB0eXBlZGVmIF9V
bkNsb3M8X0JpdHdpc2Vfbm90LF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogIGlubGluZSBfRXhwcjxfVW5DbG9zPGxvZ2ljYWxfbm90LF9WYWxBcnJheSxfVHA+
LCBib29sPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yISgpIGNvbnN0CiAgewogICAgICB0eXBl
ZGVmIF9VbkNsb3M8bG9naWNhbF9ub3QsX1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7CiAgICAgIHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlICgqdGhpcykpOwogIH0KIyA2MTQg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTxjbGFz
cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0g
KGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4oX01f
ZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+
IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0
IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+
KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRo
aXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5
PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX21p
bnVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9
IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50
ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3Yu
X01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFs
YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCBfVHAgJl9fdCkg
eyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9z
aXplLCBfX3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFs
YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9k
YXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9
CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvciAvPSAoY29uc3QgX1RwICZfX3QpIHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVz
IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9IHRl
bXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+Ojpv
cGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50ZWRf
ZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5f
TV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxh
cnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9UcCAmX190KSB7
IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUs
IF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJh
eTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4g
Jl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBf
TV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxh
dGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJh
dG9yIF49IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9U
cD4oX01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFz
cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0g
KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5
PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVy
biAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFs
YXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50
ZWRfYW5kIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlz
OyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf
VHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdt
ZW50ZWRfYW5kIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192
Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZh
bGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX1RwICZfX3Qp
IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9f
dCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxf
VHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
dikgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwg
X0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNz
IF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA8PD0g
KGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9U
cD4oX01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFz
cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9
IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0
IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEp
KTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9U
cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IF9UcCAmX190KSB7IF9BcnJh
eV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBf
X3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8
X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAm
X192KSB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+KF9NX2RhdGEp
LCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KCgoK
Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKIyA2NDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
dmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0IF9F
eHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4o
X01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBf
VHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8
X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9h
dWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1
cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp
bmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCBfRXhw
cjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxf
VHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xh
c3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy
cmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJy
YXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUp
OyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25z
dCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJh
eTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8
Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZh
bGFycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBf
QXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7
IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+
IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0
IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1Rw
PihfTV9kYXRhKSwgX19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNz
IF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJh
eTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5
X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVy
biAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCBfRXhw
cjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxf
VHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xh
c3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy
cmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0Fy
cmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01f
c2l6ZSk7IHJldHVybiAqdGhpczsgfQojIDY4MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92YWxhcnJheS5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPHBsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciArIChj
b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBl
ZGVmIF9CaW5DbG9zPHBsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxf
Q29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxfVHA+ICZf
X3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0Nv
bnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9D
bG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy
PF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9y
ICsgKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBf
QmluQ2xvczxwbHVzLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX1ZhbEFycmF5LF9WYWxB
cnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciAtIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3Ys
IGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9WYWxB
cnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg
X1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+
IG9wZXJhdG9yIC0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsg
dHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9z
dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9Db25z
dGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAtIChjb25zdCBfVHAgJl9fdCwg
Y29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX0NvbnN0
YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBf
VHA+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4s
IF9UcD4gb3BlcmF0b3IgKiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJh
eTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9WYWxBcnJheSxfVmFs
QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns
b3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3Bl
cmF0b3IgKiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBl
ZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVz
LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAqIChjb25zdCBfVHAg
Jl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bXVsdGlw
bGllcyxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxf
VHAsX1RwPiwgX1RwPiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0
IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5
LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+
IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxkaXZpZGVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBv
cGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5
cGVkZWYgX0JpbkNsb3M8ZGl2aWRlcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9z
dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0Nv
bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIC8gKGNvbnN0IF9UcCAmX190
LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9D
b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp
bmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+
LCBfVHA+IG9wZXJhdG9yICUgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJy
YXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX1ZhbEFy
cmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9z
dXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9C
aW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IG9wZXJhdG9y
ICUgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBf
QmluQ2xvczxtb2R1bHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfQ29uc3RhbnQs
X1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgJSAoY29uc3QgX1RwICZfX3QsIGNvbnN0
IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50
LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+
IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxfQml0d2lzZV94b3IsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwg
X1RwPiBvcGVyYXRvciBeIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5
PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX1Zh
bEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9D
bG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy
PF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4g
b3BlcmF0b3IgXiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0
eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9f
dCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3
aXNlX3hvcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgXiAoY29u
c3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9z
PF9CaXR3aXNlX3hvcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJy
YXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yICYgKGNvbnN0IHZhbGFycmF5PF9U
cD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0Jp
dHdpc2VfYW5kLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxf
Q29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCB2YWxhcnJheTxfVHA+ICZf
X3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxB
cnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg
X1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9U
cD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAm
X192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXks
X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg
KF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNs
b3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRv
ciB8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg
eyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U
cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwg
X193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0Jp
dHdpc2Vfb3IsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIHwgKGNv
bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xv
czxfQml0d2lzZV9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX29yLF9Db25zdGFu
dCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciB8IChjb25zdCBfVHAgJl9fdCwgY29u
c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0Nv
bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LCBfVHA+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf
VHA+LCBfVHA+IG9wZXJhdG9yIDw8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh
bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9sZWZ0LF9WYWxBcnJh
eSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1Rw
PiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixf
VHA+IG9wZXJhdG9yIDw8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190
KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAs
X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192
LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf
U2hpZnRfbGVmdCxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPDwg
KGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmlu
Q2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFs
QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJh
eTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9z
PF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJy
YXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPj4gKGNvbnN0IHZhbGFycmF5PF9U
cD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQs
X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0NvbnN0YW50LF9WYWxBcnJheSxf
VHAsX1RwPixfVHA+IG9wZXJhdG9yID4+IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8
X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25zdGFudCxfVmFs
QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns
b3N1cmUgKF9fdCwgX192KSk7IH0KIyA3MjAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
dmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xv
czxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9y
ICYmIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg
eyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U
cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3Ys
IF9fdykpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2lj
YWxfYW5kLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgJiYgKGNv
bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xv
czxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0
ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQs
X1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCBfVHAgJl9fdCwgY29u
c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQsX0Nv
bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp
bmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf
VHA+LGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh
bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX1ZhbEFycmF5
LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29s
PiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+
IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7
IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBf
X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2Fs
X29yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0
IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxs
b2dpY2FsX29yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfVmFs
QXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
diwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8s
X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBp
bmxpbmUgX0V4cHI8X0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1Rw
Pixib29sPiBvcGVyYXRvciA9PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAg
Jl9fdCkgeyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3RhbnQsX1Rw
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChf
X3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVx
dWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNv
bnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xv
czxlcXVhbF90byxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5
LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciAhPSAoY29uc3QgdmFsYXJyYXk8X1Rw
PiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxub3Rf
ZXF1YWxfdG8sX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9F
eHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xh
c3MgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfQ29u
c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFy
cmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBi
b29sPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4s
Ym9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZf
X3YpIHsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX0NvbnN0YW50LF9WYWxBcnJheSxf
VHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUg
KF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNs
b3M8bGVzcyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yIDwgKGNv
bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVk
ZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfQ29u
c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192
LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX1ZhbEFycmF5LF9Db25z
dGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Ns
b3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8X0Jp
bkNsb3M8bGVzcyxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yIDwg
KGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmlu
Q2xvczxsZXNzLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9WYWxB
cnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3Ys
IGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXIsX1Zh
bEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJv
b2w+IG9wZXJhdG9yID4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3Qp
IHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4g
X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9f
dCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIs
X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCBfVHAg
Jl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRl
cixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns
b3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfVmFsQXJyYXks
X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29u
c3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFs
QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
IGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGlu
ZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4s
Ym9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZf
X3QpIHsgdHlwZWRlZiBfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfQ29uc3RhbnQsX1Rw
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChf
X3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxl
c3NfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA8PSAo
Y29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5D
bG9zPGxlc3NfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFs
QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yID49IChjb25zdCB2YWxhcnJh
eTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9z
PGdyZWF0ZXJfZXF1YWwsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxh
dGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFsQXJy
YXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yID49IChjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVh
bCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns
b3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+
IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxfVmFsQXJyYXks
X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJh
eTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf
VmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4g
KF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CgoKCn0KIyAzMiAiL3Vzci9pbmNsdWRlL2crKy12My92
YWxhcnJheSIgMiAzCiMgNDMgIkZJVFNVdGlsLmgiIDIKCiMgMSAiRml0c0Vycm9yLmgiIDEKIyA0
NSAiRklUU1V0aWwuaCIgMgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAx
IDMKIyA1MCAiRklUU1V0aWwuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9u
IiAxIDMKIyA1MSAiRklUU1V0aWwuaCIgMgp1c2luZyBzdGQ6OnN0cmluZzsKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2NvbXBsZXgiIDEgMwojIDUzICJGSVRTVXRpbC5oIiAyCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy12My9tZW1vcnkiIDEgMwojIDU0ICJGSVRTVXRpbC5oIiAyCgoKCm5hbWVzcGFj
ZSBDQ2ZpdHMgewoKCgogIG5hbWVzcGFjZSBGSVRTVXRpbCB7CiMgMzEyICJGSVRTVXRpbC5oIgog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBzd2FwKFQmIGxlZnQsVCYgcmlnaHQp
OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBzd2FwKHN0ZDo6dmVjdG9yPFQ+
JiBsZWZ0LCBzdGQ6OnZlY3RvcjxUPiYgcmlnaHQpOwoKICAgIHN0cmluZyBsb3dlckNhc2UoY29u
c3Qgc3RyaW5nJiBpbnB1dFN0cmluZyk7CgogICAgc3RyaW5nIHVwcGVyQ2FzZShjb25zdCBzdHJp
bmcmIGlucHV0U3RyaW5nKTsKCiAgc3RydWN0IEludmFsaWRDb252ZXJzaW9uIDogcHVibGljIEZp
dHNFeGNlcHRpb24KICB7CiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udmVyc2lvbihjb25zdCBz
dHJpbmcmIGRpYWcsIGJvb2wgc2lsZW50PWZhbHNlKTsKCiAgfTsKCiAgc3RydWN0IE1hdGNoU3Rl
bSA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxzdHJpbmcsc3RyaW5nLGJvb2w+CiAgewog
ICAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0cmluZyYgbGVmdCwgY29uc3Qgc3RyaW5n
JiByaWdodCkgY29uc3Q7CiAgfTsKCiAgc3RhdGljIGNvbnN0IGRvdWJsZSBkMSgwKTsKICBzdGF0
aWMgY29uc3QgZmxvYXQgZjEoMCk7CiAgc3RhdGljIGNvbnN0IHN0ZDo6Y29tcGxleDxmbG9hdD4g
YzEoMC4pOwogIHN0YXRpYyBjb25zdCBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBkMigwLik7CiAgc3Rh
dGljIGNvbnN0IHN0cmluZyBzMSgiIik7CiAgc3RhdGljIGNvbnN0IGludCBpMSgwKTsKICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IHUxKDApOwogIHN0YXRpYyBjb25zdCBsb25nIGwxKDApOwog
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHVsMSgwKTsKICBzdGF0aWMgY29uc3Qgc2hvcnQg
czIoMCk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHVzMSgwKTsKICBzdGF0aWMgY29u
c3QgYm9vbCBiMShmYWxzZSk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjIoMCk7Cgog
IGNoYXIqKiBDaGFyQXJyYXkoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaW5BcnJheSk7Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZlY3Rv
cjxTPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiBpbkFycmF5LHNpemVfdCBmaXJz
dCwgc2l6ZV90IGxhc3QpOwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUgVD4KICB2
b2lkIGZpbGwoc3RkOjp2ZWN0b3I8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6
OmNvbXBsZXg8VD4gPiYgaW5BcnJheSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZlY3Rvcjxz
dGQ6OmNvbXBsZXg8Uz4gPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiBpbkFycmF5
LCBzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5
cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6dmVjdG9yPHN0ZDo6Y29tcGxleDxTPiA+JiBvdXRB
cnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpjb21wbGV4PFQ+ID4mIGluQXJyYXksIHNpemVf
dCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgdm9pZCBm
aWxsKHN0ZDo6dmVjdG9yPHN0cmluZz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYg
aW5BcnJheSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHZvaWQgZmlsbChzdGQ6OnZl
Y3RvcjxzdHJpbmc+JiBvdXRBcnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaW5BcnJh
eSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
IHZvaWQgZmlsbChzdGQ6OnZlY3RvcjxUPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0
cmluZz4mIGluQXJyYXksIHNpemVfdCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgc3RyaW5nIGVycm9yTWVzc2FnZShjb25zdCBTJiBv
dXQsIGNvbnN0IFQmIGluKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAg
dm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxU
PiYgaW5BcnJheSxzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0KTsKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5
LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OmNvbXBsZXg8VD4gPiYgaW5BcnJheSk7CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZhbGFycmF5PHN0
ZDo6Y29tcGxleDxTPiA+JiBvdXRBcnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGluQXJyYXks
IHNpemVfdCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlw
ZW5hbWUgVD4KICB2b2lkIGZpbGwoc3RkOjp2YWxhcnJheTxzdGQ6OmNvbXBsZXg8Uz4gPiYgb3V0
QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6Y29tcGxleDxUPiA+JiBpbkFycmF5KTsKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFy
cmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBpbkFycmF5LHNpemVfdCBmaXJzdCwgc2l6
ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBm
aWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBp
bkFycmF5KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxs
KHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5PHN0ZDo6Y29t
cGxleDxUPiA+JiBpbkFycmF5KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+
CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8c3RkOjpjb21wbGV4PFM+ID4mIG91dEFycmF5LCBj
b25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBpbkFycmF5LCBzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0
KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6
dmFsYXJyYXk8c3RkOjpjb21wbGV4PFM+ID4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5
PHN0ZDo6Y29tcGxleDxUPiA+JiBpbkFycmF5KTsKCgogIGZpdHNmaWxlKiBjb3B5Rml0c1B0cihm
aXRzZmlsZSAqIGluUHRyKTsKIyA0MTcgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KICAgIHN0cnVjdCBNYXRjaFB0ck5hbWUgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248
VCxzdGQ6OnN0cmluZyxib29sPgogICAgewoKCgoKICAgICAgICAgIGJvb2wgb3BlcmF0b3IgKCkg
KGNvbnN0IFQmIGxlZnQsIGNvbnN0IHN0cmluZyYgcmlnaHQpIGNvbnN0OwoKICAgICAgcHVibGlj
OgogICAgICBwcm90ZWN0ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9Owoj
IDQ0MiAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgc3RydWN0IE1hdGNo
TmFtZSA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxULHN0ZDo6c3RyaW5nLGJvb2w+CiAg
ICB7CgoKCiAgICAgICAgICBib29sIG9wZXJhdG9yICgpIChjb25zdCBUJiBsZWZ0LCBjb25zdCBz
dHJpbmcmIHJpZ2h0KSBjb25zdDsKCiAgICAgIHB1YmxpYzoKICAgICAgcHJvdGVjdGVkOgogICAg
ICBwcml2YXRlOgogICAgICBwcml2YXRlOgogICAgfTsKIyA0NjQgIkZJVFNVdGlsLmgiCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIHN0cnVjdCBNYXRjaE51bSA6IHB1YmxpYyBzdGQ6OmJpbmFy
eV9mdW5jdGlvbjxULGludCxib29sPgogICAgewoKCgogICAgICAgICAgYm9vbCBvcGVyYXRvciAo
KSAoY29uc3QgVCYgbGVmdCwgY29uc3QgaW50JiByaWdodCkgY29uc3Q7CgogICAgICBwdWJsaWM6
CiAgICAgIHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CiMg
NDg2ICJGSVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgTWF0
Y2hUeXBlCiAgICB7CgoKCgoKCgogICAgICAgIGNsYXNzIFVucmVjb2duaXplZFR5cGUgOiBwdWJs
aWMgRml0c0V4Y2VwdGlvbgogICAgICAgIHsKICAgICAgICAgIHB1YmxpYzoKCgogICAgICAgICAg
ICAgIFVucmVjb2duaXplZFR5cGUgKGNvbnN0IHN0cmluZyYgc3RyZywgYm9vbCBzaWxlbnQgPSB0
cnVlKTsKCiAgICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICBwcml2YXRlOgogICAgICAgICAg
cHJpdmF0ZToKICAgICAgICB9OwoKCgoKICAgICAgICAgIFZhbHVlVHlwZSBvcGVyYXRvciAoKSAo
KTsKCiAgICAgIHB1YmxpYzoKICAgICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgogICAgICBw
cml2YXRlOgogICAgfTsKIyA1MjcgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KICAgIHN0cnVjdCBDVmFycmF5CiAgICB7CgoKCiAgICAgICAgICBUKiBvcGVyYXRvciAoKSAo
Y29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGluQXJyYXkpOwoKICAgICAgcHVibGljOgogICAgICBwcm90
ZWN0ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDU0OSAiRklUU1V0
aWwuaCIKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RydWN0IEZpdHNOdWxsVmFsdWUK
ICAgIHsKCgoKICAgICAgICAgIFQgb3BlcmF0b3IgKCkgKCk7CgogICAgICBwdWJsaWM6CiAgICAg
IHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CiMgNTcxICJG
SVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgTWF0Y2hJbWFn
ZVR5cGUKICAgIHsKIyA1ODIgIkZJVFNVdGlsLmgiCiAgICAgICAgY2xhc3MgVW5yZWNvZ25pemVk
VHlwZSA6IHB1YmxpYyBGaXRzRXhjZXB0aW9uCiAgICAgICAgewogICAgICAgICAgcHVibGljOgoK
CiAgICAgICAgICAgICAgVW5yZWNvZ25pemVkVHlwZSAoY29uc3Qgc3RyaW5nJiBzdHJnLCBib29s
IHNpbGVudCA9IHRydWUpOwoKICAgICAgICAgIHByb3RlY3RlZDoKICAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICBwcml2YXRlOgogICAgICAgIH07CgoKCgogICAgICAgICAgSW1hZ2VUeXBlIG9w
ZXJhdG9yICgpICgpOwoKICAgICAgcHVibGljOgogICAgICBwcm90ZWN0ZWQ6CiAgICAgIHByaXZh
dGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDYxMyAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRl
IDxjbGFzcyBUPgogICAgc3RydWN0IE1hdGNoUHRyTnVtIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1
bmN0aW9uPFQsaW50LGJvb2w+CiAgICB7CgoKCiAgICAgICAgICBib29sIG9wZXJhdG9yICgpIChj
b25zdCBUJiBsZWZ0LCBjb25zdCBpbnQmIHJpZ2h0KSBjb25zdDsKCiAgICAgIHB1YmxpYzoKICAg
ICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgogICAgICBwcml2YXRlOgogICAgfTsKIyA2MzYg
IkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIGNsYXNzIGF1dG9fYXJy
YXlfcHRyCiAgICB7CiAgICAgIHB1YmxpYzoKCgoKICAgICAgICAgIGV4cGxpY2l0IGF1dG9fYXJy
YXlfcHRyIChYKiBwID0gMCkgdGhyb3cgKCk7CgoKCiAgICAgICAgICBleHBsaWNpdCBhdXRvX2Fy
cmF5X3B0ciAoYXV0b19hcnJheV9wdHI8WD4mIHJpZ2h0KSB0aHJvdyAoKTsKCgogICAgICAgICAg
fmF1dG9fYXJyYXlfcHRyKCk7CgoKCgogICAgICAgICAgdm9pZCBvcGVyYXRvciA9IChhdXRvX2Fy
cmF5X3B0cjxYPiYgcmlnaHQpOwoKCgogICAgICAgICAgWCYgb3BlcmF0b3IgKiAoKSB0aHJvdyAo
KTsKCgoKICAgICAgICAgIFgmIG9wZXJhdG9yIFtdIChzaXplX3QgaSkgdGhyb3cgKCk7CgoKCiAg
ICAgICAgICBYIG9wZXJhdG9yIFtdIChzaXplX3QgaSkgY29uc3QgdGhyb3cgKCk7CgoKICAgICAg
ICAgIFgqIGdldCAoKSBjb25zdDsKCgoKICAgICAgICAgIFgqIHJlbGVhc2UgKCkgdGhyb3cgKCk7
CgoKCiAgICAgICAgICBYKiByZXNldCAoWCogcCkgdGhyb3cgKCk7CgoKICAgICAgICAgIHN0YXRp
YyB2b2lkIHJlbW92ZSAoWComIHgpOwoKICAgICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgog
ICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIFgqIG1fcDsKCgogICAgfTsKIyA3MDMgIkZJVFNV
dGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIHN0cnVjdCBDb21wYXJlUHRySW5k
ZXggOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248VCxULGJvb2w+CiAgICB7CgoKCiAgICAg
ICAgICBib29sIG9wZXJhdG9yICgpIChjb25zdCBUKiBsZWZ0LCBjb25zdCBUKiByaWdodCk7Cgog
ICAgICBwdWJsaWM6CiAgICAgIHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0
ZToKICAgIH07CiMgNzI1ICJGSVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAg
ICBzdHJ1Y3QgQ0FhcnJheQogICAgewoKCgogICAgICAgICAgVCogb3BlcmF0b3IgKCkgKGNvbnN0
IHN0ZDo6dmFsYXJyYXk8VD4mIGluQXJyYXkpOwoKICAgICAgcHVibGljOgogICAgICBwcm90ZWN0
ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDc0NyAiRklUU1V0aWwu
aCIKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RydWN0IENWQWFycmF5CiAgICB7CgoK
CiAgICAgICAgICBUKiBvcGVyYXRvciAoKSAoY29uc3Qgc3RkOjp2ZWN0b3I8IHN0ZDo6dmFsYXJy
YXk8VD4gPiYgaW5BcnJheSk7CgogICAgICBwdWJsaWM6CiAgICAgIHByb3RlY3RlZDoKICAgICAg
cHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CgoKCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBU
PgogICAgaW5saW5lIGJvb2wgTWF0Y2hQdHJOYW1lPFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgVCYg
bGVmdCwgY29uc3Qgc3RyaW5nJiByaWdodCkgY29uc3QKICAgIHsKCiAgICAgICByZXR1cm4gbGVm
dC0+bV9uYW1lID09IHJpZ2h0LT5tX25hbWU7CgogICAgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KICAgIGlubGluZSBib29sIE1hdGNoTmFtZTxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IFQm
IGxlZnQsIGNvbnN0IHN0cmluZyYgcmlnaHQpIGNvbnN0CiAgICB7CgogICAgICAgcmV0dXJuIGxl
ZnQubV9uYW1lID09IHJpZ2h0Lm1fbmFtZTsKCiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDxjbGFz
cyBUPgogICAgaW5saW5lIGJvb2wgTWF0Y2hOdW08VD46Om9wZXJhdG9yICgpIChjb25zdCBUJiBs
ZWZ0LCBjb25zdCBpbnQmIHJpZ2h0KSBjb25zdAogICAgewoKICAgIHJldHVybiBsZWZ0LmluZGV4
KCkgPT0gcmlnaHQ7CgogICAgfQojIDgwNSAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogICAgaW5saW5lIFQqIENWYXJyYXk8VD46Om9wZXJhdG9yICgpIChjb25zdCBzdGQ6
OnZlY3RvcjxUPiYgaW5BcnJheSkKICAgIHsKCgoKCiAgICAgIGF1dG9fYXJyYXlfcHRyPFQ+IHBD
KG5ldyBUW2luQXJyYXkuc2l6ZSgpXSk7CiAgICAgIFQqIGMgPSBwQy5nZXQoKTsKICAgICAgc3Rk
Ojpjb3B5KGluQXJyYXkuYmVnaW4oKSxpbkFycmF5LmVuZCgpLCZjWzBdKTsKICAgICAgcmV0dXJu
IHBDLnJlbGVhc2UoKTsKCiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAg
aW5saW5lIFQgRml0c051bGxWYWx1ZTxUPjo6b3BlcmF0b3IgKCkgKCkKICAgIHsKCiAgICAgICAg
ICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBudWxsOwogICAgICAgICAgIHN3aXRjaCAoIG51bGwo
KSApCiAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIGNhc2UgVGZsb2F0OgogICAgICAgICAg
ICAgICAgY2FzZSBUY29tcGxleDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KC05LjExOTEyRS0zNkYpOwogICAgICAgICAgICAgICAgY2FzZSBUZG91YmxlOgog
ICAgICAgICAgICAgICAgY2FzZSBUZGJsY29tcGxleDoKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KC05LjExOTEyOTEzOTE0OTFFLTM2KTsKICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICB9CgogICAgfQojIDg1MSAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAg
aW5saW5lIGJvb2wgTWF0Y2hQdHJOdW08VD46Om9wZXJhdG9yICgpIChjb25zdCBUJiBsZWZ0LCBj
b25zdCBpbnQmIHJpZ2h0KSBjb25zdAogICAgewoKICAgIHJldHVybiBsZWZ0LT5pbmRleCgpID09
IHJpZ2h0OwoKICAgIH0KIyA4NzUgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KICAgIE1hdGNoVHlwZTwgVCA+OjpVbnJlY29nbml6ZWRUeXBlOjpVbnJlY29nbml6ZWRUeXBl
IChjb25zdCBzdHJpbmcmIHN0cmcsIGJvb2wgc2lsZW50KQoKCgogICAgOiBGaXRzRXhjZXB0aW9u
KHN0cmcsc2lsZW50KQoKICAgIHsKCgogICAgfQoKCgoKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgICBWYWx1ZVR5cGUgTWF0Y2hUeXBlPFQ+OjpvcGVyYXRvciAoKSAoKQogICAgewoKCiAg
ICBpZiAoIHR5cGVpZChUKSA9PSB0eXBlaWQoZDEpICkgcmV0dXJuIFRkb3VibGU7CiAgICBpZiAo
IHR5cGVpZChUKSA9PSB0eXBlaWQoZjEpICkgcmV0dXJuIFRmbG9hdDsKICAgIGlmICggdHlwZWlk
KFQpID09IHR5cGVpZChjMSkgKSByZXR1cm4gVGNvbXBsZXg7CiAgICBpZiAoIHR5cGVpZChUKSA9
PSB0eXBlaWQoZDIpICkgcmV0dXJuIFRkYmxjb21wbGV4OwogICAgaWYgKCB0eXBlaWQoVCkgPT0g
dHlwZWlkKHMxKSApIHJldHVybiBUc3RyaW5nOwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlk
KGkxKSApIHJldHVybiBUaW50OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHUxKSApIHJl
dHVybiBUdWludDsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChzMikgKSByZXR1cm4gVHNo
b3J0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHVzMSkgKSByZXR1cm4gVHVzaG9ydDsK
ICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChiMSkgKSByZXR1cm4gVGxvZ2ljYWw7CiAgICBp
ZiAoIHR5cGVpZChUKSA9PSB0eXBlaWQoYjIpICkgcmV0dXJuIFRieXRlOwogICAgaWYgKCB0eXBl
aWQoVCkgPT0gdHlwZWlkKGwxKSApIHJldHVybiBUbG9uZzsKICAgIGlmICggdHlwZWlkKFQpID09
IHR5cGVpZCh1bDEpICkgcmV0dXJuIFR1bG9uZzsKICAgIHRocm93IE1hdGNoVHlwZTo6VW5yZWNv
Z25pemVkVHlwZSgiSW52YWxpZCBkYXRhIHR5cGUgZm9yIEZJVFMgSS9PIik7CgoKICAgIH0KCgoK
CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBNYXRjaEltYWdlVHlwZTwgVCA+OjpVbnJl
Y29nbml6ZWRUeXBlOjpVbnJlY29nbml6ZWRUeXBlIChjb25zdCBzdHJpbmcmIHN0cmcsIGJvb2wg
c2lsZW50KQoKICAgIDogRml0c0V4Y2VwdGlvbihzdHJnLHNpbGVudCkKCgoKICAgIHsKCgogICAg
fQoKCgoKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBJbWFnZVR5cGUgTWF0Y2hJbWFn
ZVR5cGU8VD46Om9wZXJhdG9yICgpICgpCiAgICB7CgogICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
ZDEoMCk7CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGYxKDApOwogICAgIHN0YXRpYyBjb25zdCBz
aG9ydCBpMSgwKTsKICAgICBzdGF0aWMgY29uc3QgbG9uZyBsMSgwKTsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc2hvcnQgdXMxKDApOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25n
IHVsMSgwKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBieTEoMCk7CgogICAgaWYg
KCB0eXBlaWQoVCkgPT0gdHlwZWlkKGIyKSApIHJldHVybiBJYnl0ZTsKICAgIGlmICggdHlwZWlk
KFQpID09IHR5cGVpZChzMikgKSByZXR1cm4gSXNob3J0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0g
dHlwZWlkKGwxKSApIHJldHVybiBJbG9uZzsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChm
MSkgKSByZXR1cm4gSWZsb2F0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKGQxKSApIHJl
dHVybiBJZG91YmxlOwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHVzMSkgKSByZXR1cm4g
SXVzaG9ydDsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZCh1bDEpICkgcmV0dXJuIEl1bG9u
ZzsKCiAgICB0aHJvdyBNYXRjaEltYWdlVHlwZTo6VW5yZWNvZ25pemVkVHlwZSgiSW52YWxpZCBk
YXRhIHR5cGUgZm9yIEZJVFMgSW1hZ2UgSS9PIik7CgogICAgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgWD4KICAgIGF1dG9fYXJyYXlfcHRyPFg+OjphdXRvX2FycmF5X3B0ciAoWCogcCkg
dGhyb3cgKCkKCiAgICAgICAgICA6IG1fcChwKQoKCgogICAgewoKCiAgICB9CgogICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFg+CiAgICBhdXRvX2FycmF5X3B0cjxYPjo6YXV0b19hcnJheV9wdHIgKGF1
dG9fYXJyYXlfcHRyPFg+JiByaWdodCkgdGhyb3cgKCkKCiAgICAgICAgICA6IG1fcChyaWdodC5y
ZWxlYXNlKCkpCgoKCiAgICB7CgoKICAgIH0KCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAg
ICBhdXRvX2FycmF5X3B0cjxYPjo6fmF1dG9fYXJyYXlfcHRyKCkKICAgIHsKCiAgICAgIGRlbGV0
ZSBbXSBtX3A7CgogICAgfQoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgogICAgdm9pZCBh
dXRvX2FycmF5X3B0cjxYPjo6b3BlcmF0b3IgPSAoYXV0b19hcnJheV9wdHI8WD4mIHJpZ2h0KQog
ICAgewoKICAgICAgaWYgKHRoaXMgIT0gJnJpZ2h0KQogICAgICB7CiAgICAgICAgICAgICAgICBy
ZW1vdmUobV9wKTsKICAgICAgICAgICAgICAgIG1fcCA9IHJpZ2h0LnJlbGVhc2UoKTsKICAgICAg
fQoKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIFgmIGF1dG9fYXJyYXlfcHRy
PFg+OjpvcGVyYXRvciAqICgpIHRocm93ICgpCiAgICB7CgogICAgICByZXR1cm4gKm1fcDsKCiAg
ICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYJiBhdXRvX2FycmF5X3B0cjxYPjo6
b3BlcmF0b3IgW10gKHNpemVfdCBpKSB0aHJvdyAoKQogICAgewoKICAgICAgcmV0dXJuIG1fcFtp
XTsKCiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYIGF1dG9fYXJyYXlfcHRy
PFg+OjpvcGVyYXRvciBbXSAoc2l6ZV90IGkpIGNvbnN0IHRocm93ICgpCiAgICB7CgogICAgICBy
ZXR1cm4gbV9wW2ldOwoKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIFgqIGF1
dG9fYXJyYXlfcHRyPFg+OjpnZXQgKCkgY29uc3QKICAgIHsKCiAgICAgIHJldHVybiBtX3A7Cgog
ICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgogICAgWCogYXV0b19hcnJheV9wdHI8WD46
OnJlbGVhc2UgKCkgdGhyb3cgKCkKICAgIHsKCiAgICAgIHJldHVybiByZXNldCgwKTsKCiAgICB9
CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYKiBhdXRvX2FycmF5X3B0cjxYPjo6cmVz
ZXQgKFgqIHApIHRocm93ICgpCiAgICB7CgoKICAgICAgWCogX190bXAgPSBtX3A7CiAgICAgIG1f
cCA9IHA7CiAgICAgIHJldHVybiBfX3RtcDsKCiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFg+CiAgICB2b2lkIGF1dG9fYXJyYXlfcHRyPFg+OjpyZW1vdmUgKFgqJiB4KQogICAgewoKICAg
ICAgWCogX190bXAoeCk7CiAgICAgIHggPSAwOwogICAgICBkZWxldGUgW10gX190bXA7CgogICAg
fQoKCgoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIGJvb2wgQ29tcGFyZVB0ckluZGV4
PFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgVCogbGVmdCwgY29uc3QgVCogcmlnaHQpCiAgICB7Cgog
ICAgICByZXR1cm4gKGxlZnQtPmluZGV4KCkgPCByaWdodC0+aW5kZXgoKSk7CgogICAgfQoKCgoK
CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIFQqIENBYXJyYXk8VD46Om9wZXJhdG9yICgp
IChjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBpbkFycmF5KQogICAgewoKICAgICAgc2l6ZV90IG4o
aW5BcnJheS5zaXplKCkpOwogICAgICBhdXRvX2FycmF5X3B0cjxUPiBwQyhuZXcgVFtuXSk7CiAg
ICAgIFQqIGM9IHBDLmdldCgpOwogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG47ICsraikg
Y1tqXSA9IGluQXJyYXlbal07CiAgICAgIHJldHVybiBwQy5yZWxlYXNlKCk7CgogICAgfQoKCgoK
CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIFQqIENWQWFycmF5PFQ+OjpvcGVyYXRvciAo
KSAoY29uc3Qgc3RkOjp2ZWN0b3I8IHN0ZDo6dmFsYXJyYXk8VD4gPiYgaW5BcnJheSkKICAgIHsK
CiAgICAgIHNpemVfdCBzeigwKTsKICAgICAgc2l6ZV90IG4oaW5BcnJheS5zaXplKCkpOwoKICAg
ICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBucihuKTsKCiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbjsgKytpKQogICAgICB7CiAgICAgICAgIG5yW2ldID0gaW5BcnJheVtpXS5zaXplKCk7CiAg
ICAgICAgIHN6ICs9IG5yW2ldOwoKICAgICAgfQogICAgICBhdXRvX2FycmF5X3B0cjxUPiBwQyhu
ZXcgVFtzel0pOwogICAgICBUKiBjID0gcEMuZ2V0KCk7CgogICAgICBzaXplX3QgaygwKTsKICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgIHsKICAgICAgICAgc2l6ZV90
JiBtID0gbnJbaV07CiAgICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGN1cnJlbnQgPSBp
bkFycmF5W2ldOwogICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGogPCBtIDsgKytqKSBjW2srK10g
PSBjdXJyZW50W2pdOwogICAgICB9CgogICAgICByZXR1cm4gcEMucmVsZWFzZSgpOwoKICAgIH0K
CiAgfQp9CgoKCm5hbWVzcGFjZSBDQ2ZpdHMKewoKCiAgICAgICAgbmFtZXNwYWNlIEZJVFNVdGls
CiAgICAgICAgewoKICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICAg
ICAgICAgICAgdm9pZCBzd2FwKFQmIGxlZnQsIFQmIHJpZ2h0KQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICBUIHRlbXAobGVmdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0ZW1wOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
ICAgICAgICAgICAgICAgdm9pZCBzd2FwKHN0ZDo6dmVjdG9yPFQ+JiBsZWZ0LCBzdGQ6OnZlY3Rv
cjxUPiYgcmlnaHQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQuc3dhcChyaWdodCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGVtcGxh
dGUgPD4KICAgICAgICAgICAgICAgIGlubGluZSBzdHJpbmcgRml0c051bGxWYWx1ZTxzdHJpbmc+
OjpvcGVyYXRvciAoKSAoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RyaW5nKCIiKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfQojIDExODQg
IkZJVFNVdGlsLmgiCn0KIyA0MSAiS2V5RGF0YS5oIiAyCgoKCm5hbWVzcGFjZSBDQ2ZpdHMgewoj
IDU5ICJLZXlEYXRhLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgS2V5RGF0YSA6
IHB1YmxpYyBLZXl3b3JkCiAgewoKCgogICAgcHVibGljOgoKICAgICAgICBLZXlEYXRhKGNvbnN0
IEtleURhdGE8IFQgPiAmcmlnaHQpOwoKCgogICAgICAgIEtleURhdGEgKGNvbnN0IHN0cmluZyAm
a2V5bmFtZSwgVmFsdWVUeXBlIGtleXR5cGUsIGNvbnN0IFQgJnZhbHVlLCBIRFUqIHAsCiAgICAg
ICAgY29uc3Qgc3RyaW5nICZjb21tZW50ID0gIiIpOwoKCiAgICAgICAgdmlydHVhbCB+S2V5RGF0
YSgpOwoKCgoKICAgICAgICB2aXJ0dWFsIEtleXdvcmQgKiBjbG9uZSAoKSBjb25zdDsKCgogICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZSAoKTsKCgoKCiAgICAgICAgY29uc3QgVCYga2V5dmFsICgp
IGNvbnN0OwogICAgICAgIHZvaWQga2V5dmFsIChjb25zdCBUJiB2YWx1ZSk7CgoKCgoKICAgIHBy
b3RlY3RlZDoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY29weSAoY29uc3QgS2V5d29yZCYgcmln
aHQpOwoKCiAgICAgICAgdmlydHVhbCBib29sIGNvbXBhcmUgKGNvbnN0IEtleXdvcmQgJnJpZ2h0
KSBjb25zdDsKCgogICAgICAgIHZpcnR1YWwgb3N0cmVhbSAmIHB1dCAob3N0cmVhbSAmcykgY29u
c3Q7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVCBtX2tleXZhbDsKCgoKCgoKICAgIHBy
aXZhdGU6CgoKCgogIH07CgoKdGVtcGxhdGU8PiB2b2lkIEtleURhdGE8c3RyaW5nPjo6d3JpdGUo
KTsKdGVtcGxhdGU8PiBjb25zdCBzdHJpbmcmIEtleURhdGE8c3RyaW5nPjo6a2V5dmFsKCkgY29u
c3Q7CnRlbXBsYXRlPD4gdm9pZCBLZXlEYXRhPHN0cmluZz46OmtleXZhbChjb25zdCBzdHJpbmcm
ICk7CnRlbXBsYXRlPD4gb3N0cmVhbSYgS2V5RGF0YTxzdHJpbmc+OjpwdXQob3N0cmVhbSYgcykg
Y29uc3Q7Cgp0ZW1wbGF0ZTw+IHZvaWQgS2V5RGF0YTxzdGQ6OmNvbXBsZXg8ZmxvYXQ+ID46Ondy
aXRlKCk7CnRlbXBsYXRlPD4gb3N0cmVhbSYgS2V5RGF0YTxzdGQ6OmNvbXBsZXg8ZmxvYXQ+ID46
OnB1dChvc3RyZWFtJiBzKSBjb25zdDsKdGVtcGxhdGU8PiBjb25zdCBzdGQ6OmNvbXBsZXg8Zmxv
YXQ+JiBLZXlEYXRhPHN0ZDo6Y29tcGxleDxmbG9hdD4gPjo6a2V5dmFsKCkgY29uc3Q7CnRlbXBs
YXRlPD4gdm9pZCBLZXlEYXRhPHN0ZDo6Y29tcGxleDxmbG9hdD4gPjo6a2V5dmFsKGNvbnN0IHN0
ZDo6Y29tcGxleDxmbG9hdD4mICk7CgoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlu
bGluZSBvc3RyZWFtICYgS2V5RGF0YTxUPjo6cHV0IChvc3RyZWFtICZzKSBjb25zdAogIHsKCiAg
IHMgPDwgIktleXdvcmQgTmFtZTogIiA8PCBuYW1lKCkgPDwgIlx0IFZhbHVlOiAiIDw8IGtleXZh
bCgpIDw8CiAgICAgIlx0IFR5cGU6ICIgPDwga2V5dHlwZSgpIDw8ICJcdCBDb21tZW50OiAiIDw8
IGNvbW1lbnQoKTsKCiAgcmV0dXJuIHM7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
ICBpbmxpbmUgY29uc3QgVCYgS2V5RGF0YTxUPjo6a2V5dmFsICgpIGNvbnN0CiAgewoKICAgIHJl
dHVybiBtX2tleXZhbDsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBpbmxpbmUgdm9p
ZCBLZXlEYXRhPFQ+OjprZXl2YWwgKGNvbnN0IFQmIHZhbHVlKQogIHsKCiAgICBtX2tleXZhbCA9
IHZhbHVlOwoKICB9CgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIEtleURhdGE8VD46Oktl
eURhdGEoY29uc3QgS2V5RGF0YTxUPiAmcmlnaHQpCgoKCiAgICAgIDpLZXl3b3JkKHJpZ2h0KSwK
ICAgICAgIG1fa2V5dmFsKHJpZ2h0Lm1fa2V5dmFsKQoKICB7CgoKICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogIEtleURhdGE8VD46OktleURhdGEgKGNvbnN0IHN0cmluZyAma2V5bmFtZSwg
VmFsdWVUeXBlIGtleXR5cGUsIGNvbnN0IFQgJnZhbHVlLCBIRFUqIHAsIGNvbnN0IHN0cmluZyAm
Y29tbWVudCkKCgoKICAgICAgIDogS2V5d29yZChrZXluYW1lLCBrZXl0eXBlLCBwLCBjb21tZW50
KSwKICAgICAgICAgbV9rZXl2YWwodmFsdWUpCgogIHsKCgogIH0KCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogIEtleURhdGE8VD46On5LZXlEYXRhKCkKICB7CgoKICB9CgoKCgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogIHZvaWQgS2V5RGF0YTxUPjo6Y29weSAoY29uc3QgS2V5d29yZCYgcmln
aHQpCiAgewoKICBLZXl3b3JkOjpjb3B5KHJpZ2h0KTsKICBjb25zdCBLZXlEYXRhPFQ+JiB0aGF0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS2V5RGF0YTxUPiY+KHJpZ2h0KTsKICBtX2tleXZhbCA9IHRo
YXQubV9rZXl2YWw7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgYm9vbCBLZXlEYXRh
PFQ+Ojpjb21wYXJlIChjb25zdCBLZXl3b3JkICZyaWdodCkgY29uc3QKICB7CgogIGlmICggIUtl
eXdvcmQ6OmNvbXBhcmUocmlnaHQpICkgcmV0dXJuIGZhbHNlOwogIGNvbnN0IEtleURhdGE8VD4m
IHRoYXQgPSBzdGF0aWNfY2FzdDxjb25zdCBLZXlEYXRhPFQ+Jj4ocmlnaHQpOwogIGlmICh0aGlz
LT5tX2tleXZhbCAhPSB0aGF0Lm1fa2V5dmFsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7
CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgS2V5d29yZCAqIEtleURhdGE8VD46OmNs
b25lICgpIGNvbnN0CiAgewoKICByZXR1cm4gbmV3IEtleURhdGE8VD4oKnRoaXMpOwoKICB9Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIHZvaWQgS2V5RGF0YTxUPjo6d3JpdGUgKCkKICB7Cgog
ICBpbnQgc3RhdHVzID0gMDsKICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBrZXlUeXBlOwogICBp
ZiAoIGZmdWt5KGZpdHNQb2ludGVyKCksa2V5VHlwZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdF9jYXN0PGNoYXIgKj4obmFtZSgpLmNfc3RyKCkpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbV9rZXl2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nh
c3Q8Y2hhciAqPihjb21tZW50KCkuY19zdHIoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZzdGF0dXMpICkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogIH0KCgoKCgp9CiMgMTUgIktl
eXdvcmRULmgiIDIKIyAxICJIRFUuaCIgMQojIDI2ICJIRFUuaCIKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL21hcCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystdjMvbWFwIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMSAzCiMgNjAgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbWFwLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdHJlZS5oIiAxIDMKIyA4NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDg2
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA4NyAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDEgMwojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMK
IyA4OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7Cgp0eXBlZGVmIGJvb2wgX1JiX3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVf
Q29sb3JfdHlwZSBfU19yYl90cmVlX3JlZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90
eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7
CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOwogIF9C
YXNlX3B0ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3Jp
Z2h0OwoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAg
ICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVy
biBfX3g7CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkK
ICB7CiAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0Owog
ICAgcmV0dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1Ji
X3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3Ry
ZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwogIF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsK
CgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl
X2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgX0Jhc2VfcHRyIF9NX25vZGU7CgogIHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAg
ICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkgewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+
X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01f
bm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRy
IF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5f
TV9yaWdodCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9w
YXJlbnQ7CiAgICAgIH0KICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAg
ICBfTV9ub2RlID0gX195OwogICAgfQogIH0KCiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAg
IGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25v
ZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9u
b2RlLT5fTV9yaWdodDsKICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAg
ICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01f
cmlnaHQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0g
X195OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9w
YXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9N
X25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAg
X01fbm9kZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFz
cyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1Ji
X3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPgogICAgaXRlcmF0b3I7CiAg
dHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W
YWx1ZSo+CiAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWx1ZSwgX1JlZiwgX1B0cj4KICAgIF9TZWxmOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFs
dWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9pdGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRl
cmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9kZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJh
dG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAg
cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSkt
Pl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgp
OyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190
bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAg
X1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBf
U2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2Rl
Y3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFs
dWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
X1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9f
eSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRv
cjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFs
dWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl
X2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNv
bnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBf
UHRyPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3ku
X01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W
YWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0
b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2Rl
ICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVl
Kj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194
Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9s
ZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3Qp
CnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9y
aWdodCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01f
bGVmdC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7
CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9
PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0g
X195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9N
X2xlZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90
cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9i
YXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7
CiAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAw
KQogICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0g
X194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195Owog
IGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3Bh
cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQg
PSBfX3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoK
aW5saW5lIHZvaWQKX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBf
UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9yZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y
ID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICBpZiAoX195ICYm
IF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBf
U19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3Bh
cmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFy
ZW50LT5fTV9yaWdodCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAg
ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9f
eC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5f
TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBf
UmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsK
ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0g
X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgaWYgKF9feSAmJiBfX3kt
Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9
IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+
X01fbGVmdCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3Ry
ZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAg
fQogICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKfQoKaW5s
aW5lIF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJf
dHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJl
ZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3Ry
ZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSog
X195ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgIF9feCA9
IF9feS0+X01fcmlnaHQ7CiAgZWxzZQogICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAg
X194ID0gX195LT5fTV9sZWZ0OwogICAgZWxzZSB7CiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7
CiAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xl
ZnQ7CiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsK
ICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195OwogICAgX195LT5fTV9sZWZ0ID0gX196
LT5fTV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJl
bnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3kt
Pl9NX3BhcmVudDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIF9f
eS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJl
bnQgPSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICBpZiAo
X19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9w
YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f
eTsKICAgIGVsc2UKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195
LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9y
LCBfX3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9fejsKCiAgfQogIGVsc2UgewogICAgX194X3Bh
cmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3kt
Pl9NX3BhcmVudDsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAg
ICBlbHNlCiAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAg
X196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9N
X3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAg
IGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFy
ZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6
Ol9TX21pbmltdW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChf
X3otPl9NX2xlZnQgPT0gMCkKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoK
ICAgICAgZWxzZQogICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t
YXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7
CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX2JsYWNrKSkKICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0
KSB7CiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdo
dDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg
ICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xl
ZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3Jp
Z2h0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAg
ICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg
ICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQt
Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAg
X194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fcmln
aHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+
X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3Ry
ZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVu
dC0+X01fcmlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3Bh
cmVudC0+X01fY29sb3I7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01f
Y29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQo
X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBl
bHNlIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl
ZnQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVu
dC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9y
aWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01f
bGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAg
ICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAg
ICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0
LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAg
IF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fbGVm
dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5f
TV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg
ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVu
dC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFy
ZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9f
eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAg
IGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4g
X195Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX1Nf
aW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRl
cigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9k
ZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVfYWxsb2Nh
dG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBfUmJfdHJlZV9ub2RlPF9U
cD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRl
KDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsg
X01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0Fs
bG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBf
UmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkg
e30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0Fs
bG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N
X2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZv
aWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBl
OjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1JiX3RyZWVfYWxs
b2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoK
ICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9f
YSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgfl9SYl90cmVlX2Jhc2UoKSB7IF9N
X3B1dF9ub2RlKF9NX2hlYWRlcik7IH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xh
c3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4gPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3Rl
ZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNl
PF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3Ry
ZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1Ymxp
YzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVf
bm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgog
IHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAg
dXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCnByb3RlY3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVh
dGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9
IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1
ZV9maWVsZCwgX194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3RtcCk7
IHRocm93OyB9OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9u
b2RlKF9MaW5rX3R5cGUgX194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVhdGVf
bm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01f
Y29sb3I7CiAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgdm9pZCBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3Ap
CiAgewogICAgZGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICBfTV9wdXRfbm9kZShf
X3ApOwogIH0KCnByb3RlY3RlZDoKICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICBfQ29tcGFy
ZSBfTV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYgX01fcm9vdCgpIGNvbnN0CiAgICB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9CiAgX0xpbmtfdHlwZSYg
X01fbGVmdG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXIt
Pl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdAogICAgeyByZXR1
cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190
eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf
X3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUg
X194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRp
YyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUo
X0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3Rh
dGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlP
ZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9y
KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xv
cik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsg
cmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBl
JiBfU19yaWdodChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt
Pl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9f
eCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGlj
IHJlZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKChfTGlua190
eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShf
QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190
eXBlKF9feCkpKTt9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfQmFzZV9wdHIgX194
KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7
IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgIHsg
cmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsg
fQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyBy
ZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9
CgpwdWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVu
Y2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVf
dHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICAgICAgY29uc3RfaXRl
cmF0b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl
dmVyc2VfaXRlcmF0b3I7Cgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9wdHIg
X194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUg
X01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJhc2Uo
X0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgoKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9j
YXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9N
X2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21w
KQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5
X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3Ry
ZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAg
IDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQog
ICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQogICAgOiBfQmFz
ZShfX3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv
bXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDAp
CiAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgIGVsc2UgewogICAgICBfU19jb2xvcihf
TV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194
Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0o
X01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7
CiAgICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgfQogIH5fUmJf
dHJlZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7Cgpwcml2YXRlOgogIHZvaWQgX01fZW1w
dHlfaW5pdGlhbGl6ZSgpIHsKICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3Jl
ZDsKCiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAg
IF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0KCnB1YmxpYzoKCiAgX0NvbXBhcmUga2V5
X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N
X2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRl
cjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
cihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAg
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01f
bm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9u
b2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90
eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01f
aGVhZGVyKTsKICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7
CiAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgfQoK
cHVibGljOgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVf
dHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX194
KTsKCiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0
aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCk7CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVy
YXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBj
b25zdCBrZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVf
Y291bnQgIT0gMCkgewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9z
dCgpID0gX01faGVhZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9NX2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfQoKcHVibGlj
OgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9y
IGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwog
IGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0Owog
IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp
OwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoKCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNv
bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m
VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bApvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9
PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9f
eS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0
IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIHZvaWQKc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gp
IHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICBfTV9rZXlfY29tcGFy
ZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApIHsKICAg
ICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAg
X01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9v
dCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9z
dCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h
eGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50
OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIg
X195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl
KSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgX0xpbmtfdHlw
ZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgIF9NX2tl
eV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBf
TV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgIGlmIChfX3kg
PT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0
KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAg
X01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxzZSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9k
ZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsKICAgIGlmIChfX3kgPT0gX01fcmlnaHRt
b3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogIH0KICBfU19wYXJlbnQoX196KSA9
IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVl
X3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsKICArK19NX25vZGVfY291bnQ7
CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xp
bmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAg
d2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFy
ZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQo
X194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9f
dik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl
cmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5r
X3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJv
b2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAg
IF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkp
OwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAg
aXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9
PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194
LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAgICAtLV9fajsKICBpZiAoX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVy
biBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAg
cmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5
T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksIF9WYWws
IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2Rl
ID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgIF9N
X2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3YpOwoKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192
KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsK
ICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1
ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3Yp
OwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxz
ZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwog
ICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFs
dWUoKShfX3YpKQogICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg
X1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9y
ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01f
bm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJl
dHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBj
b25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+
X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAhX01fa2V5X2NvbXBhcmUo
X1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f
dik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlm
IChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7CiAgICBpZiAoIV9NX2tleV9jb21w
YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJl
dHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJl
dHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUg
PSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9N
X2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9f
dikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAg
IHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgZWxzZQog
ICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9N
X25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFz
cyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVl
PF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0
LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxj
bGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjpp
bnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KSB7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0
b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0KICAgIChfTGlua190eXBlKSBfUmJf
dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5f
TV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
aGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2RlKF9feSk7CiAgLS1fTV9ub2RlX2NvdW50
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjplcmFzZShj
b25zdCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9y
YW5nZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19w
LnNlY29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIHJldHVybiBf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBf
S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQpfUmJfdHJlZTxfS2V5LF9WYWwsX0tv
VixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBl
IF9fcCkKewoKICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9w
LT5fTV9wYXJlbnQgPSBfX3A7CgogIHRyeSB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAg
X190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3Ag
PSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsK
ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01f
bGVmdCA9IF9feTsKICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9N
X3JpZ2h0KQogICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f
eSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0K
ICBjYXRjaCguLi4pIHsgX01fZXJhc2UoX190b3ApOyB0aHJvdzsgfTsKCiAgcmV0dXJuIF9fdG9w
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xp
bmtfdHlwZSBfX3gpCnsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfTV9lcmFzZShfU19yaWdo
dChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgZGVzdHJveV9u
b2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQp7
CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICBjbGVhcigp
OwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGNvbnN0IF9L
ZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9
IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAh
PSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195
ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgcmV0dXJuIChfX2ogPT0g
ZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAg
IGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz
cyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5
cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OmNvbnN0X2l0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3gg
IT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAg
X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3Jp
Z2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7
CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19q
Ll9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKewog
IHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShf
X2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5
cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGls
ZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQog
ICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0g
X1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3Qg
X0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf
dHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5
X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVm
dChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gY29u
c3RfaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9f
eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChf
X3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAg
ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBf
U19yaWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29uc3Qg
X0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf
dHlwZSBfX3ggPSBfTV9yb290KCk7CgogICB3aGlsZSAoX194ICE9IDApCiAgICAgaWYgKF9NX2tl
eV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19s
ZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVy
biBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5n
ZShjb25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxv
d2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21w
YXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3Ry
ZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2Uo
Y29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29u
c3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykpOwp9CgppbmxpbmUgaW50Cl9fYmxh
Y2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSog
X19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgaW50IF9fc3VtID0g
MDsKICBkbyB7CiAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKQog
ICAgICArK19fc3VtOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIGJyZWFrOwogICAg
X19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgfSB3aGlsZSAoMSk7CiAgcmV0dXJuIF9fc3Vt
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBj
b25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAg
cmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9N
X2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBf
TV9oZWFkZXI7CgogIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01f
cm9vdCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVu
ZCgpOyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQuX01f
bm9kZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgX0xpbmtfdHlwZSBf
X1IgPSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf
cmVkKQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB8
fAogICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSkKICAg
ICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXko
X194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9N
X2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxz
ZTsKCiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkp
ICE9IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoX01fbGVmdG1vc3QoKSAh
PSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBm
YWxzZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhp
bXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CgogIHJldHVybiB0cnVlOwp9CgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xh
c3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+
CnN0cnVjdCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFs
dWUsIF9Db21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwg
X0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICByYl90cmVlKGNvbnN0IF9D
b21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7fQoK
ICB+cmJfdHJlZSgpIHt9Cn07Cgp9CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
bWFwLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAxIDMK
IyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tYXAuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX21hcC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg
ICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xh
c3MgbWFwCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5
IGtleV90eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRf
dHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJp
ZW5kIGNsYXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAg
ICBfQ29tcGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChf
X2MpIHt9CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5m
aXJzdCwgX195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVl
PGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1
ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVy
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVy
YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpz
aXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUo
KSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9f
Y29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7
IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkg
eyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwg
X1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAg
IHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJl
dHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25z
dCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7
IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJl
dHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg
eyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBj
b25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy
biBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
c2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhf
c2l6ZSgpOyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0
ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBr
ZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFs
dWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAgdm9p
ZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9f
eC5fTV90KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0
b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7
IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJz
dCwgX19sYXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90
LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf
X3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19m
aXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7
IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQo
X194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0KICBpdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJf
Ym91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0
ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBl
cl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9Cgog
IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp
IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRl
cmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRl
IDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
ICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjUgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
bXVsdGltYXAuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr
LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211bHRpbWFwLmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxs
b2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpbWFwCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90
eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5
LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xh
c3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFs
dWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21w
YXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJh
dG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0
IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpw
cml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAg
ICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9S
ZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf
cmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZl
cnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoK
CiAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAg
ZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X01fdChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
CiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNl
cnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19j
b21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQogIG11bHRp
bWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90
KF9feC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBv
cGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7
CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21w
YXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVf
Y29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90Lmtl
eV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
X01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf
TV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQog
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBi
b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoK
CgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
aW5zZXJ0X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwo
X19wb3NpdGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBl
cmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KICBz
aXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShf
X3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg
ICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3Qu
Y2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1
cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQog
IGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5s
b3dlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9
CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90
LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwog
IH0KICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm
IF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25z
dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0Ex
PiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBf
QTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0Mx
LCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1Qx
LCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t
YXAuaCIgMiAzCiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvbWFwIiAyIDMKIyAyNyAiSERVLmgi
IDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzQgIkhEVS5o
IiAyCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRl
L2crKy12My9saXN0IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0Lmgi
IDEgMwojIDYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMwoKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYyICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9saXN0LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0
LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY1
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2xpc3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0
X2NoZWNrLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UgewogIF9MaXN0X25v
ZGVfYmFzZSogX01fbmV4dDsKICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2Ug
ewogIF9UcCBfTV9kYXRhOwp9OwoKc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UgewogIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
CiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoKICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0
X25vZGVfYmFzZSogX194KSA6IF9NX25vZGUoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9yX2Jhc2Uo
KSB7fQoKICB2b2lkIF9NX2luY3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CiAg
dm9pZCBfTV9kZWNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsgfQoKICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9M
aXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX25vZGUgIT0gX194
Ll9NX25vZGU7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBf
UHRyPgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZSB7
CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBl
ZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJh
dG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBf
UmVmIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgX0xpc3Rf
aXRlcmF0b3IoX05vZGUqIF9feCkgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkge30KICBfTGlz
dF9pdGVyYXRvcigpIHt9CiAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBf
TGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKChfTm9kZSopIF9NX25vZGUpLT5fTV9kYXRhOyB9CiAgcG9pbnRl
ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYm
IG9wZXJhdG9yKysoKSB7CiAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
dGhpcy0+X01faW5jcigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3It
LSgpIHsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9k
ZWNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDE0NyAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9saXN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
ciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9MaXN0X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX05vZGVfYWxsb2NhdG9yOyB9CgogIF9MaXN0X2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfTm9kZV9hbGxvY2F0b3IoX19hKSB7fQoK
cHJvdGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICB7IHJldHVybiBf
Tm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9MaXN0X25v
ZGU8X1RwPiogX19wKQogICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9
Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9B
bGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsKICBf
TGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+CmNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSB7fQoKcHJvdGVjdGVk
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxv
Y2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgX0xpc3Rfbm9kZTxf
VHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQog
IHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRl
YWxsb2NhdGUoX19wLCAxKTsgfQoKcHJvdGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fbm9k
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0xpc3RfYmFz
ZQogIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNz
Pgp7CnB1YmxpYzoKICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAg
ICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9u
b2RlOwogIH0KICB+X0xpc3RfYmFzZSgpIHsKICAgIGNsZWFyKCk7CiAgICBfTV9wdXRfbm9kZShf
TV9ub2RlKTsKICB9CgogIHZvaWQgY2xlYXIoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZvaWQKX0xpc3RfYmFzZTxfVHAsX0FsbG9jPjo6Y2xlYXIoKQp7CiAgX0xp
c3Rfbm9kZTxfVHA+KiBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfTV9ub2RlLT5fTV9uZXh0
OwogIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAgICBfTGlzdF9ub2RlPF9UcD4qIF9fdG1w
ID0gX19jdXI7CiAgICBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfX2N1ci0+X01fbmV4dDsK
ICAgIF9EZXN0cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICBfTV9wdXRfbm9kZShfX3RtcCk7CiAg
fQogIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9u
b2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1Rw
PiA+CmNsYXNzIGxpc3QgOiBwcm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0
eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRl
ZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw
ZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25v
ZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVk
ZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlz
dF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy
YXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICB1c2luZyBfQmFzZTo6
X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoKcHJvdGVjdGVkOgogIF9O
b2RlKiBfTV9jcmVhdGVfbm9kZShjb25zdCBfVHAmIF9feCkKICB7CiAgICBfTm9kZSogX19wID0g
X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwg
X194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJvdzsgfTsK
ICAgIHJldHVybiBfX3A7CiAgfQoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoKQogIHsKICAgIF9O
b2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5IHsKICAgICAgX0NvbnN0cnVjdCgmX19w
LT5fTV9kYXRhKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJv
dzsgfTsKICAgIHJldHVybiBfX3A7CiAgfQoKcHVibGljOgogIGV4cGxpY2l0IGxpc3QoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7fQoK
ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9
CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiAoX05vZGUqKShfTV9ub2Rl
LT5fTV9uZXh0KTsgfQoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9ub2RlOyB9CiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZTsgfQoKICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAg
ICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUtPl9NX25l
eHQgPT0gX01fbm9kZTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgewogICAgc2l6ZV90eXBl
IF9fcmVzdWx0ID0gMDsKICAgIGRpc3RhbmNlKGJlZ2luKCksIGVuZCgpLCBfX3Jlc3VsdCk7CiAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
KCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsg
fQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKigtLWVuZCgpKTsgfQogIGNvbnN0X3JlZmVy
ZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICB2b2lkIHN3YXAobGlz
dDxfVHAsIF9BbGxvYz4mIF9feCkgeyBzdGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUpOyB9
CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkg
ewogICAgX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194KTsKICAgIF9fdG1wLT5fTV9u
ZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9u
Ll9NX25vZGUtPl9NX3ByZXY7CiAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25l
eHQgPSBfX3RtcDsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikg
eyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoKCiAgdGVtcGxhdGU8Y2xhc3Mg
X0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRl
Z2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90
eXBlKSB7CiAgICBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBf
X3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5z
ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50
ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRf
ZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQog
ICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CiAgdm9pZCBfTV9maWxsX2lu
c2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2
b2lkIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0K
ICB2b2lkIHB1c2hfZnJvbnQoKSB7aW5zZXJ0KGJlZ2luKCkpO30KICB2b2lkIHB1c2hfYmFjayhj
b25zdCBfVHAmIF9feCkgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KICB2b2lkIHB1c2hfYmFjaygp
IHtpbnNlcnQoZW5kKCkpO30KCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+
X01fbmV4dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9N
X25vZGUtPl9NX3ByZXY7CiAgICBfTm9kZSogX19uID0gKF9Ob2RlKikgX19wb3NpdGlvbi5fTV9u
b2RlOwogICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25leHRfbm9kZTsKICAgIF9fbmV4dF9u
b2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICBfRGVzdHJveSgmX19uLT5fTV9kYXRhKTsK
ICAgIF9NX3B1dF9ub2RlKF9fbik7CiAgICByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgX19uZXh0
X25vZGUpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7IF9CYXNlOjpjbGVhcigpOyB9CgogIHZvaWQgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCByZXNpemUoc2l6
ZV90eXBlIF9fbmV3X3NpemUpIHsgdGhpcy0+cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoK
ICB2b2lkIHBvcF9mcm9udCgpIHsgZXJhc2UoYmVnaW4oKSk7IH0KICB2b2lkIHBvcF9iYWNrKCkg
ewogICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgIGVyYXNlKC0tX190bXApOwogIH0KICBs
aXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7
IGluc2VydChiZWdpbigpLCBfX24sIF9fdmFsdWUpOyB9CiAgZXhwbGljaXQgbGlzdChzaXplX3R5
cGUgX19uKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBpbnNlcnQoYmVnaW4o
KSwgX19uLCBfVHAoKSk7IH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
bGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jh
c2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICBsaXN0
KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3Io
KSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CgogIH5s
aXN0KCkgeyB9CgogIGxpc3Q8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAs
IF9BbGxvYz4mIF9feCk7CgpwdWJsaWM6CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CgogIHZv
aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2Vy
IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigo
c2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSk7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCB0cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9u
LCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX3Bvc2l0aW9u
ICE9IF9fbGFzdCkgewoKICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBf
X3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4
dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9N
X25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9
IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5f
TV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fbGFzdC5fTV9ub2RlLT5f
TV9wcmV2ID0gX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX2ZpcnN0Ll9NX25vZGUt
Pl9NX3ByZXYgPSBfX3RtcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgdm9pZCBzcGxpY2UoaXRlcmF0
b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KSB7CiAgICBpZiAoIV9feC5lbXB0eSgpKQogICAgICB0
aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICB9CiAg
dm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9faSkgewog
ICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgKytfX2o7CiAgICBpZiAoX19wb3NpdGlvbiA9PSBf
X2kgfHwgX19wb3NpdGlvbiA9PSBfX2opIHJldHVybjsKICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9z
aXRpb24sIF9faSwgX19qKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwg
bGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KQogICAgICB0aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBf
X2xhc3QpOwogIH0KICB2b2lkIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpOwogIHZvaWQgdW5p
cXVlKCk7CiAgdm9pZCBtZXJnZShsaXN0JiBfX3gpOwogIHZvaWQgcmV2ZXJzZSgpOwogIHZvaWQg
c29ydCgpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gdm9pZCByZW1vdmVfaWYoX1By
ZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+IHZvaWQgdW5pcXVl
KF9CaW5hcnlQcmVkaWNhdGUpOwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5n
PiB2b2lkIG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1N0cmljdFdlYWtPcmRlcmluZz4gdm9pZCBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv
cj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X195KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAg
Y29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICBjb25zdF9pdGVyYXRvciBfX2kx
ID0gX194LmJlZ2luKCk7CiAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogIHdo
aWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikg
ewogICAgKytfX2kxOwogICAgKytfX2kyOwogIH0KICByZXR1cm4gX19pMSA9PSBfX2VuZDEgJiYg
X19pMiA9PSBfX2VuZDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGxp
c3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9U
cCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIHZvaWQKc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwg
X0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwg
X0FsbG9jPjo6X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl
cnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9feCkKewogIGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICBpbnNlcnQo
X19wb3NpdGlvbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0
eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6ZXJh
c2UoaXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkKICAgIGVyYXNlKF9fZmlyc3QrKyk7CiAgcmV0dXJuIF9fbGFzdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+
OjpyZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KQp7CiAgaXRlcmF0
b3IgX19pID0gYmVnaW4oKTsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGZvciAoIDsgX19pICE9
IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICA7CiAgaWYg
KF9fbGVuID09IF9fbmV3X3NpemUpCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKICBlbHNlCiAgICBp
bnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0PF9UcCwgX0FsbG9jPiYgbGlzdDxfVHAsIF9BbGxvYz46
Om9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0g
Jl9feCkgewogICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgaXRlcmF0b3IgX19s
YXN0MSA9IGVuZCgpOwogICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsK
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAqX19maXJzdDErKyA9
ICpfX2ZpcnN0MisrOwogICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgIGVyYXNlKF9f
Zmlyc3QxLCBfX2xhc3QxKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3Qy
LCBfX2xhc3QyKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVf
dHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwog
IGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikKICAgICpfX2kg
PSBfX3ZhbDsKICBpZiAoX19uID4gMCkKICAgIGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAg
ZWxzZQogICAgZXJhc2UoX19pLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQKbGlzdDxfVHAsIF9BbGxv
Yz46Ol9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBl
bmQoKTsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICpfX2ZpcnN0MSA9ICpfX2ZpcnN0MjsKICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICBl
bHNlCiAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZShj
b25zdCBfVHAmIF9fdmFsdWUpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVy
YXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0
ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46
OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xh
c3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBf
X25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgq
X19maXJzdCA9PSAqX19uZXh0KQogICAgICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBf
X2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlz
dDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBp
dGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4o
KTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2Zlcihf
X2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAg
ICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIp
IHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKaW5saW5lIHZvaWQgX19M
aXN0X2Jhc2VfcmV2ZXJzZShfTGlzdF9ub2RlX2Jhc2UqIF9fcCkKewogIF9MaXN0X25vZGVfYmFz
ZSogX190bXAgPSBfX3A7CiAgZG8gewogICAgc3RkOjpzd2FwKF9fdG1wLT5fTV9uZXh0LCBfX3Rt
cC0+X01fcHJldik7CiAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2OwogIH0gd2hpbGUgKF9fdG1w
ICE9IF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZv
aWQgbGlzdDxfVHAsIF9BbGxvYz46OnJldmVyc2UoKQp7CiAgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0
aGlzLT5fTV9ub2RlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KCkKewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf
TV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlz
dDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2
NF07CiAgICBpbnQgX19maWxsID0gMDsKICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2Nh
cnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9f
aSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHko
KSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgIF9fY2Fy
cnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19j
b3VudGVyW19faV0pOwogICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9Cgog
ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgX19jb3VudGVy
W19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwt
MV0pOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8
Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVk
aWNhdGUgX19wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3Ig
X19sYXN0ID0gZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRv
ciBfX25leHQgPSBfX2ZpcnN0OwogICAgKytfX25leHQ7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgZXJhc2UoX19maXJzdCk7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFz
dCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9f
YmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICBlcmFzZShfX25leHQpOwogICAg
ZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJp
Y3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1RwLCBf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3Jk
ZXJpbmcgX19jb21wKQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9y
IF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0
ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2Zlcihf
X2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAg
ICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIp
IHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K
dm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6c29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkK
ewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQt
Pl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAg
IGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICBpbnQgX19maWxsID0gMDsKICAg
IHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCks
ICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9f
ZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ld
Lm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltf
X2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAg
IGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAx
OyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50
ZXJbX19pLTFdLCBfX2NvbXApOwogICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICB9Cn0K
Cn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDMyICIv
dXNyL2luY2x1ZGUvZysrLXYzL2xpc3QiIDIgMwojIDM1ICJIRFUuaCIgMgoKIyAxICJLZXl3b3Jk
LmgiIDEKIyAzNyAiSERVLmgiIDIKCiMgMSAiTmV3S2V5d29yZC5oIiAxCiMgMzIgIk5ld0tleXdv
cmQuaCIKIyAxICJLZXl3b3JkQ3JlYXRvci5oIiAxCiMgMjYgIktleXdvcmRDcmVhdG9yLmgiCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMSAzCiMgMjcgIktleXdvcmRDcmVhdG9y
LmgiIDIKCgoKCgoKIyAxICJLZXlEYXRhLmgiIDEKIyAzNCAiS2V5d29yZENyZWF0b3IuaCIgMgoK
IyAxICJGaXRzRXJyb3IuaCIgMQojIDM2ICJLZXl3b3JkQ3JlYXRvci5oIiAyCgpuYW1lc3BhY2Ug
Q0NmaXRzIHsKICBjbGFzcyBIRFU7Cgp9CiMgNDkgIktleXdvcmRDcmVhdG9yLmgiCm5hbWVzcGFj
ZSBDQ2ZpdHMgewojIDY3ICJLZXl3b3JkQ3JlYXRvci5oIgogIGNsYXNzIEtleXdvcmRDcmVhdG9y
CiAgewoKCgogICAgcHVibGljOgoKCiAgICAgICAgS2V5d29yZENyZWF0b3IgKEhEVSogcCk7CgoK
ICAgICAgICB2aXJ0dWFsIH5LZXl3b3JkQ3JlYXRvcigpOwoKCgoKICAgICAgICB2aXJ0dWFsIEtl
eXdvcmQqIE1ha2VLZXl3b3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYg
Y29tbWVudCA9IHN0cmluZygiIikpID0gMDsKCgogICAgICAgIHN0YXRpYyBLZXl3b3JkKiBnZXRL
ZXl3b3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUsIEhEVSogcCk7CgoKCiAgICAgICAgdmlydHVh
bCB2b2lkIHJlc2V0ICgpOwoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkKiBjcmVhdGVLZXl3b3Jk
IChjb25zdCBzdHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYgY29tbWVudCA9IHN0cmluZygi
IikpOwoKCgoKICAgICAgICBzdGF0aWMgS2V5d29yZCogZ2V0S2V5d29yZCAoY29uc3Qgc3RyaW5n
JiBrZXlOYW1lLCBWYWx1ZVR5cGUga2V5VHlwZSwgSERVKiBwKTsKCgoKCgogICAgcHJvdGVjdGVk
OgoKCgoKICAgICAgICBIRFUqIGZvckhEVSAoKTsKCgoKCgogICAgcHJpdmF0ZToKCiAgICAgICAg
S2V5d29yZENyZWF0b3IoY29uc3QgS2V5d29yZENyZWF0b3IgJnJpZ2h0KTsKCgogICAgICAgIEtl
eXdvcmRDcmVhdG9yICYgb3BlcmF0b3I9KGNvbnN0IEtleXdvcmRDcmVhdG9yICZyaWdodCk7CgoK
CgoKICAgIHByaXZhdGU6CgoKCgogICAgICAgIEtleXdvcmQgKm1fa2V5d29yZDsKCgoKCgoKICAg
ICAgICBIRFUqIG1fZm9ySERVOwoKCgoKCgogIH07CiMgMTU0ICJLZXl3b3JkQ3JlYXRvci5oIgog
IGlubGluZSB2b2lkIEtleXdvcmRDcmVhdG9yOjpyZXNldCAoKQogIHsKICAgIG1fa2V5d29yZD0w
OwoKCgoKICB9CgoKCiAgaW5saW5lIEhEVSogS2V5d29yZENyZWF0b3I6OmZvckhEVSAoKQogIHsK
CiAgICByZXR1cm4gbV9mb3JIRFU7CgogIH0KCn0KIyAzMyAiTmV3S2V5d29yZC5oIiAyCgojIDEg
IktleURhdGEuaCIgMQojIDM1ICJOZXdLZXl3b3JkLmgiIDIKCiMgMSAiRklUU1V0aWwuaCIgMQoj
IDM3ICJOZXdLZXl3b3JkLmgiIDIKCgoKCgoKCm5hbWVzcGFjZSBDQ2ZpdHMgewojIDYxICJOZXdL
ZXl3b3JkLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgTmV3S2V5d29yZCA6IHB1
YmxpYyBLZXl3b3JkQ3JlYXRvcgogIHsKCgoKICAgIHB1YmxpYzoKCgoKICAgICAgICBOZXdLZXl3
b3JkIChIRFUqIHAsIFQgdmFsdWUpOwoKCiAgICAgICAgdmlydHVhbCB+TmV3S2V5d29yZCgpOwoK
CgoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkKiBNYWtlS2V5d29yZCAoY29uc3Qgc3RyaW5nJiBr
ZXlOYW1lLCBjb25zdCBzdHJpbmcmIGtleUNvbW1lbnQgPSBzdHJpbmcoIiIpKTsKCgoKCiAgICAg
ICAgY29uc3QgVCBrZXlEYXRhICgpIGNvbnN0OwogICAgICAgIHZvaWQga2V5RGF0YSAoVCB2YWx1
ZSk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRlOgoKICAgICAgICBOZXdLZXl3
b3JkKCk7CgogICAgICAgIE5ld0tleXdvcmQoY29uc3QgTmV3S2V5d29yZDwgVCA+ICZyaWdodCk7
CgoKICAgICAgICBOZXdLZXl3b3JkPCBUID4gJiBvcGVyYXRvcj0oY29uc3QgTmV3S2V5d29yZDwg
VCA+ICZyaWdodCk7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVCBtX2tleURhdGE7CgoK
CgoKCiAgfTsKIyAxMzAgIk5ld0tleXdvcmQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBp
bmxpbmUgY29uc3QgVCBOZXdLZXl3b3JkPFQ+OjprZXlEYXRhICgpIGNvbnN0CiAgewoKICAgIHJl
dHVybiBtX2tleURhdGE7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lIHZv
aWQgTmV3S2V5d29yZDxUPjo6a2V5RGF0YSAoVCB2YWx1ZSkKICB7CgogICAgbV9rZXlEYXRhID0g
dmFsdWU7CgogIH0KCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgTmV3S2V5d29yZDxUPjo6
TmV3S2V5d29yZCAoSERVKiBwLCBUIHZhbHVlKQoKICAgICAgOiBLZXl3b3JkQ3JlYXRvcihwKSwg
bV9rZXlEYXRhKHZhbHVlKQoKCgogIHsKCgogIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
IE5ld0tleXdvcmQ8VD46On5OZXdLZXl3b3JkKCkKICB7CgoKICB9CgoKCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogIEtleXdvcmQqIE5ld0tleXdvcmQ8VD46Ok1ha2VLZXl3b3JkIChjb25zdCBz
dHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYga2V5Q29tbWVudCkKICB7CgogIEZJVFNVdGls
OjpNYXRjaFR5cGU8VD4ga2V5VHlwZTsKICByZXR1cm4gbmV3IEtleURhdGE8VD4oa2V5TmFtZSxr
ZXlUeXBlKCksbV9rZXlEYXRhLGZvckhEVSgpLGtleUNvbW1lbnQpOwoKICB9CgoKCgoKfQojIDM5
ICJIRFUuaCIgMgoKIyAxICJGaXRzRXJyb3IuaCIgMQojIDQxICJIRFUuaCIgMgoKIyAxICJGSVRT
VXRpbC5oIiAxCiMgNDMgIkhEVS5oIiAyCgpuYW1lc3BhY2UgQ0NmaXRzIHsKICBjbGFzcyBGSVRT
OwogIGNsYXNzIEZJVFNCYXNlOwoKfQoKCgoKCnVzaW5nIHN0ZDo6dmFsYXJyYXk7CgoKCm5hbWVz
cGFjZSBDQ2ZpdHMgewojIDQyNCAiSERVLmgiCiAgY2xhc3MgSERVCiAgewoKCgogICAgcHVibGlj
OgojIDQzOCAiSERVLmgiCiAgICAgIGNsYXNzIEludmFsaWRJbWFnZURhdGFUeXBlIDogcHVibGlj
IEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBJbnZh
bGlkSW1hZ2VEYXRhVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IHRydWUp
OwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgog
ICAgICB9OwojIDQ1OCAiSERVLmgiCiAgICAgIGNsYXNzIEludmFsaWRFeHRlbnNpb25UeXBlIDog
cHVibGljIEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAg
ICBJbnZhbGlkRXh0ZW5zaW9uVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9
IHRydWUpOwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2
YXRlOgogICAgICB9OwojIDQ3OCAiSERVLmgiCiAgICAgIGNsYXNzIE5vU3VjaEtleXdvcmQgOiBw
dWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAg
IE5vU3VjaEtleXdvcmQgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQgPSB0cnVlKTsK
CiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAg
ICAgfTsKIyA0OTggIkhEVS5oIgogICAgICBjbGFzcyBOb051bGxWYWx1ZSA6IHB1YmxpYyBGaXRz
RXhjZXB0aW9uCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKICAgICAgICAgICAgTm9OdWxsVmFs
dWUgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCiAgICAgICAgcHJv
dGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKCgogICAg
ICAgIEhEVShjb25zdCBIRFUgJnJpZ2h0KTsKCgogICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBIRFUgJnJpZ2h0KSBjb25zdDsKCiAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhEVSAm
cmlnaHQpIGNvbnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIEhEVSAqIGNsb25lIChGSVRTQmFzZSog
cCkgY29uc3QgPSAwOwoKCiAgICAgICAgZml0c2ZpbGUqIGZpdHNQb2ludGVyICgpIGNvbnN0OwoK
CgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZVRoaXNDdXJyZW50ICgpIGNvbnN0OwoKCiAg
ICAgICAgc3RkOjptYXA8c3RyaW5nLCBLZXl3b3JkKj4ga2V5V29yZCAoKTsKCgogICAgICAgIEtl
eXdvcmQmIGtleVdvcmQgKGNvbnN0IHN0cmluZyYga2V5TmFtZSk7CgoKICAgICAgICBjb25zdCBz
dHJpbmcmIGdldEhpc3RvcnkgKCk7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGdldENvbW1lbnRz
ICgpOwoKCiAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBzLCBj
b25zdCBDQ2ZpdHM6OkhEVSYgcmlnaHQpOwoKCgoKCiAgICAgICAgdm9pZCB3cml0ZUhpc3Rvcnkg
KGNvbnN0IHN0cmluZyYgaGlzdG9yeSA9ICJHZW5lcmljIEhpc3RvcnkgU3RyaW5nIik7CgoKCgoK
ICAgICAgICB2b2lkIHdyaXRlQ29tbWVudCAoY29uc3Qgc3RyaW5nJiBjb21tZW50ID0gIkdlbmVy
aWMgQ29tbWVudCIpOwoKCgogICAgICAgIHZvaWQgd3JpdGVEYXRlICgpOwoKCiAgICAgICAgRklU
U0Jhc2UqIHBhcmVudCAoKSBjb25zdDsKCgogICAgICAgIHZvaWQgcmVhZEFsbEtleXMgKCk7CgoK
ICAgICAgICBsb25nIGF4ZXMgKCkgY29uc3Q7CgoKICAgICAgICBsb25nIGF4aXMgKHNpemVfdCBp
bmRleCkgY29uc3Q7CgoKICAgICAgICB2b2lkIGluZGV4IChpbnQgdmFsdWUpOwoKCiAgICAgICAg
dm9pZCBkZWxldGVLZXkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb29tZWQpOwoKCgoKICAgICAgICBp
bnQgaW5kZXggKCkgY29uc3Q7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGhpc3RvcnkgKCkgY29u
c3Q7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGNvbW1lbnQgKCkgY29uc3Q7CgoKCgoKCiAgICAg
ICAgY29uc3Qgc3RkOjptYXA8c3RyaW5nLEtleXdvcmQqPiYga2V5V29yZCAoKSBjb25zdDsKICAg
ICAgICBjb25zdCBLZXl3b3JkJiBrZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleW5hbWUpIGNvbnN0
OwogICAgICAgIHZvaWQgc2V0S2V5V29yZCAoY29uc3Qgc3RyaW5nJiBrZXluYW1lLCBLZXl3b3Jk
JiB2YWx1ZSk7CgogICAgcHVibGljOgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAg
ICBLZXl3b3JkJiBhZGRLZXkoY29uc3Qgc3RyaW5nJiBuYW1lLCBUIHZhbCwgY29uc3Qgc3RyaW5n
JiBjb21tZW50KTsKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICB2b2lkIHJlYWRL
ZXkoY29uc3Qgc3RyaW5nJiBrZXlOYW1lLCBUJiB2YWwpOwoKICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiAgICAgIHZvaWQgcmVhZEtleXMoc3RkOjp2ZWN0b3I8c3RyaW5nPiYga2V5TmFtZXMs
IHN0ZDo6dmVjdG9yPFQ+JiB2YWxzKTsKCgogICAgcHJvdGVjdGVkOgoKCgoKICAgICAgICBIRFUg
KEZJVFNCYXNlKiBwID0gMCk7CgoKICAgICAgICBIRFUgKEZJVFNCYXNlKiBwLCBpbnQgYml0cGl4
LCBpbnQgbmF4aXMsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBheGVzKTsKCgogICAgICAgIHZp
cnR1YWwgfkhEVSgpOwoKCgoKICAgICAgICBLZXl3b3JkJiByZWFkS2V5d29yZCAoY29uc3Qgc3Ry
aW5nICZrZXluYW1lKTsKCgogICAgICAgIHZvaWQgcmVhZEtleXdvcmRzIChzdGQ6Omxpc3Q8c3Ry
aW5nPiYga2V5bmFtZXMpOwoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0IChvc3RyZWFt
ICZzKSBjb25zdCA9IDA7CgoKCgogICAgICAgIGxvbmcmIG5heGlzICgpOwogICAgICAgIHZvaWQg
bmF4aXMgKGNvbnN0IGxvbmcmIHZhbHVlKTsKCgogICAgICAgIGxvbmcgYml0cGl4ICgpIGNvbnN0
OwogICAgICAgIHZvaWQgYml0cGl4IChsb25nIHZhbHVlKTsKCgoKCiAgICAgICAgYm9vbCYgYW55
bnVsICgpOwogICAgICAgIHZvaWQgYW55bnVsIChjb25zdCBib29sJiB2YWx1ZSk7CgoKCgoKICAg
ICAgICBGSVRTQmFzZSomIHBhcmVudCAoKTsKCgoKCiAgICAgICAgc3RkOjp2ZWN0b3I8bG9uZz4m
IG5heGVzICgpOwogICAgICAgIGxvbmcmIG5heGVzIChzaXplX3QgaW5kZXgpOwogICAgICAgIHZv
aWQgbmF4ZXMgKHNpemVfdCBpbmRleCwgY29uc3QgbG9uZyYgdmFsdWUpOwoKCgoKCiAgICBwcml2
YXRlOgoKCgoKCiAgICAgICAgdm9pZCBjbGVhcktleXMgKCk7CgoKICAgICAgICB2aXJ0dWFsIHZv
aWQgaW5pdFJlYWQgKCkgPSAwOwoKCiAgICAgICAgdm9pZCByZWFkSGR1SW5mbyAoKTsKCgogICAg
ICAgIEtleXdvcmQqIGFkZEtleXdvcmQgKEtleXdvcmQqIG5ld0tleSk7CgoKICAgICAgICB2aXJ0
dWFsIGJvb2wgY29tcGFyZSAoY29uc3QgSERVICZyaWdodCkgY29uc3Q7CgoKCgogICAgICAgIHZv
aWQgY29weUtleXMgKGNvbnN0IEhEVSYgcmlnaHQpOwoKCiAgICAgICAgc3RyaW5nIGdldE5hbWVk
TGluZXMgKGNvbnN0IHN0cmluZyYgbmFtZSk7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAg
bG9uZyBtX25heGlzOwoKCgogICAgICAgIGxvbmcgbV9iaXRwaXg7CgoKCiAgICAgICAgaW50IG1f
aW5kZXg7CgoKCiAgICAgICAgYm9vbCBtX2FueW51bDsKCgoKICAgICAgICBzdHJpbmcgbV9oaXN0
b3J5OwoKCgogICAgICAgIHN0cmluZyBtX2NvbW1lbnQ7CgoKCgoKCiAgICAgICAgc3RkOjptYXA8
c3RyaW5nLEtleXdvcmQqPiBtX2tleVdvcmQ7CgoKCgogICAgICAgIEZJVFNCYXNlKiBtX3BhcmVu
dDsKCgoKCiAgICAgICAgc3RkOjp2ZWN0b3I8bG9uZz4gbV9uYXhlczsKCgoKCiAgICAgIGZyaWVu
ZCBmaXRzZmlsZSogS2V5d29yZDo6Zml0c1BvaW50ZXIoKSBjb25zdDsKICAgICAgZnJpZW5kIEtl
eXdvcmQqIEtleXdvcmRDcmVhdG9yOjpnZXRLZXl3b3JkKGNvbnN0IHN0cmluZyYga2V5bmFtZSwg
SERVKiBwKTsKICAgICAgZnJpZW5kIEtleXdvcmQqIEtleXdvcmRDcmVhdG9yOjpnZXRLZXl3b3Jk
KGNvbnN0IHN0cmluZyYga2V5bmFtZSwgVmFsdWVUeXBlIGtleVR5cGUsIEhEVSogcCk7CgogIH07
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBLZXl3b3JkJiBIRFU6OmFkZEtleShjb25zdCBz
dHJpbmcmIG5hbWUsIFQgdmFsdWUsIGNvbnN0IHN0cmluZyYgY29tbWVudCkKICB7CiAgICAgICAg
ICAgICAgTmV3S2V5d29yZDxUPiBrZXlDcmVhdG9yKHRoaXMsdmFsdWUpOwogICAgICAgICAgICAg
IEtleXdvcmQmIG5ld0tleSA9ICooYWRkS2V5d29yZChrZXlDcmVhdG9yLmNyZWF0ZUtleXdvcmQo
bmFtZSxjb21tZW50KSkpOwogICAgICAgICAgICAgIHJldHVybiBuZXdLZXk7CiAgfQoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIEhEVTo6cmVhZEtleShjb25zdCBzdHJpbmcmIGtleU5h
bWUsIFQmIHZhbCkKICB7CiAgICAgICAgICBLZXl3b3JkJiBrZXkgPSByZWFkS2V5d29yZChrZXlO
YW1lKTsKICAgICAgICAgIGtleS52YWx1ZSh2YWwpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgdm9pZCBIRFU6OnJlYWRLZXlzKHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtleU5hbWVzLCBz
dGQ6OnZlY3RvcjxUPiYgdmFscykKICB7CiAgICAgICAgICBzaXplX3QgblJlYWQgPSBrZXlOYW1l
cy5zaXplKCk7CgogICAgICAgICAgc3RkOjpsaXN0PHN0cmluZz4gdmFsS2V5czsKICAgICAgICAg
IHN0ZDo6bGlzdDxUPiB2YWxMaXN0OwogICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
UmVhZDsgaSsrKSB2YWxLZXlzLnB1c2hfYmFjayhrZXlOYW1lc1tpXSk7CgoKICAgICAgICAgIHJl
YWRLZXl3b3Jkcyh2YWxLZXlzKTsKCgoKCiAgICAgICAgICBUIGN1cnJlbnQ7CiAgICAgICAgICBz
dGQ6Omxpc3Q8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSB2YWxLZXlzLmJlZ2luKCk7CiAgICAgICAg
ICB3aGlsZSAoaXQgIT0gdmFsS2V5cy5lbmQoKSkKICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgdHJ5CiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2tl
eVdvcmRbKml0XS0+dmFsdWUoY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
TGlzdC5wdXNoX2JhY2soY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsK
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjYXRjaCAoIEtleXdvcmQ6Oldy
b25nS2V5d29yZFZhbHVlVHlwZSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdCA9IHZhbEtleXMuZXJhc2UoaXQpOwogICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICB9CgogICAgICAgICAga2V5TmFtZXMuZXJhc2Uoa2V5TmFtZXMuYmVnaW4oKSxrZXlO
YW1lcy5lbmQoKSk7CgogICAgICAgICAgaWYgKCF2YWxMaXN0LmVtcHR5KCkpCiAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIGlmICh2YWxMaXN0LnNpemUoKSAhPSB2YWxzLnNpemUoKSkgdmFs
cy5yZXNpemUodmFsTGlzdC5zaXplKCkpOwoKICAgICAgICAgICAgICAgICAgc2l6ZV90IGk9MDsK
ICAgICAgICAgICAgICAgICAgZm9yIChzdGQ6Omxpc3Q8VD46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9
IHZhbExpc3QuYmVnaW4oKTsgaXQxICE9IHZhbExpc3QuZW5kKCk7ICsraXQxLCsraSkKICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaV0gPSAqaXQxOwog
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpsaXN0PHN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0MT0gdmFsS2V5cy5iZWdpbigpOyBpdDEgIT0gdmFsS2V5cy5l
bmQoKTsgKytpdDEpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBrZXlOYW1lcy5wdXNoX2JhY2soKml0MSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
IH0KCiAgfQojIDgzNiAiSERVLmgiCiAgaW5saW5lIHN0ZDo6bWFwPHN0cmluZywgS2V5d29yZCo+
IEhEVTo6a2V5V29yZCAoKQogIHsKCgoKICAgIHJldHVybiBtX2tleVdvcmQ7CiAgfQoKICBpbmxp
bmUgS2V5d29yZCYgSERVOjprZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUpCiAgewoKICBz
dGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+OjppdGVyYXRvciBrZXkgPSBtX2tleVdvcmQuZmluZChr
ZXlOYW1lKTsKICBpZiAoa2V5ID09IG1fa2V5V29yZC5lbmQoKSkgdGhyb3cgSERVOjpOb1N1Y2hL
ZXl3b3JkKGtleU5hbWUpOwogIHJldHVybiAqKCgqa2V5KS5zZWNvbmQpOwoKICB9CgogIGlubGlu
ZSBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSYgcywgY29uc3QgQ0NmaXRzOjpIRFUmIHJp
Z2h0KQogIHsKCiAgICAgcmV0dXJuIHJpZ2h0LnB1dChzKTsKCiAgfQoKICBpbmxpbmUgbG9uZyBI
RFU6OmF4ZXMgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9uYXhpczsKICB9CgogIGlubGlu
ZSBsb25nIEhEVTo6YXhpcyAoc2l6ZV90IGluZGV4KSBjb25zdAogIHsKCgoKICAgIHJldHVybiBt
X25heGVzW2luZGV4XTsKICB9CgogIGlubGluZSB2b2lkIEhEVTo6aW5kZXggKGludCB2YWx1ZSkK
ICB7CgoKCiAgICBtX2luZGV4ID0gdmFsdWU7CiAgfQoKCgogIGlubGluZSBsb25nJiBIRFU6Om5h
eGlzICgpCiAgewoKICAgIHJldHVybiBtX25heGlzOwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6
bmF4aXMgKGNvbnN0IGxvbmcmIHZhbHVlKQogIHsKCiAgICBtX25heGlzID0gdmFsdWU7CgogIH0K
CiAgaW5saW5lIGxvbmcgSERVOjpiaXRwaXggKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fYml0
cGl4OwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6Yml0cGl4IChsb25nIHZhbHVlKQogIHsKCiAg
ICBtX2JpdHBpeCA9IHZhbHVlOwoKICB9CgogIGlubGluZSBpbnQgSERVOjppbmRleCAoKSBjb25z
dAogIHsKCiAgICByZXR1cm4gbV9pbmRleDsKCiAgfQoKICBpbmxpbmUgYm9vbCYgSERVOjphbnlu
dWwgKCkKICB7CgogICAgcmV0dXJuIG1fYW55bnVsOwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6
YW55bnVsIChjb25zdCBib29sJiB2YWx1ZSkKICB7CgogICAgbV9hbnludWwgPSB2YWx1ZTsKCiAg
fQoKICBpbmxpbmUgY29uc3Qgc3RyaW5nJiBIRFU6Omhpc3RvcnkgKCkgY29uc3QKICB7CgogICAg
cmV0dXJuIG1faGlzdG9yeTsKCiAgfQoKICBpbmxpbmUgY29uc3Qgc3RyaW5nJiBIRFU6OmNvbW1l
bnQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fY29tbWVudDsKCiAgfQoKCgogIGlubGluZSBj
b25zdCBzdGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+JiBIRFU6OmtleVdvcmQgKCkgY29uc3QKICB7
CgogICAgcmV0dXJuIG1fa2V5V29yZDsKCiAgfQoKICBpbmxpbmUgY29uc3QgS2V5d29yZCYgSERV
OjprZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleW5hbWUpIGNvbnN0CiAgewoKICBzdGQ6Om1hcDxz
dHJpbmcsS2V5d29yZCo+Ojpjb25zdF9pdGVyYXRvciBrZXkgPSBtX2tleVdvcmQuZmluZChrZXlu
YW1lKTsKICBpZiAoa2V5ID09IG1fa2V5V29yZC5lbmQoKSkgdGhyb3cgSERVOjpOb1N1Y2hLZXl3
b3JkKGtleW5hbWUpOwogIHJldHVybiAqKCgqa2V5KS5zZWNvbmQpOwoKICB9CgogIGlubGluZSB2
b2lkIEhEVTo6c2V0S2V5V29yZCAoY29uc3Qgc3RyaW5nJiBrZXluYW1lLCBLZXl3b3JkJiB2YWx1
ZSkKICB7CgogIG1fa2V5V29yZFtrZXluYW1lXSA9ICZ2YWx1ZTsKCiAgfQoKICBpbmxpbmUgRklU
U0Jhc2UqJiBIRFU6OnBhcmVudCAoKQogIHsKCiAgICByZXR1cm4gbV9wYXJlbnQ7CgogIH0KCiAg
aW5saW5lIHN0ZDo6dmVjdG9yPGxvbmc+JiBIRFU6Om5heGVzICgpCiAgewoKICAgIHJldHVybiBt
X25heGVzOwoKICB9CgogIGlubGluZSBsb25nJiBIRFU6Om5heGVzIChzaXplX3QgaW5kZXgpCiAg
ewoKICAgIHJldHVybiBtX25heGVzW2luZGV4XTsKCiAgfQoKICBpbmxpbmUgdm9pZCBIRFU6Om5h
eGVzIChzaXplX3QgaW5kZXgsIGNvbnN0IGxvbmcmIHZhbHVlKQogIHsKCiAgICBtX25heGVzW2lu
ZGV4XSA9IHZhbHVlOwoKICB9Cgp9CiMgMTYgIktleXdvcmRULmgiIDIKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyAxNyAiS2V5d29yZFQuaCIgMgoKCgoKCgpuYW1lc3Bh
Y2UgQ0NmaXRzCnsKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgICAgVCYgS2V5
d29yZDo6dmFsdWUgKFQmIHZhbCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkK
ICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLZXlEYXRh
PFQ+JiB0aGlzS2V5ID0gZHluYW1pY19jYXN0PGNvbnN0IEtleURhdGE8VD4mPigqdGhpcyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXNLZXkua2V5dmFsKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBjYXRjaCAoc3RkOjpiYWRfY2FzdCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgS2V5d29yZDo6V3JvbmdLZXl3b3JkVmFsdWVUeXBlKG5hbWUoKSk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CiAgICAgICAgdm9pZCBLZXl3b3JkOjpzZXRWYWx1ZSAoY29uc3QgVCYgbmV3VmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIEtleURhdGE8VD4mIHRoaXNLZXkgPSBkeW5hbWljX2Nhc3Q8S2V5RGF0YTxUPiY+
KCp0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0tleS5rZXl2YWwobmV3VmFsdWUp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKHN0ZDo6YmFkX2Nhc3Qp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEtleXdvcmQ6
Oldyb25nS2V5d29yZFZhbHVlVHlwZShuYW1lKCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICB9Cgp9CiMgMzAgIkV4dEhEVS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJp
bmciIDEgMwojIDM0ICJFeHRIRFUuaCIgMgoKIyAxICJIRFUuaCIgMQojIDM2ICJFeHRIRFUuaCIg
MgoKIyAxICJGaXRzRXJyb3IuaCIgMQojIDM4ICJFeHRIRFUuaCIgMgoKbmFtZXNwYWNlIENDZml0
cyB7CiAgY2xhc3MgQ29sdW1uOwoKfQojIDUxICJFeHRIRFUuaCIKbmFtZXNwYWNlIENDZml0cyB7
CiMgNDM1ICJFeHRIRFUuaCIKICBjbGFzcyBFeHRIRFUgOiBwdWJsaWMgSERVCiAgewoKCgogICAg
cHVibGljOgoKCgoKCgoKICAgICAgY2xhc3MgV3JvbmdFeHRlbnNpb25UeXBlIDogcHVibGljIEZp
dHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBXcm9uZ0V4
dGVuc2lvblR5cGUgKGNvbnN0IHN0cmluZyYgbXNnLCBib29sIHNpbGVudCA9IHRydWUpOwoKICAg
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgogICAgICB9
OwoKCiAgICAgICAgRXh0SERVKGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKCiAgICAgICAgdmlydHVh
bCB+RXh0SERVKCk7CgoKICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXh0SERV
ICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj4oY29uc3QgRXh0SERVICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKICAgICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0
KTsKCiAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHRIRFUgJmxlZnQsY29u
c3QgRXh0SERVICZyaWdodCk7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkIHJlYWRIZHVOYW1lIChj
b25zdCBmaXRzZmlsZSogZnB0ciwgaW50IGhkdUluZGV4LCBzdHJpbmcmIGhkdU5hbWUsIGludCYg
aGR1VmVyc2lvbik7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhZERhdGEgKGJvb2wgcmVhZEZs
YWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYga2V5cyA9IHN0ZDo6dmVjdG9y
PHN0cmluZz4oKSkgPSAwOwoKCiAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lICgpIGNvbnN0OwoK
CiAgICAgICAgdmlydHVhbCBIRFUgKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNvbnN0ID0gMDsKCgoK
CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VUaGlzQ3VycmVudCAoKSBjb25zdDsKCgogICAg
ICAgIHZpcnR1YWwgQ29sdW1uJiBjb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sTmFtZSkgY29uc3Q7
CgoKICAgICAgICB2aXJ0dWFsIENvbHVtbiYgY29sdW1uIChpbnQgY29sSW5kZXgpIGNvbnN0OwoK
CiAgICAgICAgdmlydHVhbCBsb25nIHJvd3MgKCkgY29uc3Q7CgoKICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRkQ29sdW1uIChWYWx1ZVR5cGUgdHlwZSwgY29uc3Qgc3RyaW5nJiBjb2x1bW5OYW1lLCBs
b25nIHJlcGVhdFdpZHRoLCBjb25zdCBzdHJpbmcmIGNvbFVuaXQgPSBzdHJpbmcoIiIpLCBsb25n
IGRlY2ltYWxzID0gLTEsIHNpemVfdCBjb2x1bW5OdW1iZXIgPSAwKTsKCgogICAgICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sdW1uTmFtZSk7CgoKCgogICAg
ICAgIGludCB2ZXJzaW9uICgpIGNvbnN0OwogICAgICAgIHZvaWQgdmVyc2lvbiAoaW50IHZhbHVl
KTsKCgoKCgogICAgICAgIHN0ZDo6c3RyaW5nJiBuYW1lICgpOwoKICAgIHB1YmxpYzoKIyA1MzQg
IkV4dEhEVS5oIgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KICAgICAgdm9pZCB3cml0ZShj
b25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgbG9uZyBu
RWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0
YSwKICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpOwoKCiAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBTPgogICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgbG9uZyBuRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJh
eTxTPiYgZGF0YSwKICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpOwoKICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2ZWN0b3I8bG9u
Zz4mIGZpcnN0LAogICAgICAgICAgICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8Uz4mIGRhdGEpOwoKCiAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTPgogICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgbG9uZyBuRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxh
cnJheTxTPiYgZGF0YSk7CgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KICAgICAgdm9pZCB3
cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSk7CgoKCgoKCiAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlKSA7
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJy
YXk8Uz4mIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBmaXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgUyogbnVs
bFZhbHVlKSA7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0
ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8bG9uZz4mIGZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBuRWxlbWVudHMs
CiAgICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpIDsKCiAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFM+CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYgaW1hZ2UsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBzdHJpZGUpIDsK
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJh
eTxTPiYgaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBuRWxlbWVudHMpIDsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+
CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYgaW1hZ2UsCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIG5FbGVtZW50cykgOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg
dm9pZCByZWFkIChzdGQ6OnZhbGFycmF5PFM+JiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSwKICAgICAgICAgICAgICAgICAg
ICAgIFMqIG51bGxWYWx1ZSkgOwoKCgogICAgcHJvdGVjdGVkOgoKCgogICAgICAgIEV4dEhEVSAo
RklUU0Jhc2UqIHAgPSAwLCBIZHVUeXBlIHh0eXBlID0gQW55SGR1LCBjb25zdCBzdHJpbmcgJmhk
dU5hbWUgPSBzdHJpbmcoIiIpLCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKICAgICAgICBFeHRIRFUg
KEZJVFNCYXNlKiBwLCBIZHVUeXBlIHh0eXBlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGludCBi
aXRwaXgsIGludCBuYXhpcywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGF4ZXMsIGludCB2ZXJz
aW9uID0gMSk7CgoKCgoKICAgICAgICBFeHRIRFUgKEZJVFNCYXNlKiBwLCBIZHVUeXBlIHh0eXBl
LCBpbnQgbnVtYmVyKTsKCgoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0IChvc3RyZWFt
ICZzKSBjb25zdCA9IDA7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY29sdW1uIChjb25zdCBzdHJp
bmcmIGNvbG5hbWUsIENvbHVtbiogdmFsdWUpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNr
RXh0ZW5zaW9uVHlwZSAoKSBjb25zdDsKCgogICAgICAgIGludCBnZXRWZXJzaW9uICgpOwoKCgoK
ICAgICAgICBsb25nIHBjb3VudCAoKSBjb25zdDsKICAgICAgICB2b2lkIHBjb3VudCAobG9uZyB2
YWx1ZSk7CgoKICAgICAgICBsb25nIGdjb3VudCAoKSBjb25zdDsKICAgICAgICB2b2lkIGdjb3Vu
dCAobG9uZyB2YWx1ZSk7CgoKICAgICAgICBIZHVUeXBlIHh0ZW5zaW9uICgpIGNvbnN0OwogICAg
ICAgIHZvaWQgeHRlbnNpb24gKEhkdVR5cGUgdmFsdWUpOwoKCgoKCiAgICBwcml2YXRlOgoKCgog
ICAgICAgIHZpcnR1YWwgdm9pZCBpbml0UmVhZCAoKSA9IDA7CgoKICAgICAgICB2b2lkIGNoZWNr
WHRlbnNpb24gKCk7CgoKCgogICAgICAgIHN0YXRpYyBjb25zdCBzdHJpbmcmIG1pc3NIRFUgKCk7
CiAgICAgICAgc3RhdGljIHZvaWQgc2V0TWlzc0hEVSAoY29uc3Qgc3RyaW5nJiB2YWx1ZSk7CgoK
CgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgbG9uZyBtX3Bjb3VudDsKCgoKICAgICAgICBsb25n
IG1fZ2NvdW50OwoKCgogICAgICAgIGludCBtX3ZlcnNpb247CgoKCiAgICAgICAgSGR1VHlwZSBt
X3h0ZW5zaW9uOwoKCgogICAgICAgIHN0YXRpYyBzdHJpbmcgc19taXNzSERVOwoKCgoKCgogICAg
ICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKCgoKCgoKICB9OwojIDcxOSAiRXh0SERVLmgiCiAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0
KQogIHsKCiAgICAgICAgaWYgKGxlZnQubV9uYW1lIDwgcmlnaHQubV9uYW1lKSByZXR1cm4gdHJ1
ZTsKICAgICAgICBpZiAobGVmdC5tX25hbWUgPiByaWdodC5tX25hbWUpIHJldHVybiBmYWxzZTsK
ICAgICAgICBpZiAobGVmdC5tX25hbWUgPT0gcmlnaHQubV9uYW1lKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIGlmIChsZWZ0Lm1fdmVyc2lvbiA8IHJpZ2h0Lm1fdmVyc2lvbikgcmV0dXJuIHRy
dWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgRXh0SERVICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpCiAgewoKICAg
ICByZXR1cm4gIW9wZXJhdG9yPD0obGVmdCxyaWdodCk7CgogIH0KCiAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBFeHRIRFUgJmxlZnQsY29uc3QgRXh0SERVICZyaWdodCkKICB7CgogICAg
ICAgIGlmIChsZWZ0Lm1fbmFtZSA8PSByaWdodC5tX25hbWUpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgaWYgKGxlZnQubV92ZXJzaW9uIDw9IHJpZ2h0Lm1fdmVyc2lvbikgcmV0dXJuIHRydWU7
CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0KQogIHsKCiAgICBy
ZXR1cm4gIW9wZXJhdG9yPChsZWZ0LHJpZ2h0KTsKCiAgfQoKCgoKICBpbmxpbmUgY29uc3Qgc3Ry
aW5nJiBFeHRIRFU6Om5hbWUgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9uYW1lOwogIH0K
CgoKICBpbmxpbmUgbG9uZyBFeHRIRFU6OnBjb3VudCAoKSBjb25zdAogIHsKCiAgICByZXR1cm4g
bV9wY291bnQ7CgogIH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjpwY291bnQgKGxvbmcgdmFsdWUp
CiAgewoKICAgIG1fcGNvdW50ID0gdmFsdWU7CgogIH0KCiAgaW5saW5lIGxvbmcgRXh0SERVOjpn
Y291bnQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZ2NvdW50OwoKICB9CgogIGlubGluZSB2
b2lkIEV4dEhEVTo6Z2NvdW50IChsb25nIHZhbHVlKQogIHsKCiAgICBtX2djb3VudCA9IHZhbHVl
OwoKICB9CgogIGlubGluZSBpbnQgRXh0SERVOjp2ZXJzaW9uICgpIGNvbnN0CiAgewoKICAgIHJl
dHVybiBtX3ZlcnNpb247CgogIH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjp2ZXJzaW9uIChpbnQg
dmFsdWUpCiAgewoKICAgIG1fdmVyc2lvbiA9IHZhbHVlOwoKICB9CgogIGlubGluZSBIZHVUeXBl
IEV4dEhEVTo6eHRlbnNpb24gKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1feHRlbnNpb247Cgog
IH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjp4dGVuc2lvbiAoSGR1VHlwZSB2YWx1ZSkKICB7Cgog
ICAgbV94dGVuc2lvbiA9IHZhbHVlOwoKICB9CgogIGlubGluZSBjb25zdCBzdHJpbmcmIEV4dEhE
VTo6bWlzc0hEVSAoKQogIHsKCiAgICByZXR1cm4gc19taXNzSERVOwoKICB9CgogIGlubGluZSB2
b2lkIEV4dEhEVTo6c2V0TWlzc0hEVSAoY29uc3Qgc3RyaW5nJiB2YWx1ZSkKICB7CgogICAgc19t
aXNzSERVID0gdmFsdWU7CgogIH0KCgoKICBpbmxpbmUgc3RkOjpzdHJpbmcmIEV4dEhEVTo6bmFt
ZSAoKQogIHsKCiAgICByZXR1cm4gbV9uYW1lOwoKICB9Cgp9CiMgNDMgIlRhYmxlLmgiIDIKCiMg
MSAiRml0c0Vycm9yLmgiIDEKIyA0NSAiVGFibGUuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAg
Y2xhc3MgQ29sdW1uOwoKfQojIDU4ICJUYWJsZS5oIgpuYW1lc3BhY2UgQ0NmaXRzIHsKIyAzMTUg
IlRhYmxlLmgiCiAgY2xhc3MgVGFibGUgOiBwdWJsaWMgRXh0SERVCiAgewoKCgogICAgcHVibGlj
OgojIDMyOSAiVGFibGUuaCIKICAgICAgY2xhc3MgTm9TdWNoQ29sdW1uIDogcHVibGljIEZpdHNF
eGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBOb1N1Y2hDb2x1
bW4gKGNvbnN0IHN0cmluZyYgbmFtZSwgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCgogICAgICAgICAg
ICBOb1N1Y2hDb2x1bW4gKGludCBpbmRleCwgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCiAgICAgICAg
cHJvdGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKIyAz
NTIgIlRhYmxlLmgiCiAgICAgIGNsYXNzIEludmFsaWRDb2x1bW5TcGVjaWZpY2F0aW9uIDogcHVi
bGljIEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBJ
bnZhbGlkQ29sdW1uU3BlY2lmaWNhdGlvbiAoY29uc3Qgc3RyaW5nJiBtc2csIGJvb2wgc2lsZW50
ID0gdHJ1ZSk7CgogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAgIHBy
aXZhdGU6CiAgICAgIH07CgoKICAgICAgICBUYWJsZShjb25zdCBUYWJsZSAmcmlnaHQpOwoKCiAg
ICAgICAgdmlydHVhbCB+VGFibGUoKTsKCgoKCiAgICAgICAgY29uc3Qgc3RkOjptYXA8c3RyaW5n
LENvbHVtbio+JiBjb2x1bW4gKCkgY29uc3Q7CgoKCiAgICAgICAgdmlydHVhbCBDb2x1bW4mIGNv
bHVtbiAoY29uc3Qgc3RyaW5nJiBjb2xOYW1lKSBjb25zdDsKCgogICAgICAgIHZpcnR1YWwgQ29s
dW1uJiBjb2x1bW4gKGludCBjb2xJbmRleAogICAgICAgICkgY29uc3Q7CgoKICAgICAgICB2aXJ0
dWFsIGxvbmcgcm93cyAoKSBjb25zdDsKCgogICAgICAgIHZvaWQgdXBkYXRlUm93cyAoKTsKCgog
ICAgICAgIHZvaWQgcm93cyAobG9uZyBudW1Sb3dzKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVDb2x1bW4gKGNvbnN0IHN0cmluZyYgbmFtZSk7CgoKCiAgICAgICAgdm9pZCBpbnNlcnRS
b3dzIChsb25nIGZpcnN0LCBsb25nIG51bWJlciA9IDEpOwoKCiAgICAgICAgdm9pZCBkZWxldGVS
b3dzIChsb25nIGZpcnN0LCBsb25nIG51bWJlciA9IDEpOwoKCiAgICAgICAgdm9pZCBkZWxldGVS
b3dzIChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgcm93TGlzdCk7CgoKCgoKCiAgICAgICAgdmly
dHVhbCBzdGQ6Om1hcDxzdHJpbmcsIENvbHVtbio+JiBjb2x1bW4gKCk7CgogICAgcHVibGljOgoK
CgoKICAgIHByb3RlY3RlZDoKCgogICAgICAgIFRhYmxlIChGSVRTQmFzZSogcCwgSGR1VHlwZSB4
dHlwZSwgY29uc3Qgc3RyaW5nICZoZHVOYW1lLCBpbnQgcm93cywKICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxzdHJpbmc+JiBjb2x1bW5OYW1lLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBj
b2x1bW5GbXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVtblVuaXQgPSBzdGQ6OnZl
Y3RvcjxzdHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKCiAgICAgICAgVGFibGUgKEZJVFNC
YXNlKiBwLCBIZHVUeXBlIHh0eXBlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUgPSBzdHJpbmcoIiIp
LCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKCiAgICAgICAgVGFibGUgKEZJVFNCYXNlKiBwLCBIZHVU
eXBlIHh0eXBlLCBpbnQgbnVtYmVyKTsKCgoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0
IChvc3RyZWFtICZzKSBjb25zdDsKCgogICAgICAgIHZvaWQgY29sdW1uIChpbnQgY29sdW1uTnVt
LCBDb2x1bW4gKnZhbHVlKTsKCgogICAgICAgIHZvaWQgaW5pdCAoYm9vbCByZWFkRmxhZyA9IGZh
bHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5n
PigpKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sbmFt
ZSwgQ29sdW1uKiB2YWx1ZSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tFeHRlbnNpb25U
eXBlICgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCByZWluZGV4ICgpOwoKCgoKICAgICAgICBpbnQg
bnVtQ29scyAoKSBjb25zdDsKICAgICAgICB2b2lkIG51bUNvbHMgKGludCB2YWx1ZSk7CgoKCgoK
ICAgIHByaXZhdGU6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGluaXRSZWFkICgpOwoKCiAgICAg
ICAgdmlydHVhbCB2b2lkIHJlYWRUYWJsZUhlYWRlciAoaW50IG5jb2xzLCBzdGQ6OnZlY3Rvcjxz
dHJpbmc+JiBjb2xOYW1lLCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xGbXQsIHN0ZDo6dmVjdG9y
PHN0cmluZz4mIGNvbFVuaXQpID0gMDsKCgoKICAgICAgICB2b2lkIGNsZWFyRGF0YSAoKTsKCgog
ICAgICAgIHZvaWQgY29weURhdGEgKGNvbnN0IFRhYmxlJiByaWdodCk7CgoKCgoKICAgIHByaXZh
dGU6CgoKCiAgICAgICAgaW50IG1fbnVtQ29sczsKCgoKCgoKICAgICAgICBzdGQ6Om1hcDxzdHJp
bmcsIENvbHVtbio+IG1fY29sdW1uOwoKCgoKCgoKICAgICAgZnJpZW5kIGNsYXNzIENvbHVtbjsK
CiAgfTsKIyA1MTcgIlRhYmxlLmgiCiAgaW5saW5lIGNvbnN0IHN0ZDo6bWFwPHN0cmluZyxDb2x1
bW4qPiYgVGFibGU6OmNvbHVtbiAoKSBjb25zdAogIHsKCiAgcmV0dXJuIG1fY29sdW1uOwoKICB9
CgogIGlubGluZSBsb25nIFRhYmxlOjpyb3dzICgpIGNvbnN0CiAgewoKCgogICAgcmV0dXJuIGF4
aXMoMSk7CiAgfQoKICBpbmxpbmUgdm9pZCBUYWJsZTo6cm93cyAobG9uZyBudW1Sb3dzKQogIHsK
CgoKICAgIG5heGVzKDEpID0gbnVtUm93czsKICB9CgogIGlubGluZSB2b2lkIFRhYmxlOjpjaGVj
a0V4dGVuc2lvblR5cGUgKCkgY29uc3QKICB7CgoKCgogIH0KCgoKICBpbmxpbmUgaW50IFRhYmxl
OjpudW1Db2xzICgpIGNvbnN0CiAgewoKICAgIHJldHVybiBtX251bUNvbHM7CgogIH0KCiAgaW5s
aW5lIHZvaWQgVGFibGU6Om51bUNvbHMgKGludCB2YWx1ZSkKICB7CgogICAgbV9udW1Db2xzID0g
dmFsdWU7CgogIH0KCgoKICBpbmxpbmUgc3RkOjptYXA8c3RyaW5nLCBDb2x1bW4qPiYgVGFibGU6
OmNvbHVtbiAoKQogIHsKCiAgICByZXR1cm4gbV9jb2x1bW47CgogIH0KCn0KIyAzMSAiRklUUy5j
eHgiIDIKCiMgMSAiUEhEVS5oIiAxCiMgMzIgIlBIRFUuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysr
LXYzL3ZhbGFycmF5IiAxIDMKIyAzMyAiUEhEVS5oIiAyCgojIDEgIkhEVS5oIiAxCiMgMzUgIlBI
RFUuaCIgMgoKIyAxICJGSVRTLmgiIDEKIyAzMCAiRklUUy5oIgpleHRlcm4gIkMiCnsKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3lzL3N0YXQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5
ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyA5NiAiL3Vzci9pbmNs
dWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0
YXQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL3N0YXQuaCIgMwpzdHJ1Y3Qgc3RhdAog
IHsKICAgIF9fZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMTsKCiAg
ICBfX2lub190IHN0X2lubzsKCgoKICAgIF9fbW9kZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qg
c3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19k
ZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMjsKCiAgICBfX29mZl90
IHN0X3NpemU7CgoKCiAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXplOwoKCiAgICBfX2Jsa2NudF90
IHN0X2Jsb2NrczsKCgoKICAgIF9fdGltZV90IHN0X2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBp
bnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGlu
dCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50
IF9fdW51c2VkMzsKCiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDQ7CiAgICB1bnNpZ25l
ZCBsb25nIGludCBfX3VudXNlZDU7CgoKCiAgfTsKCgpzdHJ1Y3Qgc3RhdDY0CiAgewogICAgX19k
ZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBpbnQgX19wYWQxOwoKICAgIF9faW5vX3QgX19zdF9p
bm87CiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191
aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAg
IHVuc2lnbmVkIGludCBfX3BhZDI7CiAgICBfX29mZjY0X3Qgc3Rfc2l6ZTsKICAgIF9fYmxrc2l6
ZV90IHN0X2Jsa3NpemU7CgogICAgX19ibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgIF9fdGltZV90
IHN0X2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qg
c3RfbXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBz
dF9jdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICAgIF9faW5vNjRfdCBz
dF9pbm87CiAgfTsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDIwMCAiL3Vz
ci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19maWxlLAogICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBz
dGF0ICpfX2J1ZikgdGhyb3cgKCk7CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpl
eHRlcm4gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwpl
eHRlcm4gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX2J1ZikgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp
bGUsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKIyAyNDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgbHN0YXQ2
NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBjaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gX19tb2RlX3QgdW1hc2sgKF9fbW9kZV90IF9fbWFzaykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gX19tb2RlX3QgZ2V0dW1hc2sgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3Qg
X19tb2RlLCBfX2Rldl90IF9fZGV2KQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBta2Zp
Zm8gKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwojIDMw
NiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdCAoaW50IF9f
dmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX3hzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19seHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CiMgMzMw
ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBf
X3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKQogICAgIHRocm93
ICgpOwpleHRlcm4gaW50IF9feHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2x4c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAq
X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRf
YnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX194bWtub2QgKGludCBfX3ZlciwgX19jb25zdCBj
aGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgX19kZXZf
dCAqX19kZXYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9fY29u
c3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg
Kl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0ICgzLCBfX3BhdGgsIF9fc3Rh
dGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19w
YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYp
IHRocm93ICgpCnsKICByZXR1cm4gX19seHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoK
CmV4dGVybiBfX2lubGluZV9fIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX3N0
YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19meHN0YXQgKDMsIF9fZmQsIF9fc3RhdGJ1Zik7
Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBf
X21vZGVfdCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCBfX2Rl
dikgdGhyb3cgKCkKewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBfX21vZGUsICZfX2Rl
dik7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9f
cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0
YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feHN0YXQ2NCAoMywgX19wYXRoLCBfX3N0YXRidWYp
Owp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0NjQgKF9fY29uc3QgY2hhciAqX19wYXRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0YnVm
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fbHhzdGF0NjQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsK
fQoKCmV4dGVybiBfX2lubGluZV9fIGludCBmc3RhdDY0IChpbnQgX19mZCwgc3RydWN0IHN0YXQ2
NCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fZnhzdGF0NjQgKDMsIF9fZmQsIF9f
c3RhdGJ1Zik7Cn0KCgoKCn0KIyAzMyAiRklUUy5oIiAyCn0KCgoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL21hcCIgMSAzCiMgMzggIkZJVFMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2V4Y2VwdGlvbiIgMSAzCiMgNDAgIkZJVFMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L3N0cmluZyIgMSAzCiMgNDIgIkZJVFMuaCIgMgoKIyAxICJFeHRIRFUuaCIgMQojIDQ0ICJGSVRT
LmgiIDIKCiMgMSAiSERVQ3JlYXRvci5oIiAxCiMgMzIgIkhEVUNyZWF0b3IuaCIKIyAxICJDQ2Zp
dHMuaCIgMQojIDMzICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My92
ZWN0b3IiIDEgMwojIDM1ICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9zdHJpbmciIDEgMwojIDM3ICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My92YWxhcnJheSIgMSAzCiMgMzkgIkhEVUNyZWF0b3IuaCIgMgoKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyA0MSAiSERVQ3JlYXRvci5oIiAyCgojIDEgIkZpdHNF
cnJvci5oIiAxCiMgNDMgIkhEVUNyZWF0b3IuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAgY2xh
c3MgRklUU0Jhc2U7CiAgY2xhc3MgSERVOwogIGNsYXNzIFBIRFU7CiAgY2xhc3MgRXh0SERVOwoK
fQoKCgoKCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpuYW1lc3BhY2UgQ0NmaXRzIHsKIyA4MCAiSERV
Q3JlYXRvci5oIgogIGNsYXNzIEhEVUNyZWF0b3IKICB7CgoKCiAgICBwdWJsaWM6CgoKICAgICAg
ICBIRFVDcmVhdG9yIChGSVRTQmFzZSogcCk7CgoKICAgICAgICB+SERVQ3JlYXRvcigpOwoKCgoK
CgogICAgICAgIEhEVSAqIGdldEhkdSAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBib29sIHJlYWRE
YXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2
ZWN0b3I8c3RyaW5nPigpLCBib29sIHByaW1hcnkgPSBmYWxzZSwgaW50IHZlcnNpb24gPSAxKTsK
CgogICAgICAgIFBIRFUgKiBjcmVhdGVJbWFnZSAoaW50IGJpdHBpeCwgbG9uZyBuYXhpcywgY29u
c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzKTsKCgogICAgICAgIHZvaWQgcmVzZXQgKCk7CgoK
ICAgICAgICBIRFUqIGNyZWF0ZVRhYmxlIChjb25zdCBzdHJpbmcgJm5hbWUsIEhkdVR5cGUgeHR5
cGUsIGludCByb3dzLCBjb25zdCBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+JiBjb2xUeXBlLCBjb25z
dCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xOYW1lLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+
IGNvbEZtdCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBjb2xVbml0LCBpbnQgdmVyc2lvbik7
CgoKCgoKCiAgICAgICAgSERVICogZ2V0SGR1IChpbnQgaW5kZXggPSAwLCBib29sIHJlYWREYXRh
RmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0
b3I8c3RyaW5nPigpKTsKCgogICAgICAgIEV4dEhEVSAqIGNyZWF0ZUltYWdlIChjb25zdCBzdHJp
bmcgJm5hbWUsIGludCBiaXRwaXgsIGxvbmcgbmF4aXMsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+
JiBuYXhlcywgaW50IHZlcnNpb24pOwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCgogICAgcHJpdmF0
ZToKCgoKICAgICAgICBQSERVICogTWFrZUltYWdlIChpbnQgYnBpeCwgaW50IG5heGlzLCBjb25z
dCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpOwoKCiAgICAgICAgSERVICogTWFrZSAoY29uc3Qg
c3RyaW5nJiBoZHVOYW1lLCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry
aW5nPiAma2V5cywgYm9vbCBwcmltYXJ5LCBpbnQgdmVyc2lvbik7CgoKICAgICAgICBIRFUqIE1h
a2VUYWJsZSAoY29uc3Qgc3RyaW5nICZuYW1lLCBIZHVUeXBlIHh0eXBlLCBpbnQgcm93cywgY29u
c3Qgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry
aW5nPiYgY29sTmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29sRm10LCBjb25zdCBz
dGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xVbml0LCBpbnQgdmVyc2lvbik7CgoKICAgICAgICBIRFUg
KiBNYWtlIChpbnQgaW5kZXgsIGJvb2wgcmVhZERhdGFGbGFnLCBjb25zdCBzdGQ6OnZlY3Rvcjxz
dHJpbmc+ICZrZXlzKTsKCgogICAgICAgIEV4dEhEVSAqIE1ha2VJbWFnZSAoY29uc3Qgc3RyaW5n
ICZuYW1lLCBpbnQgYnBpeCwgbG9uZyBuYXhpcywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5h
eGVzLCBpbnQgdmVyc2lvbik7CgoKCgoKICAgICAgICBIRFUgKm1faGR1OwoKCgoKCgogICAgcHJp
dmF0ZToKCgoKCgogICAgICAgIEZJVFNCYXNlKiBtX3BhcmVudDsKCgoKCgoKICB9OwojIDE3OSAi
SERVQ3JlYXRvci5oIgogIGlubGluZSBIRFUgKiBIRFVDcmVhdG9yOjpnZXRIZHUgKGNvbnN0IHN0
cmluZyYgaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmlu
Zz4gJmtleXMsIGJvb2wgcHJpbWFyeSwgaW50IHZlcnNpb24pCiAgewoKCiAgaWYgKCBtX2hkdSA9
PSAwICkgbV9oZHUgPSBNYWtlKGhkdU5hbWUscmVhZERhdGFGbGFnLGtleXMscHJpbWFyeSx2ZXJz
aW9uKTsKICByZXR1cm4gbV9oZHU7CgogIH0KCiAgaW5saW5lIHZvaWQgSERVQ3JlYXRvcjo6cmVz
ZXQgKCkKICB7CgogIG1faGR1ID0gMDsKCiAgfQoKICBpbmxpbmUgSERVKiBIRFVDcmVhdG9yOjpj
cmVhdGVUYWJsZSAoY29uc3Qgc3RyaW5nICZuYW1lLCBIZHVUeXBlIHh0eXBlLCBpbnQgcm93cywg
Y29uc3Qgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RyaW5nPiYgY29sTmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBjb2xGbXQsIGNvbnN0
IHN0ZDo6dmVjdG9yPHN0cmluZz4gY29sVW5pdCwgaW50IHZlcnNpb24pCiAgewoKCiAgICAgICAg
aWYgKG1faGR1ID09IDApIG1faGR1ID0gTWFrZVRhYmxlKG5hbWUseHR5cGUscm93cyxjb2xUeXBl
LGNvbE5hbWUsY29sRm10LGNvbFVuaXQsdmVyc2lvbik7CiAgICAgICAgcmV0dXJuIG1faGR1OwoK
ICB9CgogIGlubGluZSBIRFUgKiBIRFVDcmVhdG9yOjpnZXRIZHUgKGludCBpbmRleCwgYm9vbCBy
ZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJmtleXMpCiAgewoKCiAgaWYg
KCBtX2hkdSA9PSAwICkgbV9oZHUgPSBNYWtlKGluZGV4LHJlYWREYXRhRmxhZyxrZXlzKTsKICBy
ZXR1cm4gbV9oZHU7CgogIH0KCn0KIyA0NiAiRklUUy5oIiAyCgojIDEgIkZpdHNFcnJvci5oIiAx
CiMgNDggIkZJVFMuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAgY2xhc3MgRklUU0Jhc2U7CiAg
Y2xhc3MgUEhEVTsKICBjbGFzcyBUYWJsZTsKCn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvbWVtb3J5IiAxIDMKIyA2MSAiRklUUy5oIiAyCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpuYW1l
c3BhY2UgQ0NmaXRzIHsKIyA2MjMgIkZJVFMuaCIKICBjbGFzcyBGSVRTCiAgewoKCgogICAgcHVi
bGljOgojIDYzNyAiRklUUy5oIgogICAgICBjbGFzcyBOb1N1Y2hIRFUgOiBwdWJsaWMgRml0c0V4
Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAgIE5vU3VjaEhEVSAo
Y29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IHRydWUpOwoKICAgICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgogICAgICB9OwojIDY1NyAiRklU
Uy5oIgogICAgICBjbGFzcyBPcGVyYXRpb25Ob3RTdXBwb3J0ZWQgOiBwdWJsaWMgRml0c0V4Y2Vw
dGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAgIE9wZXJhdGlvbk5vdFN1
cHBvcnRlZCAoY29uc3Qgc3RyaW5nJiBtc2csIGJvb2wgc2lsZW50ID0gdHJ1ZSk7CgogICAgICAg
IHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAgIHByaXZhdGU6CiAgICAgIH07CiMg
Njc3ICJGSVRTLmgiCiAgICAgIGNsYXNzIENhbnRPcGVuIDogcHVibGljIEZpdHNFeGNlcHRpb24K
ICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBDYW50T3BlbiAoY29uc3Qgc3Ry
aW5nJiBkaWFnLCBib29sIHNpbGVudCA9IGZhbHNlKTsKICAgICAgICAgICAgZXhwbGljaXQgQ2Fu
dE9wZW4oY29uc3QgQ2FudE9wZW4mKTsKCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgIHByaXZh
dGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKIyA2OTggIkZJVFMuaCIKICAgICAgc3RydWN0
IENhbnRDcmVhdGUgOiBwdWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CgoKICAgICAgICAgICAg
Q2FudENyZWF0ZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IGZhbHNlKTsKCiAg
ICAgICAgcHVibGljOgogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAg
IHByaXZhdGU6CiAgICAgIH07CiMgNzIxICJGSVRTLmgiCiAgICAgIHR5cGVkZWYgc3RkOjptdWx0
aW1hcDxzdHJpbmcsRXh0SERVKj4gRXh0TWFwOwojIDczNyAiRklUUy5oIgogICAgICB0eXBlZGVm
IEV4dE1hcDo6aXRlcmF0b3IgRXh0TWFwSXQ7CiMgNzUzICJGSVRTLmgiCiAgICAgIHR5cGVkZWYg
RXh0TWFwOjpjb25zdF9pdGVyYXRvciBFeHRNYXBDb25zdEl0OwoKCgoKCgogICAgICAgIEZJVFMg
KGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2RlIG1vZGUgPSBSZWFkLCBib29sIHJlYWREYXRhRmxh
ZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5cyA9IHN0ZDo6
dmVjdG9yPHN0cmluZz4oKSk7CgoKCgoKICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUs
IFJXbW9kZSBtb2RlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGJvb2wgcmVhZERhdGFGbGFnID0g
ZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMgPSBzdGQ6OnZlY3Rvcjxz
dHJpbmc+KCksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkgPSBzdGQ6OnZl
Y3RvcjxzdHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKCgoKICAgICAgICBGSVRTIChjb25z
dCBzdHJpbmcgJm5hbWUsIFJXbW9kZSBtb2RlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBo
ZHVOYW1lcywgYm9vbCByZWFkRGF0YUZsYWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry
aW5nPiYgcHJpbWFyeUtleSA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSk7CgoKCgogICAgICAgIEZJ
VFMgKGNvbnN0IHN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IEZJVFMmIHNvdXJjZSk7CgoKCgoKICAg
ICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUsIFJXbW9kZSBtb2RlLCBjb25zdCBzdGQ6OnZl
Y3RvcjxzdHJpbmc+JiBoZHVOYW1lcywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c3Ry
aW5nPiA+JiBoZHVLZXlzLCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZl
Y3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5cyA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwgY29uc3Qg
c3RkOjp2ZWN0b3I8aW50PiYgaGR1VmVyc2lvbnMgPSBzdGQ6OnZlY3RvcjxpbnQ+KCkpOwoKCgoK
ICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcmIG5hbWUsIGludCBiaXRwaXgsIGludCBuYXhpcywg
bG9uZyAqbmF4ZXMpOwoKCgoKCiAgICAgICAgRklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21v
ZGUgbW9kZSwgaW50IGhkdUluZGV4LCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBz
dGQ6OnZlY3RvcjxzdHJpbmc+JiBoZHVLZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpLCBjb25z
dCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5ID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigp
KTsKIyA4MDMgIkZJVFMuaCIKICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUsIFJXbW9k
ZSBtb2RlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBzZWFyY2hLZXlzLCBjb25zdCBzdGQ6
OnZlY3RvcjxzdHJpbmc+ICZzZWFyY2hWYWx1ZXMsIGJvb2wgcmVhZERhdGFGbGFnID0gZmFsc2Us
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMgPSBzdGQ6OnZlY3RvcjxzdHJpbmc+
KCksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkgPSBzdGQ6OnZlY3Rvcjxz
dHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKICAgICAgICB+RklUUygpOwoKCgoKICAgICAg
ICBzdGF0aWMgdm9pZCBjbGVhckVycm9ycyAoKTsKCgogICAgICAgIHZvaWQgZGVsZXRlRXh0ZW5z
aW9uIChjb25zdCBzdGQ6OnN0cmluZyYgZG9vbWVkLCBpbnQgdmVyc2lvbiA9IDEpOwoKCgogICAg
ICAgIHZvaWQgcmVhZCAoY29uc3Qgc3RyaW5nICZoZHVOYW1lLCBib29sIHJlYWREYXRhRmxhZyA9
IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0b3I8c3Ry
aW5nPigpLCBpbnQgdmVyc2lvbiA9IDApOwoKCgoKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0
ZDo6dmVjdG9yPHN0cmluZz4gJmhkdU5hbWVzLCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlKTsK
CgoKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJmhkdU5hbWVz
LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdHJpbmc+ID4gJmtleXMsIGJvb2wgcmVh
ZERhdGFGbGFnID0gZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGhkdVZlcnNpb25zID0g
c3RkOjp2ZWN0b3I8aW50PigpKTsKCgogICAgICAgIEZJVFMgKiBjbG9uZSAoKSBjb25zdDsKCgog
ICAgICAgIGNvbnN0IEV4dEhEVSYgZXh0ZW5zaW9uIChpbnQgaSkgY29uc3Q7CgoKICAgICAgICBF
eHRIRFUmIGV4dGVuc2lvbiAoaW50IGkpOwoKCiAgICAgICAgY29uc3QgRXh0SERVJiBleHRlbnNp
b24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24gPSAxKSBjb25zdDsKCgogICAg
ICAgIGNvbnN0IFBIRFUmIHBIRFUgKCkgY29uc3Q7CgoKICAgICAgICBQSERVJiBwSERVICgpOwoK
CiAgICAgICAgRXh0SERVJiBleHRlbnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZl
cnNpb24gPSAxKTsKCgogICAgICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVh
bSYgcywgY29uc3QgRklUUyYgcmlnaHQpOwoKCgogICAgICAgIHZvaWQgcmVhZCAoaW50IGhkdUlu
ZGV4LAoKICAgICAgICBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3Rv
cjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpKTsKCgoKICAgICAgICBUYWJs
ZSogYWRkVGFibGUgKHN0cmluZyYgaGR1TmFtZSwgaW50IHJvd3MsCiAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSA9IHN0ZDo6dmVjdG9yPFZhbHVlVHlwZT4oKSwg
Y29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29sdW1uTmFtZSA9IHN0ZDo6dmVjdG9yPHN0cmlu
Zz4oKSwKICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2x1bW5GbXQgPSBzdGQ6
OnZlY3RvcjxzdHJpbmc+KCksCiAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29s
dW1uVW5pdCA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwKICAgICAgICBIZHVUeXBlIHR5cGUgPSBC
aW5hcnlUYmwsIGludCB2ZXJzaW9uID0gMSk7CgoKCiAgICAgICAgRXh0SERVKiBhZGRJbWFnZSAo
Y29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQgYnBpeCwgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVz
LCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKCiAgICAgICAgdm9pZCBkZXN0cm95ICgpIHRocm93ICgp
OwoKCiAgICAgICAgY29uc3Qgc3RyaW5nJiBjdXJyZW50RXh0ZW5zaW9uTmFtZSAoKSBjb25zdDsK
IyA4ODcgIkZJVFMuaCIKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmlu
Zz4mIHNlYXJjaEtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJnNlYXJjaFZhbHVlcywg
Ym9vbCByZWFkRGF0YUZsYWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1
S2V5cyA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwgaW50IHZlcnNpb24gPSAxKTsKCgogICAgICAg
IGNvbnN0IHN0ZDo6bXVsdGltYXA8c3RyaW5nLEV4dEhEVSo+JiBleHRlbnNpb24gKCkgY29uc3Q7
CgoKICAgICAgICB2b2lkIHJlc2V0UG9zaXRpb24gKCk7CgoKICAgICAgICB2b2lkIGN1cnJlbnRF
eHRlbnNpb25OYW1lIChjb25zdCBzdHJpbmcmIGV4dE5hbWUpOwoKCiAgICAgICAgY29uc3Qgc3Ry
aW5nJiBuYW1lICgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCBjb3B5IChjb25zdCBIRFUmIHNvdXJj
ZSk7CgoKICAgICAgICBUYWJsZSYgZmlsdGVyIChjb25zdCBzdHJpbmcmIGV4cHJlc3Npb24sIEV4
dEhEVSYgaW5wdXRUYWJsZSwgYm9vbCBvdmVyd3JpdGUgPSB0cnVlLCBib29sIHJlYWREYXRhID0g
ZmFsc2UpOwoKCiAgICAgICAgRXh0SERVJiBjdXJyZW50RXh0ZW5zaW9uICgpOwoKCiAgICAgICAg
dm9pZCBkZWxldGVFeHRlbnNpb24gKGludCBkb29tZWQpOwoKCgoKICAgICAgICBzdGF0aWMgYm9v
bCB2ZXJib3NlTW9kZSAoKTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRWZXJib3NlTW9kZSAoYm9v
bCB2YWx1ZSk7CgogICAgcHVibGljOgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRl
OgoKICAgICAgICBGSVRTKGNvbnN0IEZJVFMgJnJpZ2h0KTsKCgogICAgICAgIEZJVFMgJiBvcGVy
YXRvcj0oY29uc3QgRklUUyAmcmlnaHQpOwoKCgoKICAgICAgICB2b2lkIHVubWFwRXh0ZW5zaW9u
IChFeHRIRFUmIGRvb21lZCk7CgoKICAgICAgICBpbnQgbmV4dFZlcnNpb25OdW1iZXIgKGNvbnN0
IHN0cmluZyYgaW5wdXROYW1lKSBjb25zdDsKCgoKCiAgICAgICAgdm9pZCByZWFkIChib29sIHJl
YWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3Rk
Ojp2ZWN0b3I8c3RyaW5nPigpKTsKCgogICAgICAgIHZvaWQgb3BlbiAoUldtb2RlIG1vZGUgPSBS
ZWFkKTsKCgoKCgoKCiAgICAgICAgYm9vbCBjcmVhdGUgKCk7CgoKCgoKCiAgICAgICAgaW50IGNs
b3NlICgpIHRocm93ICgpOwoKCiAgICAgICAgb3N0cmVhbSAmIHB1dCAob3N0cmVhbSAmcykgY29u
c3Q7CgoKICAgICAgICBmaXRzZmlsZSomIGZpdHNQb2ludGVyICgpIGNvbnN0OwoKCiAgICAgICAg
RXh0SERVJiBleHRieVZlcnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24p
IGNvbnN0OwoKCiAgICAgICAgdm9pZCBwSERVIChQSERVKiB2YWx1ZSk7CgoKICAgICAgICB2b2lk
IHJlYWRFeHRlbnNpb25zIChib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlKTsKCgogICAgICAgIEV4
dEhEVSogYWRkRXh0ZW5zaW9uIChFeHRIRFUqIGV4dCk7CgoKICAgICAgICB2b2lkIHN3YXAgKEZJ
VFMmIHJpZ2h0KTsKCgogICAgICAgIGZpdHNmaWxlKiYgZml0c1BvaW50ZXIgKCk7CgoKICAgICAg
ICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiYgZXh0ZW5zaW9uICgpOwoKCiAgICAgICAg
c3RyaW5nIG5hbWVPZlVubWFwcGVkIChpbnQgaGR1TnVtKSBjb25zdDsKCgogICAgICAgIHZvaWQg
Y2xvbmVIZWFkZXIgKGNvbnN0IEV4dEhEVSYgc291cmNlKTsKCgoKCgogICAgcHJpdmF0ZToKCgoK
ICAgICAgICBzdGF0aWMgYm9vbCBzX3ZlcmJvc2VNb2RlOwoKCgoKCgoKICAgICAgICBGSVRTQmFz
ZSogbV9GSVRTSW1wbDsKCgoKCiAgICAgIGZyaWVuZCBIRFUqIEhEVUNyZWF0b3I6Ok1ha2UgKGNv
bnN0IHN0cmluZyYgaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzLCBi
b29sIHByaW1hcnksIGludCB2ZXJzaW9uKTsKICAgICAgZnJpZW5kIEhEVSogSERVQ3JlYXRvcjo6
TWFrZSAoaW50IGluZGV4LCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry
aW5nPiAma2V5cyk7CgogICAgICBmcmllbmQgZml0c2ZpbGUqIEhEVTo6Zml0c1BvaW50ZXIoKSBj
b25zdDsKICAgICAgZnJpZW5kIHZvaWQgSERVOjptYWtlVGhpc0N1cnJlbnQoKSBjb25zdDsKICAg
ICAgZnJpZW5kIHZvaWQgRXh0SERVOjptYWtlVGhpc0N1cnJlbnQoKSBjb25zdDsKCiAgfTsKIyAx
MDQ2ICJGSVRTLmgiCiAgaW5saW5lIEV4dEhEVSYgRklUUzo6ZXh0ZW5zaW9uIChjb25zdCBzdHJp
bmcmIGhkdU5hbWUsIGludCB2ZXJzaW9uKQogIHsKCgoKICAgIHJldHVybiBleHRieVZlcnNpb24o
aGR1TmFtZSx2ZXJzaW9uKTsKICB9CgogIGlubGluZSBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0
cmVhbSYgcywgY29uc3QgRklUUyYgcmlnaHQpCiAgewoKCgogICAgcmV0dXJuIHJpZ2h0LnB1dChz
KTsKICB9CgoKCiAgaW5saW5lIGJvb2wgRklUUzo6dmVyYm9zZU1vZGUgKCkKICB7CgogICAgcmV0
dXJuIHNfdmVyYm9zZU1vZGU7CgogIH0KCiAgaW5saW5lIHZvaWQgRklUUzo6c2V0VmVyYm9zZU1v
ZGUgKGJvb2wgdmFsdWUpCiAgewoKICAgIHNfdmVyYm9zZU1vZGUgPSB2YWx1ZTsKCiAgfQoKfQoj
IDM3ICJQSERVLmgiIDIKCiMgMSAiRklUU1V0aWwuaCIgMQojIDM5ICJQSERVLmgiIDIKCm5hbWVz
cGFjZSBDQ2ZpdHMgewogIGNsYXNzIEZJVFNCYXNlOwoKfQojIDUyICJQSERVLmgiCm5hbWVzcGFj
ZSBDQ2ZpdHMgewojIDI5MiAiUEhEVS5oIgogIGNsYXNzIFBIRFUgOiBwdWJsaWMgSERVCiAgewoK
CgogICAgcHVibGljOgoKICAgICAgICB2aXJ0dWFsIH5QSERVKCk7CgoKCgoKCgogICAgICAgIHZp
cnR1YWwgdm9pZCByZWFkRGF0YSAoYm9vbCByZWFkRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZl
Y3RvcjxzdHJpbmc+JiBrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpKSA9IDA7CgoKICAgICAg
ICB2aXJ0dWFsIFBIRFUgKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNvbnN0ID0gMDsKCiAgICBwdWJs
aWM6CiMgMzI4ICJQSERVLmgiCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgICAg
dm9pZCB3cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZhbGFycmF5PFM+JiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFs
dWUpOwoKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgICAgdm9pZCB3cml0ZShs
b25nIGZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5FbGVtZW50cywKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSwKICAgICAgICAg
ICAgICAgICAgICAgICAgUyogbnVsbFZhbHVlKTsKCgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBTPgogICAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5FbGVtZW50cywKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSk7CgoKICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZhbGFycmF5PFM+JiBkYXRhKTsKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAg
ICAgICAgdm9pZCB3cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZhbGFycmF5PFM+JiBkYXRhKTsK
CgoKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJlYWQoc3RkOjp2
YWxhcnJheTxTPiYgaW1hZ2UpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg
ICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBsb25nIGZpcnN0LGxvbmcgbkVs
ZW1lbnRzKTsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJlYWQg
KHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBsb25nIGZpcnN0LGxvbmcgbkVsZW1lbnRzLCBTKiBu
dWxsVmFsdWUpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJl
YWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmly
c3QsbG9uZyBuRWxlbWVudHMpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg
ICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZlY3Rvcjxs
b25nPiYgZmlyc3QsIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUyogbnVsbFZhbHVlKTsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4K
ICAgICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZl
Y3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSkgOwoKICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYg
aW1hZ2UsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYg
c3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMqIG51bGxWYWx1ZSkgOwoK
CgoKICAgIHByb3RlY3RlZDoKCiAgICAgICAgUEhEVShjb25zdCBQSERVICZyaWdodCk7CgoKCgoK
ICAgICAgICBQSERVIChGSVRTQmFzZSogcCwgaW50IGJwaXgsIGludCBuYXhpcywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8bG9uZz4mIGF4ZXMpOwoKCgoKCiAgICAgICAgUEhEVSAoRklUU0Jhc2UqIHAgPSAw
KTsKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGluaXRSZWFkICgpOwoKCgoKICAgICAgICBib29s
IHNpbXBsZSAoKSBjb25zdDsKICAgICAgICB2b2lkIHNpbXBsZSAoYm9vbCB2YWx1ZSk7CgoKICAg
ICAgICBib29sIGV4dGVuZCAoKSBjb25zdDsKICAgICAgICB2b2lkIGV4dGVuZCAoYm9vbCB2YWx1
ZSk7CgoKCgoKICAgIHByaXZhdGU6CgoKCgogICAgcHJpdmF0ZToKCgoKICAgICAgICBib29sIG1f
c2ltcGxlOwoKCgogICAgICAgIGJvb2wgbV9leHRlbmQ7CgoKCgoKCiAgfTsKIyA0NTUgIlBIRFUu
aCIKICBpbmxpbmUgYm9vbCBQSERVOjpzaW1wbGUgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1f
c2ltcGxlOwoKICB9CgogIGlubGluZSB2b2lkIFBIRFU6OnNpbXBsZSAoYm9vbCB2YWx1ZSkKICB7
CgogICAgbV9zaW1wbGUgPSB2YWx1ZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBQSERVOjpleHRlbmQg
KCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZXh0ZW5kOwoKICB9CgogIGlubGluZSB2b2lkIFBI
RFU6OmV4dGVuZCAoYm9vbCB2YWx1ZSkKICB7CgogICAgbV9leHRlbmQgPSB2YWx1ZTsKCiAgfQoK
fQojIDMzICJGSVRTLmN4eCIgMgoKIyAxICJGSVRTQmFzZS5oIiAxCiMgMzIgIkZJVFNCYXNlLmgi
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9tYXAiIDEgMwojIDMzICJGSVRTQmFzZS5oIiAyCgoj
IDEgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIgMQojIDM1ICJGSVRTQmFzZS5o
IiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAzNyAiRklUU0Jhc2Uu
aCIgMgoKIyAxICJDQ2ZpdHMuaCIgMQojIDM5ICJGSVRTQmFzZS5oIiAyCgpuYW1lc3BhY2UgQ0Nm
aXRzIHsKICBjbGFzcyBQSERVOwogIGNsYXNzIEV4dEhEVTsKCn0KCgoKCgp1c2luZyBzdGQ6OnN0
cmluZzsKCgoKbmFtZXNwYWNlIENDZml0cyB7CiMgNjkgIkZJVFNCYXNlLmgiCiAgY2xhc3MgRklU
U0Jhc2UKICB7CgoKCiAgICBwdWJsaWM6CgogICAgICAgIEZJVFNCYXNlKGNvbnN0IEZJVFNCYXNl
ICZyaWdodCk7CgoKCiAgICAgICAgRklUU0Jhc2UgKGNvbnN0IHN0cmluZyYgZmlsZU5hbWUsIFJX
bW9kZSByd21vZGUpOwoKCiAgICAgICAgfkZJVFNCYXNlKCk7CgoKCgogICAgICAgIHZvaWQgZGVz
dHJveVByaW1hcnkgKCk7CgoKICAgICAgICB2b2lkIGRlc3Ryb3lFeHRlbnNpb25zICgpOwoKCiAg
ICAgICAgRklUU0Jhc2UqIGNsb25lICgpOwoKCgoKCiAgICAgICAgUldtb2RlIG1vZGUgKCk7CgoK
CiAgICAgICAgc3RkOjpzdHJpbmcmIGN1cnJlbnRFeHRlbnNpb25OYW1lICgpOwoKCgogICAgICAg
IHN0ZDo6c3RyaW5nJiBuYW1lICgpOwoKCgogICAgICAgIFBIRFUqJiBwSERVICgpOwoKCgogICAg
ICAgIGZpdHNmaWxlKiYgZnB0ciAoKTsKCgoKCiAgICAgICAgc3RkOjptdWx0aW1hcDxzdHJpbmcs
RXh0SERVKj4mIGV4dGVuc2lvbiAoKTsKCgoKCgogICAgcHJvdGVjdGVkOgoKCgoKICAgIHByaXZh
dGU6CgogICAgICAgIEZJVFNCYXNlICYgb3BlcmF0b3I9KGNvbnN0IEZJVFNCYXNlICZyaWdodCk7
CgoKCgoKICAgIHByaXZhdGU6CgoKCgogICAgICAgIFJXbW9kZSBtX21vZGU7CgoKCgogICAgICAg
IHN0ZDo6c3RyaW5nIG1fY3VycmVudEV4dGVuc2lvbk5hbWU7CgoKCgogICAgICAgIHN0ZDo6c3Ry
aW5nIG1fbmFtZTsKCgoKCiAgICAgICAgUEhEVSogbV9wSERVOwoKCgoKICAgICAgICBmaXRzZmls
ZSogbV9mcHRyOwoKCgoKICAgICAgICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiBtX2V4
dGVuc2lvbjsKCgoKCgoKICB9OwojIDE4NiAiRklUU0Jhc2UuaCIKICBpbmxpbmUgUldtb2RlIEZJ
VFNCYXNlOjptb2RlICgpCiAgewoKICAgIHJldHVybiBtX21vZGU7CgogIH0KCiAgaW5saW5lIHN0
ZDo6c3RyaW5nJiBGSVRTQmFzZTo6Y3VycmVudEV4dGVuc2lvbk5hbWUgKCkKICB7CgogICAgcmV0
dXJuIG1fY3VycmVudEV4dGVuc2lvbk5hbWU7CgogIH0KCiAgaW5saW5lIHN0ZDo6c3RyaW5nJiBG
SVRTQmFzZTo6bmFtZSAoKQogIHsKCiAgICByZXR1cm4gbV9uYW1lOwoKICB9CgogIGlubGluZSBQ
SERVKiYgRklUU0Jhc2U6OnBIRFUgKCkKICB7CgogICAgcmV0dXJuIG1fcEhEVTsKCiAgfQoKICBp
bmxpbmUgZml0c2ZpbGUqJiBGSVRTQmFzZTo6ZnB0ciAoKQogIHsKCiAgICByZXR1cm4gbV9mcHRy
OwoKICB9CgogIGlubGluZSBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiYgRklUU0Jhc2U6
OmV4dGVuc2lvbiAoKQogIHsKCiAgICByZXR1cm4gbV9leHRlbnNpb247CgogIH0KCn0KIyAzNSAi
RklUUy5jeHgiIDIKCiMgMSAiSERVQ3JlYXRvci5oIiAxCiMgMzcgIkZJVFMuY3h4IiAyCgojIDEg
IlByaW1hcnlIRFUuaCIgMQojIDMyICJQcmltYXJ5SERVLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My92YWxhcnJheSIgMSAzCiMgMzMgIlByaW1hcnlIRFUuaCIgMgoKIyAxICJQSERVLmgiIDEK
IyAzNSAiUHJpbWFyeUhEVS5oIiAyCgojIDEgIkhEVUNyZWF0b3IuaCIgMQojIDM3ICJQcmltYXJ5
SERVLmgiIDIKCiMgMSAiSW1hZ2UuaCIgMQojIDI5ICJJbWFnZS5oIgojIDEgIkNDZml0cy5oIiAx
CiMgMzAgIkltYWdlLmgiIDIKIyAxICJGaXRzRXJyb3IuaCIgMQojIDMxICJJbWFnZS5oIiAyCiMg
MSAiRklUU1V0aWwuaCIgMQojIDMyICJJbWFnZS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My92ZWN0b3IiIDEgMwojIDM2ICJJbWFnZS5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvZnVuY3Rpb25hbCIgMSAzCiMgMzggIkltYWdlLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My92YWxhcnJheSIgMSAzCiMgNDAgIkltYWdlLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9udW1lcmljIiAxIDMKIyA0MiAiSW1hZ2UuaCIgMgoKCgoKCgoKbmFtZXNwYWNlIENDZml0
cyB7CiMgNjQgIkltYWdlLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgSW1hZ2UK
ICB7CgoKCiAgICBwdWJsaWM6CgogICAgICAgIEltYWdlKGNvbnN0IEltYWdlPCBUID4gJnJpZ2h0
KTsKCgoKICAgICAgICBJbWFnZSAoY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW1hZ2VBcnJheSA9
IHN0ZDo6dmFsYXJyYXk8VD4oKSk7CgoKICAgICAgICB+SW1hZ2UoKTsKCgogICAgICAgIEltYWdl
PCBUID4gJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2U8IFQgPiAmcmlnaHQpOwoKCgoKCgoKICAgICAg
ICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiByZWFkSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLCBsb25n
IGZpcnN0LCBsb25nIG5FbGVtZW50cywgVCogbnVsbFZhbHVlLCBjb25zdCBzdGQ6OnZlY3Rvcjxs
b25nPiYgbmF4ZXMsIGJvb2wmIG51bGxzKTsKCgoKCgogICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJy
YXk8VD4mIHJlYWRJbWFnZSAoZml0c2ZpbGUqIGZQdHIsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+
JiBmaXJzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsIGNvbnN0
IHN0ZDo6dmVjdG9yPGxvbmc+JiBzdHJpZGUsIFQqIG51bGxWYWx1ZSwgY29uc3Qgc3RkOjp2ZWN0
b3I8bG9uZz4mIG5heGVzLCBib29sJiBudWxscyk7CgoKCgoKICAgICAgICB2b2lkIHdyaXRlSW1h
Z2UgKGZpdHNmaWxlKiBmUHRyLCBsb25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3Rk
Ojp2YWxhcnJheTxUPiYgaW5EYXRhLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIFQq
IG51bGxWYWx1ZSA9IDApOwoKCgoKCiAgICAgICAgdm9pZCB3cml0ZUltYWdlIChmaXRzZmlsZSog
ZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZl
Y3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW5EYXRhLCBj
b25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpOwoKCgoKICAgICAgICBib29sIGlzUmVhZCAo
KSBjb25zdDsKICAgICAgICB2b2lkIGlzUmVhZCAoYm9vbCB2YWx1ZSk7CgoKCgoKCiAgICAgICAg
Y29uc3Qgc3RkOjp2YWxhcnJheTwgVCA+JiBpbWFnZSAoKSBjb25zdDsKICAgICAgICB2b2lkIHNl
dEltYWdlIChjb25zdCBzdGQ6OnZhbGFycmF5PCBUID4mIHZhbHVlKTsKICAgICAgICBjb25zdCBU
IGltYWdlIChzaXplX3QgaW5kZXgpIGNvbnN0OwogICAgICAgIHZvaWQgc2V0SW1hZ2UgKHNpemVf
dCBpbmRleCwgVCB2YWx1ZSk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRlOgoK
CgogICAgICAgIHN0ZDo6dmFsYXJyYXk8VD4mIGltYWdlICgpOwoKCiAgICAgICAgdm9pZCBwcmVw
YXJlRm9yU3Vic2V0IChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIGNvbnN0IHN0ZDo6
dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RW
ZXJ0ZXgsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSwgbG9uZyogZmlyc3RQdHIsIGxv
bmcqIGxhc3RQdHIpOwoKCgoKCiAgICBwcml2YXRlOgoKCgogICAgICAgIGJvb2wgbV9pc1JlYWQ7
CgoKCgoKCiAgICAgICAgc3RkOjp2YWxhcnJheTwgVCA+IG1faW1hZ2U7CgoKCgoKCiAgfTsKCgog
IHRlbXBsYXRlPD4KICB2b2lkIEltYWdlPGxvbmc+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25n
PiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2YWxhcnJheTxsb25nPiYgaW5EYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwoKICB0ZW1wbGF0
ZTw+CiAgdm9pZCBJbWFnZTxzaG9ydD46OndyaXRlSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJz
dFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxsb25nPiYgbGFzdFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnZhbGFycmF5PHNob3J0PiYgaW5EYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwogIHRlbXBsYXRlPD4KICB2
b2lkIEltYWdlPHVuc2lnbmVkIGxvbmc+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmly
c3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2YWxhcnJheTx1bnNpZ25lZCBsb25nPiYgaW5EYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwogIHRlbXBs
YXRlPD4KICB2b2lkIEltYWdlPHVuc2lnbmVkIHNob3J0Pjo6d3JpdGVJbWFnZSAoZml0c2ZpbGUq
IGZQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
bG9uZz4mIGZpcnN0VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8dW5zaWduZWQgc2hvcnQ+JiBpbkRhdGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVz
KSA7CiAgdGVtcGxhdGU8PgogIHZvaWQgSW1hZ2U8ZmxvYXQ+Ojp3cml0ZUltYWdlIChmaXRzZmls
ZSogZlB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxmbG9hdD4mIGluRGF0YSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpIDsKICB0
ZW1wbGF0ZTw+CiAgdm9pZCBJbWFnZTxkb3VibGU+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25n
PiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2YWxhcnJheTxkb3VibGU+JiBpbkRhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzKSA7CgogIHRlbXBs
YXRlPD4KICB2b2lkIEltYWdlPHVuc2lnbmVkIGNoYXI+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSog
ZlB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxs
b25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTx1bnNpZ25lZCBjaGFyPiYgaW5EYXRhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykg
OwoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBib29sIEltYWdlPFQ+Ojpp
c1JlYWQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1faXNSZWFkOwoKICB9CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogIGlubGluZSB2b2lkIEltYWdlPFQ+Ojppc1JlYWQgKGJvb2wgdmFsdWUp
CiAgewoKICAgIG1faXNSZWFkID0gdmFsdWU7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KICBpbmxpbmUgY29uc3Qgc3RkOjp2YWxhcnJheTwgVCA+JiBJbWFnZTxUPjo6aW1hZ2UgKCkg
Y29uc3QKICB7CgogICAgcmV0dXJuIG1faW1hZ2U7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgaW5saW5lIHZvaWQgSW1hZ2U8VD46OnNldEltYWdlIChjb25zdCBzdGQ6OnZhbGFycmF5
PCBUID4mIHZhbHVlKQogIHsKCiAgICBtX2ltYWdlLnJlc2l6ZSh2YWx1ZS5zaXplKCkpOwogICAg
bV9pbWFnZSA9IHZhbHVlOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBj
b25zdCBUIEltYWdlPFQ+OjppbWFnZSAoc2l6ZV90IGluZGV4KSBjb25zdAogIHsKCiAgICByZXR1
cm4gbV9pbWFnZVtpbmRleF07CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5l
IHZvaWQgSW1hZ2U8VD46OnNldEltYWdlIChzaXplX3QgaW5kZXgsIFQgdmFsdWUpCiAgewoKICAg
IG1faW1hZ2VbaW5kZXhdID0gdmFsdWU7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
ICBJbWFnZTxUPjo6SW1hZ2UoY29uc3QgSW1hZ2U8VD4gJnJpZ2h0KQoKICAgICAgICA6IG1faXNS
ZWFkKHJpZ2h0Lm1faXNSZWFkKSxtX2ltYWdlKHJpZ2h0Lm1faW1hZ2UpCgoKCiAgewoKCiAgfQoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFnZTxUPjo6SW1hZ2UgKGNvbnN0IHN0ZDo6dmFs
YXJyYXk8VD4mIGltYWdlQXJyYXkpCgogICAgICAgIDogbV9pc1JlYWQoZmFsc2UpLG1faW1hZ2Uo
aW1hZ2VBcnJheSkKCgoKICB7CgoKICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFn
ZTxUPjo6fkltYWdlKCkKICB7CgoKICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFn
ZTxUPiAmIEltYWdlPFQ+OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2U8VD4gJnJpZ2h0KQogIHsKCgog
ICAgIEltYWdlPFQ+IF9fdG1wKHJpZ2h0KTsKICAgICBzdGQ6OnN3YXAobV9pc1JlYWQscmlnaHQu
bV9pc1JlYWQpOwogICAgIHN0ZDo6c3dhcChtX2RhdGEscmlnaHQubV9kYXRhKTsKICAgICByZXR1
cm4gKnRoaXM7CgogIH0KCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY29uc3Qgc3RkOjp2
YWxhcnJheTxUPiYgSW1hZ2U8VD46OnJlYWRJbWFnZSAoZml0c2ZpbGUqIGZQdHIsIGxvbmcgZmly
c3QsIGxvbmcgbkVsZW1lbnRzLCBUKiBudWxsVmFsdWUsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+
JiBuYXhlcywgYm9vbCYgbnVsbHMpCiAgewoKICAgICAgICBpbnQgYW55ICgwKTsKICAgICAgICBp
bnQgc3RhdHVzKDApOwogICAgICAgIGNvbnN0IHNpemVfdCBOKG5heGVzLnNpemUoKSk7CiAgICAg
ICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBpbWFnZVR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBpbml0KDEpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbmVsZW1lbnRzKHN0ZDo6YWNjdW11bGF0
ZSgmbmF4ZXNbMF0sJm5heGVzW05dLGluaXQsc3RkOjptdWx0aXBsaWVzPGxvbmc+KCkpKTsKCgoK
ICAgICAgICBsb25nIGVsZW1lbnRzVG9SZWFkKHN0ZDo6bWluKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KG5FbGVtZW50cyksbmVsZW1lbnRzIC0gZmlyc3QgKyAxKSk7CiAgICAgICAgaWYgKCBl
bGVtZW50c1RvUmVhZCA8IG5FbGVtZW50cykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6
OmNlcnIgPDwgIioqKkNDZml0cyBXYXJuaW5nOiBkYXRhIHJlcXVlc3QgZXhjZWVkcyBpbWFnZSBz
aXplLCB0cnVuY2F0aW5nXG4iOwogICAgICAgIH0KICAgICAgICBGSVRTVXRpbDo6YXV0b19hcnJh
eV9wdHI8VD4gcEFycmF5KG5ldyBUW2VsZW1lbnRzVG9SZWFkXSk7CiAgICAgICAgVCogYXJyYXkg
PSBwQXJyYXkuZ2V0KCk7CgogICAgICAgIGlmIChmZmdwdihmUHRyLGltYWdlVHlwZSgpLGZpcnN0
LGVsZW1lbnRzVG9SZWFkLAogICAgICAgICAgICAgICAgICAgICAgICBudWxsVmFsdWUsYXJyYXks
JmFueSwmc3RhdHVzKSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1
cyk7CiAgICAgICAgRklUU1V0aWw6OkZpdHNOdWxsVmFsdWU8VD4gbnVsbDsKCiAgICAgICAgaWYg
KG1faW1hZ2Uuc2l6ZSgpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudHNUb1JlYWQpKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIG1faW1hZ2UucmVzaXplKGVsZW1lbnRzVG9SZWFkLG51
bGwoKSk7CiAgICAgICAgfQoKICAgICAgICBzdGQ6OmNvcHkoJmFycmF5WzBdLCZhcnJheVtlbGVt
ZW50c1RvUmVhZF0sJm1faW1hZ2VbZmlyc3QtMV0pOwogICAgICAgIG51bGxzID0gKGFueSAhPSAw
KTsKICAgICAgICBtX2lzUmVhZCA9IChmaXJzdCA9PSAxICYmIG5lbGVtZW50cyA9PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihuRWxlbWVudHMpKTsKICAgICAgICByZXR1cm4gbV9pbWFnZTsK
CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBJ
bWFnZTxUPjo6cmVhZEltYWdlIChmaXRzZmlsZSogZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9u
Zz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29u
c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSwgVCogbnVsbFZhbHVlLCBjb25zdCBzdGQ6OnZl
Y3Rvcjxsb25nPiYgbmF4ZXMsIGJvb2wmIG51bGxzKQogIHsKCgoKCiAgICAgRklUU1V0aWw6OkNW
YXJyYXk8bG9uZz4gY2FycmF5OwoKCiAgICAgaW50IGFueSgwKTsKICAgICBpbnQgc3RhdHVzKDAp
OwogICAgIGNvbnN0IHNpemVfdCBOKG5heGVzLnNpemUoKSk7CgogICAgIHNpemVfdCBhcnJheVNp
emUoMSk7CgogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgTjsgKytqKQogICAgIHsKICAgICAg
ICAgICAgIGFycmF5U2l6ZSAqPSAobGFzdFZlcnRleFtqXSAtIGZpcnN0VmVydGV4W2pdICsgMSk7
CiAgICAgfQoKICAgICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8VD4gcEFycmF5KG5ldyBUW2Fy
cmF5U2l6ZV0pOwogICAgIEZJVFNVdGlsOjphdXRvX2FycmF5X3B0cjxsb25nPiBwRnBpeGVsKGNh
cnJheShmaXJzdFZlcnRleCkpOwogICAgIEZJVFNVdGlsOjphdXRvX2FycmF5X3B0cjxsb25nPiBw
THBpeGVsKGNhcnJheShsYXN0VmVydGV4KSk7CiAgICAgRklUU1V0aWw6OmF1dG9fYXJyYXlfcHRy
PGxvbmc+IHBTdHJpZGUoY2FycmF5KHN0cmlkZSkpOwoKICAgICBGSVRTVXRpbDo6TWF0Y2hUeXBl
PFQ+IGltYWdlVHlwZTsKCiAgICAgaWYgKGZmZ3N2KGZQdHIsaW1hZ2VUeXBlKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcExwaXhlbC5nZXQoKSxwTHBpeGVsLmdldCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBTdHJpZGUuZ2V0KCksbnVsbFZhbHVlLHBBcnJheS5nZXQo
KSwmYW55LCZzdGF0dXMpICE9IDApCiAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vy
cm9yKHN0YXR1cyk7CgogICAgIH0KCiAgICAgc2l6ZV90IG4obV9pbWFnZS5zaXplKCkpOwogICAg
IGlmIChuIDwgYXJyYXlTaXplKSBtX2ltYWdlLnJlc2l6ZShhcnJheVNpemUpOwogICAgIG1faW1h
Z2UgPSBzdGQ6OnZhbGFycmF5PFQ+KHBBcnJheS5nZXQoKSxhcnJheVNpemUpOwoKCiAgICAgbnVs
bHMgPSAoYW55ICE9IDApOwogICAgIHJldHVybiBtX2ltYWdlOwoKICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogIHZvaWQgSW1hZ2U8VD46OndyaXRlSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLCBs
b25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW5EYXRh
LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIFQqIG51bGxWYWx1ZSkKICB7CgoKCiAg
ICAgaW50IHN0YXR1cygwKTsKICAgICBjb25zdCBzaXplX3QgTihuYXhlcy5zaXplKCkpOwogICAg
IHNpemVfdCBpbml0KDEpOwogICAgIHNpemVfdCB0b3RhbFNpemU9IHN0YXRpY19jYXN0PHNpemVf
dD4oc3RkOjphY2N1bXVsYXRlKCZuYXhlc1swXSwmbmF4ZXNbTl0saW5pdCxzdGQ6Om11bHRpcGxp
ZXM8bG9uZz4oKSApKTsKICAgICBGSVRTVXRpbDo6Rml0c051bGxWYWx1ZTxUPiBudWxsOwogICAg
IGlmIChtX2ltYWdlLnNpemUoKSAhPSB0b3RhbFNpemUpIG1faW1hZ2UucmVzaXplKHRvdGFsU2l6
ZSxudWxsKCkpOwogICAgIEZJVFNVdGlsOjpDQWFycmF5PFQ+IGNvbnZlcnQ7CiAgICAgRklUU1V0
aWw6OmF1dG9fYXJyYXlfcHRyPFQ+IHBBcnJheShjb252ZXJ0KGluRGF0YSkpOwogICAgIFQqIGFy
cmF5ID0gcEFycmF5LmdldCgpOwoKCiAgICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBpbWFnZVR5
cGU7CiAgICAgbG9uZyB0eXBlKGltYWdlVHlwZSgpKTsKCiAgICAgaWYgKGZmcHBuKGZQdHIsdHlw
ZSxmaXJzdCxuRWxlbWVudHMsYXJyYXksCiAgICAgICAgICAgICAgICAgICAgIG51bGxWYWx1ZSwm
c3RhdHVzKSAhPSAwKQogICAgIHsKICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJvcihzdGF0
dXMpOwoKICAgICB9CgogICAgIG1faW1hZ2Vbc3RkOjpzbGljZShmaXJzdCxuRWxlbWVudHMsMSld
ID0gaW5EYXRhOwoKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIEltYWdlPFQ+
Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZp
cnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3Rk
Ojp2YWxhcnJheTxUPiYgaW5EYXRhLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpCiAg
ewoKCgoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIHN0ZDo6dmFsYXJyYXk8VD4mIElt
YWdlPFQ+OjppbWFnZSAoKQogIHsKCgoKICAgIHJldHVybiBtX2ltYWdlOwogIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CiAgdm9pZCBJbWFnZTxUPjo6cHJlcGFyZUZvclN1YnNldCAoY29uc3Qg
c3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RW
ZXJ0ZXgsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LCBjb25zdCBzdGQ6OnZh
bGFycmF5PFQ+JiBpbkRhdGEsIGxvbmcqIGZpcnN0UHRyLCBsb25nKiBsYXN0UHRyKQogIHsKCgoK
CgogICAgY29uc3Qgc2l6ZV90IE4obmF4ZXMuc2l6ZSgpKTsKICAgIGNvbnN0IHNpemVfdCBNKGZp
cnN0VmVydGV4LnNpemUoKSk7CiAgICBzaXplX3QgaW5pdCgxKTsKICAgIEZJVFNVdGlsOjphdXRv
X2FycmF5X3B0cjxsb25nPiBwTGFzdChuZXcgbG9uZ1tNXSk7CiAgICBsb25nKiBsYXN0ID0gcExh
c3QuZ2V0KCk7CiAgICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8bG9uZz4gcEZpcnN0KG5ldyBs
b25nW01dKTsKCiAgICBzaXplX3QgaW1hZ2VTaXplKHN0ZDo6YWNjdW11bGF0ZSgmbmF4ZXNbMF0s
Jm5heGVzW05dLGluaXQsc3RkOjptdWx0aXBsaWVzPGxvbmc+KCkgKSk7CiAgICBGSVRTVXRpbDo6
Rml0c051bGxWYWx1ZTxUPiBudWxsOwogICAgaWYgKG1faW1hZ2Uuc2l6ZSgpICE9IGltYWdlU2l6
ZSkKICAgIHsKICAgICAgICAgICAgbV9pbWFnZS5yZXNpemUoaW1hZ2VTaXplLG51bGwoKSk7CiAg
ICB9CgoKCiAgICBsb25nIG1sKHN0ZDo6bWluKGxhc3RWZXJ0ZXguc2l6ZSgpLE0pKTsKCgoKICAg
IHN0ZDo6Y29weShmaXJzdFZlcnRleC5iZWdpbigpLGZpcnN0VmVydGV4LmVuZCgpLCZwRmlyc3Qu
Z2V0KClbMF0pOwogICAgc3RkOjpjb3B5KGxhc3RWZXJ0ZXguYmVnaW4oKSxsYXN0VmVydGV4LmJl
Z2luKCkrbWwsJmxhc3RbMF0pOwojIDQ5NiAiSW1hZ2UuaCIKICAgIHN0ZDo6dmFsYXJyYXk8c2l6
ZV90PiB2TGVuZ3RoKDEsTSk7CiAgICB7CiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBN
OyArK2opCiAgICAgICAgewogICAgICAgICAgICAgICAgbGFzdFtqXSA9IHN0ZDo6bWF4KGZpcnN0
VmVydGV4W2pdLGxhc3Rbal0pOwogICAgICAgICAgICAgICAgdkxlbmd0aFtqXSA9IGxhc3Rbal0t
cEZpcnN0LmdldCgpW2pdKzE7CiAgICAgICAgfQogICAgfQoKICAgIHNpemVfdCBzdGFydFBvaW50
KGZpcnN0VmVydGV4WzBdIC0gMSk7CgoKICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsg
aiA8IE07ICsraikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGFydFBvaW50ICs9IG5heGVz
W2pdKihmaXJzdFZlcnRleFtqXSAtIDEpOwogICAgICAgIH0KICAgIH0KICAgIHN0ZDo6dmFsYXJy
YXk8c2l6ZV90PiB2U3RyaWRlKDEsTSk7CgogICAgbV9pbWFnZVtzdGQ6OmdzbGljZShzdGFydFBv
aW50LHZMZW5ndGgsdlN0cmlkZSldID0gaW5EYXRhOwoKICAgIGZpcnN0UHRyID0gcEZpcnN0LnJl
bGVhc2UoKTsKICAgIGxhc3RQdHIgPSBwTGFzdC5yZWxlYXNlKCk7CgoKICB9CgoKCgoKfQojIDM5
ICJQcmltYXJ5SERVLmgiIDIKCiMgMSAiRklUUy5oIiAxCiMgNDEgIlByaW1hcnlIRFUuaCIgMgoK
CgoKIyAxICJDQ2ZpdHMuaCIgMQojIDQ2ICJQcmltYXJ5SERVLmgiIDIKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDEgMwojIDQ3ICJQcmltYXJ5SERVLmgiIDIKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL251bWVyaWMiIDEgMwojIDQ4ICJQcmltYXJ5SERVLmgiIDIKIyAxICIv
dXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMSAzCiMgNDkgIlByaW1hcnlIRFUuaCIgMgoKCgpu
YW1lc3BhY2UgQ0NmaXRzIHsKIyA2OSAiUHJpbWFyeUhEVS5oIgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogIGNsYXNzIFByaW1hcnlIRFUgOiBwdWJsaWMgUEhEVQogIHsKCgoKICAgIHB1YmxpYzoK
CgoKICAgICAgICB2aXJ0dWFsIFByaW1hcnlIRFU8VD4gKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNv
bnN0OwoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJlYWREYXRhIChib29sIHJlYWRGbGFnID0g
ZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtleXMgPSBzdGQ6OnZlY3RvcjxzdHJp
bmc+KCkpOwoKCiAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW1hZ2UgKCkgY29uc3Q7
CgoKICAgICAgICBzdGQ6OnZhbGFycmF5PFQ+JiBpbWFnZSAoKTsKCgogICAgICAgIHZvaWQgc2V0
SW1hZ2UgKGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSk7CgoKCgoKICAgICAgICB2aXJ0
dWFsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIHJlYWRJbWFnZSAobG9uZyBmaXJzdCwgbG9uZyBu
RWxlbWVudHMsIFQqIG51bGxWYWx1ZSk7CgoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6
dmFsYXJyYXk8VD4mIHJlYWRJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVy
dGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0
b3I8bG9uZz4mIHN0cmlkZSwgVCogbnVsbFZhbHVlKTsKCgoKCgogICAgICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUltYWdlIChsb25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3RkOjp2YWxh
cnJheTxUPiYgaW5EYXRhLCBUKiBudWxsVmFsdWUgPSAwKTsKCgoKCgogICAgICAgIHZpcnR1YWwg
dm9pZCB3cml0ZUltYWdlIChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsIGNv
bnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+
JiBpbkRhdGEpOwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCgogICAgICAgIFByaW1hcnlIRFUgKEZJ
VFNCYXNlKiBwLCBjb25zdCBpbnQgYml0cGl4LCBjb25zdCBpbnQgbmF4aXMsIGNvbnN0IHN0ZDo6
dmVjdG9yPGxvbmc+JiBuYXhlcywgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgZGF0YSA9IHN0ZDo6
dmFsYXJyYXk8VD4oKSk7CgoKCgoKICAgICAgICBQcmltYXJ5SERVIChGSVRTQmFzZSogcCwgYm9v
bCByZWFkRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3Rk
Ojp2ZWN0b3I8c3RyaW5nPigpKTsKCgoKCgogICAgcHJpdmF0ZToKCiAgICAgICAgUHJpbWFyeUhE
VShjb25zdCBQcmltYXJ5SERVPCBUID4gJnJpZ2h0KTsKCgogICAgICAgIFByaW1hcnlIRFU8IFQg
PiAmIG9wZXJhdG9yPShjb25zdCBQcmltYXJ5SERVPCBUID4gJnJpZ2h0KTsKCgoKCiAgICAgICAg
dmlydHVhbCBzdGQ6Om9zdHJlYW0gJiBwdXQgKHN0ZDo6b3N0cmVhbSAmcykgY29uc3Q7CgoKCgoK
ICAgICAgICBjb25zdCBJbWFnZTxUPiYgZGF0YSAoKSBjb25zdDsKCgoKCgogICAgcHJpdmF0ZToK
CgoKCiAgICAgICAgSW1hZ2U8VD4gbV9kYXRhOwoKCgoKICAgICAgZnJpZW5kIGNsYXNzIEhEVUNy
ZWF0b3I7CiAgICAgIGZyaWVuZCBjbGFzcyBQSERVOwoKICB9OwojIDE4NSAiUHJpbWFyeUhEVS5o
IgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBzdGQ6Om9zdHJlYW0gJiBQcmltYXJ5
SERVPFQ+OjpwdXQgKHN0ZDo6b3N0cmVhbSAmcykgY29uc3QKICB7CgogIHMgPDwgIlByaW1hcnlI
RFU6OiBTaW1wbGU/ICIgPDwgc2ltcGxlKCkgPDwgIiBFeHRlbmQ/OiAiIDw8IGV4dGVuZCgpIDw8
CiAgICAiIEJpdHBpeDogIiA8PCBiaXRwaXgoKSA8PCAiIG5heGlzID0gIiA8PCBheGVzKCkgPDwg
IlxuIjsKICBzIDw8ICJBeGlzIExlbmd0aHM6IFxuIjsKCgoKICBmb3IgKGludCBpPTA7IGkgPCBh
eGVzKCk7IGkrKykKICAgICBzIDw8ICIgYXhpc1siIDw8IGkgPDwgIl0gIiA8PCBheGlzKGkpIDw8
ICJcbiI7CiAgcyA8PCAiIEhJU1RPUlk6ICIgPDwgaGlzdG9yeSgpIDw8ICdcbic7CiAgcyA8PCAi
IENPTU1FTlRTOiAiIDw8Y29tbWVudCgpIDw8ICdcbic7CiAgcmV0dXJuIHM7CgogIH0KCgoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBpbmxpbmUgY29uc3QgSW1hZ2U8VD4mIFByaW1hcnlIRFU8
VD46OmRhdGEgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZGF0YTsKCiAgfQoKCgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogIFByaW1hcnlIRFU8VD46OlByaW1hcnlIRFUoY29uc3QgUHJpbWFy
eUhEVTxUPiAmcmlnaHQpCgogICAgICA6IFBIRFUocmlnaHQpLCBtX2RhdGEocmlnaHQubV9kYXRh
KQoKCgogIHsKCgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgUHJpbWFyeUhEVTxUPjo6
UHJpbWFyeUhEVSAoRklUU0Jhc2UqIHAsIGNvbnN0IGludCBiaXRwaXgsIGNvbnN0IGludCBuYXhp
cywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzLCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+
JiBkYXRhKQoKICAgICAgICA6IFBIRFUocCxiaXRwaXgsbmF4aXMsbmF4ZXMpLG1fZGF0YShkYXRh
KQoKCgogIHsKCgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgUHJpbWFyeUhEVTxUPjo6
UHJpbWFyeUhEVSAoRklUU0Jhc2UqIHAsIGJvb2wgcmVhZEZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9y
PHN0cmluZz4mIGtleXMpCgogICAgICAgIDogUEhEVShwKSwgbV9kYXRhKCkKCgoKICB7CgogIHVu
c2lnbmVkIGludCB6ZXJvID0gMDsKICBpbml0UmVhZCgpOwoKICBpZiAocmVhZEZsYWcgfHwga2V5
cy5zaXplKCkgPiB6ZXJvKSByZWFkRGF0YShyZWFkRmxhZyxrZXlzKTsKCgoKICB9CgoKCgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogIFByaW1hcnlIRFU8VD4gKiBQcmltYXJ5SERVPFQ+OjpjbG9u
ZSAoRklUU0Jhc2UqIHApIGNvbnN0CiAgewoKICBQcmltYXJ5SERVPFQ+KiBjbG9uZWQgPSBuZXcg
UHJpbWFyeUhEVTxUPigqdGhpcyk7CiAgY2xvbmVkLT5wYXJlbnQoKSA9IHA7CiAgcmV0dXJuIGNs
b25lZDsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIFByaW1hcnlIRFU8VD46
OnJlYWREYXRhIChib29sIHJlYWRGbGFnLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlz
KQogIHsKCgoKICBtYWtlVGhpc0N1cnJlbnQoKTsKCiAgaWYgKCBrZXlzLnNpemUoKSA+IDApCiAg
ewogICAgICAgIHN0ZDo6bGlzdDxzdHJpbmc+IGtleUxpc3Qoa2V5cy5zaXplKCkpOwoKCgogICAg
ICAgIHN0ZDo6Y29weShrZXlzLmJlZ2luKCksa2V5cy5lbmQoKSxrZXlMaXN0LmJlZ2luKCkpOwog
ICAgICAgIHJlYWRLZXl3b3JkcyhrZXlMaXN0KTsKICB9CgoKCiAgaWYgKCByZWFkRmxhZyAmJiAo
bmF4aXMoKSA+IDApICkKICB7CiAgICAgICAgRklUU1V0aWw6OkZpdHNOdWxsVmFsdWU8VD4gbnVs
bDsKICAgICAgICBsb25nIGluaXQoMSk7CiAgICAgICAgVCBudWxWYWx1ZShudWxsKCkpOwogICAg
ICAgIGxvbmcgbmVsZW1lbnRzKHN0ZDo6YWNjdW11bGF0ZSgmbmF4ZXMoKVswXSwmbmF4ZXMoKVtu
YXhpcygpXSxpbml0LHN0ZDo6bXVsdGlwbGllczxsb25nPigpICkpOwogICAgICAgIHJlYWRJbWFn
ZSgxLG5lbGVtZW50cywmbnVsVmFsdWUpOwoKICAgIH0KCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBQcmltYXJ5SERVPFQ+OjppbWFnZSAoKSBj
b25zdAogIHsKCgoKICAgIHJldHVybiBtX2RhdGEuaW1hZ2UoKTsKICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogIHN0ZDo6dmFsYXJyYXk8VD4mIFByaW1hcnlIRFU8VD46OmltYWdlICgpCiAg
ewoKCgogICAgcmV0dXJuIG1fZGF0YS5pbWFnZSgpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgdm9pZCBQcmltYXJ5SERVPFQ+OjpzZXRJbWFnZSAoY29uc3Qgc3RkOjp2YWxhcnJheTxU
PiYgaW5EYXRhKQogIHsKCiAgICBtX2RhdGEuaW1hZ2UoKS5yZXNpemUoaW5EYXRhLnNpemUoKSk7
CiAgICBtX2RhdGEuc2V0SW1hZ2UoaW5EYXRhKTsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBQcmltYXJ5SERVPFQ+OjpyZWFkSW1hZ2UgKGxv
bmcgZmlyc3QsIGxvbmcgbkVsZW1lbnRzLCBUKiBudWxsVmFsdWUpCiAgewoKICAgIG1ha2VUaGlz
Q3VycmVudCgpOwogICAgcmV0dXJuIG1fZGF0YS5yZWFkSW1hZ2UoZml0c1BvaW50ZXIoKSxmaXJz
dCxuRWxlbWVudHMsbnVsbFZhbHVlLG5heGVzKCksYW55bnVsKCkpOwoKICB9CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIFByaW1hcnlIRFU8VD46OnJl
YWRJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6
OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlk
ZSwgVCogbnVsbFZhbHVlKQogIHsKCiAgICBtYWtlVGhpc0N1cnJlbnQoKTsKICAgIHJldHVybiBt
X2RhdGEucmVhZEltYWdlKGZpdHNQb2ludGVyKCksZmlyc3RWZXJ0ZXgsbGFzdFZlcnRleCxzdHJp
ZGUsbnVsbFZhbHVlLG5heGVzKCksYW55bnVsKCkpOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogIHZvaWQgUHJpbWFyeUhEVTxUPjo6d3JpdGVJbWFnZSAobG9uZyBmaXJzdCwgbG9uZyBu
RWxlbWVudHMsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSwgVCogbnVsbFZhbHVlKQog
IHsKCiAgICBtX2RhdGEud3JpdGVJbWFnZShmaXRzUG9pbnRlcigpLGZpcnN0LG5FbGVtZW50cyxp
bkRhdGEsbmF4ZXMoKSxudWxsVmFsdWUpOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
IHZvaWQgUHJpbWFyeUhEVTxUPjo6d3JpdGVJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4m
IGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qg
c3RkOjp2YWxhcnJheTxUPiYgaW5EYXRhKQogIHsKCiAgICBtX2RhdGEud3JpdGVJbWFnZShmaXRz
UG9pbnRlcigpLGZpcnN0VmVydGV4LGxhc3RWZXJ0ZXgsaW5EYXRhLG5heGVzKCkpOwoKICB9CgoK
CgoKfQojIDM5ICJGSVRTLmN4eCIgMgoKIyAxICJGSVRTLmgiIDEKIyA0MSAiRklUUy5jeHgiIDIK
CgoKCgoKCiMgMSAiY29uZmlnLmgiIDEKIyA0OSAiRklUUy5jeHgiIDIKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9nKystdjMvc3N0cmVhbSIgMSAzCiMgNTUgIkZJVFMuY3h4IiAyCgoKdXNpbmcgc3Rk
OjplbmRsOwp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6Y2VycjsKCiMgMSAiL3Vzci9pbmNs
dWRlL2crKy12My9tZW1vcnkiIDEgMwojIDYyICJGSVRTLmN4eCIgMgoKCgpuYW1lc3BhY2UgQ0Nm
aXRzIHsKCgoKCgogIEZJVFM6Ok5vU3VjaEhEVTo6Tm9TdWNoSERVIChjb25zdCBzdHJpbmcmIGRp
YWcsIGJvb2wgc2lsZW50KQoKICA6IEZpdHNFeGNlcHRpb24oIkZJVFMgRXJyb3I6IENhbm5vdCBy
ZWFkIEhEVSBpbiBGSVRTIGZpbGU6IixzaWxlbnQpCgoKCiAgewoKCiAgaWYgKCBGSVRTOjp2ZXJi
b3NlTW9kZSgpIHx8ICFzaWxlbnQpIHN0ZDo6Y2VyciA8PCBkaWFnIDw8ICJcbiI7CgogIH0KCgoK
CiAgRklUUzo6T3BlcmF0aW9uTm90U3VwcG9ydGVkOjpPcGVyYXRpb25Ob3RTdXBwb3J0ZWQgKGNv
bnN0IHN0cmluZyYgbXNnLCBib29sIHNpbGVudCkKCiAgOiBGaXRzRXhjZXB0aW9uKCJGSVRTIEVy
cm9yOiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZDoiLHNpbGVudCkKCgoKICB7CgogICAgaWYgKCBG
SVRTOjp2ZXJib3NlTW9kZSgpIHx8ICFzaWxlbnQpIHN0ZDo6Y2VyciA8PCBtc2cgPDwgIlxuIjsK
CiAgfQoKCgoKICBGSVRTOjpDYW50T3Blbjo6Q2FudE9wZW4gKGNvbnN0IHN0cmluZyYgZGlhZywg
Ym9vbCBzaWxlbnQpCgogICA6IEZpdHNFeGNlcHRpb24oIkZJVFMgRXJyb3I6IENhbm5vdCBvcGVu
IGZpbGUgIixzaWxlbnQpCgoKCiAgewoKICAgIGlmICggRklUUzo6dmVyYm9zZU1vZGUoKSB8fCAh
c2lsZW50KSBzdGQ6OmNlcnIgPDwgZGlhZyA8PCAiXG4iOwoKICB9CgoKCgogIEZJVFM6OkNhbnRD
cmVhdGU6OkNhbnRDcmVhdGUgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQpCgogICA6
IEZpdHNFeGNlcHRpb24oc3RyaW5nKCJGSVRTIEVycm9yOiBDYW5ub3QgY3JlYXRlIGZpbGUgIiks
c2lsZW50KQoKCgogIHsKCiAgc3RkOjpjZXJyIDw8IGRpYWcgPDwgJ1xuJzsKCiAgfQoKCgoKCiAg
Ym9vbCBGSVRTOjpzX3ZlcmJvc2VNb2RlID0gZmFsc2U7CgoKICBGSVRTOjpGSVRTKGNvbnN0IEZJ
VFMgJnJpZ2h0KQoKICAgIDogbV9GSVRTSW1wbChyaWdodC5tX0ZJVFNJbXBsLT5jbG9uZSgpKQoK
CgogIHsKCgogIH0KCiAgRklUUzo6RklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21vZGUgbW9k
ZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlL
ZXlzKQoKICA6IG1fRklUU0ltcGwobmV3IEZJVFNCYXNlKG5hbWUsbW9kZSkpCgoKCiAgewoKCgoK
ICAgICAgICAgIGlmIChtb2RlID09IFJlYWQpCiAgICAgICAgICB7CiAgICAgICAgICAgICAgICBv
cGVuKG1vZGUpOwoKCiAgICAgICAgICAgICAgICByZWFkKHJlYWREYXRhRmxhZyxwcmltYXJ5S2V5
cyk7CiAgICAgICAgICAgICAgICByZWFkRXh0ZW5zaW9ucyhyZWFkRGF0YUZsYWcpOwogICAgICAg
ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewoKCgoKCgoKICAgICAgICAgICAgICAgIGlm
IChjcmVhdGUoKSApCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAg
IEhEVUNyZWF0b3IgbWFrZVByaW1hcnkobV9GSVRTSW1wbCk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBwSERVKG1ha2VQcmltYXJ5LmNyZWF0ZUltYWdlKDgsMCxzdGQ6OnZlY3Rvcjxsb25nPigp
KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCgpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgfQoKICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2Rl
IG1vZGUsIGNvbnN0IHN0cmluZyAmaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0
ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHBy
aW1hcnlLZXksIGludCB2ZXJzaW9uKQoKICA6IG1fRklUU0ltcGwobmV3IEZJVFNCYXNlKG5hbWUs
bW9kZSkpCgoKCiAgewoKICAgICAgICAgIG9wZW4obW9kZSk7CgoKCgoKICAgICAgICAgIHJlYWQo
ZmFsc2UscHJpbWFyeUtleSk7CgoKCgoKICAgICAgICAgIHJlYWQoaGR1TmFtZSwgcmVhZERhdGFG
bGFnLCBoZHVLZXlzLHZlcnNpb24pOwoKICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAm
bmFtZSwgUldtb2RlIG1vZGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdU5hbWVzLCBi
b29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgcHJpbWFyeUtleSkK
CiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLG1vZGUpKQoKCgogIHsKCgogICAgICAg
IG9wZW4obW9kZSk7CgogICAgICAgIHJlYWQocmVhZERhdGFGbGFnLHByaW1hcnlLZXkpOwogICAg
ICAgIHJlYWQoaGR1TmFtZXMscmVhZERhdGFGbGFnKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29u
c3Qgc3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgRklUUyYgc291cmNlKQoKICAgIDogbV9GSVRTSW1w
bChuZXcgRklUU0Jhc2UoZmlsZU5hbWUsV3JpdGUpKQoKCgogIHsKCgogICAgaWYgKGNyZWF0ZSgp
ICkKICAgIHsKCgoKCiAgICAgICAgICAgIHBIRFUoc3RhdGljX2Nhc3Q8UEhEVSo+KHNvdXJjZS5w
SERVKCkuY2xvbmUobV9GSVRTSW1wbCkpKTsKICAgIH0KICAgIGludCBzdGF0dXMoMCk7CgogICAg
c291cmNlLnBIRFUoKS5tYWtlVGhpc0N1cnJlbnQoKTsKCiAgICBpZiAoZmZjb3B5KHNvdXJjZS5m
aXRzUG9pbnRlcigpLG1fRklUU0ltcGwtPmZwdHIoKSwwLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJy
b3Ioc3RhdHVzKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21v
ZGUgbW9kZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1TmFtZXMsIGNvbnN0IHN0ZDo6
dmVjdG9yPHN0ZDo6dmVjdG9yPHN0cmluZz4gPiYgaGR1S2V5cywgYm9vbCByZWFkRGF0YUZsYWcs
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXlzLCBjb25zdCBzdGQ6OnZlY3Rv
cjxpbnQ+JiBoZHVWZXJzaW9ucykKCiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLG1v
ZGUpKQoKCgogIHsKCgogICAgICAgICAgb3Blbihtb2RlKTsKCgoKCgogICAgICAgICAgcmVhZChy
ZWFkRGF0YUZsYWcscHJpbWFyeUtleXMpOwoKCgoKCgoKICAgICAgICAgIHJlYWQoaGR1TmFtZXMs
IGhkdUtleXMsIHJlYWREYXRhRmxhZywgaGR1VmVyc2lvbnMpOwoKICB9CgogIEZJVFM6OkZJVFMg
KGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGJpdHBpeCwgaW50IG5heGlzLCBsb25nICpuYXhlcykK
CiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLFdyaXRlKSkKCgoKICB7CgoKICAgICAg
ICBzdGQ6OnZlY3Rvcjxsb25nPiB2YV9uYXhlcyhuYXhpcyk7CiAgICAgICAgc3RkOjpjb3B5KCZu
YXhlc1swXSwmbmF4ZXNbbmF4aXNdLHZhX25heGVzLmJlZ2luKCkpOwoKICAgICAgICBjcmVhdGUo
KTsKCgogICAgICAgIEhEVUNyZWF0b3IgbWFrZVByaW1hcnkobV9GSVRTSW1wbCk7CgoKICAgICAg
ICBwSERVKG1ha2VQcmltYXJ5LmNyZWF0ZUltYWdlKGJpdHBpeCxuYXhpcyx2YV9uYXhlcykpOwoK
ICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2RlIG1vZGUsIGludCBo
ZHVJbmRleCwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhk
dUtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkpCgogIDogbV9GSVRT
SW1wbChuZXcgRklUU0Jhc2UobmFtZSxtb2RlKSkKCgoKICB7CgoKICAgICAgICBvcGVuKG1vZGUp
OwoKCgogICAgICAgIHJlYWQocmVhZERhdGFGbGFnLHByaW1hcnlLZXkpOwoKICAgICAgICByZWFk
KGhkdUluZGV4LHJlYWREYXRhRmxhZyxoZHVLZXlzKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29u
c3Qgc3RyaW5nICZuYW1lLCBSV21vZGUgbW9kZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYg
c2VhcmNoS2V5cywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiAmc2VhcmNoVmFsdWVzLCBib29s
IHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1S2V5cywgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RyaW5nPiYgcHJpbWFyeUtleSwgaW50IHZlcnNpb24pCgogIDogbV9GSVRT
SW1wbChuZXcgRklUU0Jhc2UobmFtZSxtb2RlKSkKCgoKICB7CgoKICAgICAgICBvcGVuKG1vZGUp
OwoKCgoKICAgICAgICByZWFkKGZhbHNlLHByaW1hcnlLZXkpOwoKCgoKCgogICAgICAgIHJlYWQo
c2VhcmNoS2V5cywgc2VhcmNoVmFsdWVzLCByZWFkRGF0YUZsYWcsIGhkdUtleXMsIHZlcnNpb24p
OwoKICB9CgoKICBGSVRTOjp+RklUUygpCiAgewoKICAgIGRlc3Ryb3koKTsKCiAgfQoKCgoKICB2
b2lkIEZJVFM6OnVubWFwRXh0ZW5zaW9uIChFeHRIRFUmIGRvb21lZCkKICB7CgogICAgY29uc3Qg
c3RyaW5nJiBkb29tZWROYW1lID0gZG9vbWVkLm5hbWUoKTsKICAgIGlmICggZXh0ZW5zaW9uKCku
Y291bnQoZG9vbWVkTmFtZSkgPT0gMSApCiAgICB7CiAgICAgICAgRXh0TWFwSXQgeCA9IGV4dGVu
c2lvbigpLmxvd2VyX2JvdW5kKGRvb21lZE5hbWUpOwogICAgICAgIGRlbGV0ZSAoKngpLnNlY29u
ZDsKICAgICAgICBleHRlbnNpb24oKS5lcmFzZSh4KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAg
ICAgICAgICAgc3RkOjpwYWlyPEV4dE1hcEl0LEV4dE1hcEl0PiBuYW1lZCA9IGV4dGVuc2lvbigp
LmVxdWFsX3JhbmdlKGRvb21lZE5hbWUpOwoKICAgICAgICAgICAgRXh0TWFwSXQgeCA9IG5hbWVk
LmZpcnN0OwoKICAgICAgICAgICAgd2hpbGUgKCB4ICE9IG5hbWVkLnNlY29uZCkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICgqeCkuc2Vjb25kLT52ZXJzaW9uKCkgPT0g
ZG9vbWVkLnZlcnNpb24oKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSAoKngpLnNlY29uZDsKICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5z
aW9uKCkuZXJhc2UoeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICArK3g7CiAgICAgICAgICAgIH0KICAgIH0K
CiAgfQoKICB2b2lkIEZJVFM6OmNsZWFyRXJyb3JzICgpCiAgewoKICAgIGZmY21zZygpOwoKICB9
CgogIHZvaWQgRklUUzo6ZGVsZXRlRXh0ZW5zaW9uIChjb25zdCBzdGQ6OnN0cmluZyYgZG9vbWVk
LCBpbnQgdmVyc2lvbikKICB7CgogICAgaW50IHN0YXR1cygwKTsKICAgIEV4dEhEVSYgZCA9IGV4
dGVuc2lvbihkb29tZWQsdmVyc2lvbik7CiAgICBpZiAoZmZkaGR1KGZpdHNQb2ludGVyKCksMCwm
c3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICB1bm1hcEV4dGVuc2lvbihkKTsK
CiAgfQoKICBpbnQgRklUUzo6bmV4dFZlcnNpb25OdW1iZXIgKGNvbnN0IHN0cmluZyYgaW5wdXRO
YW1lKSBjb25zdAogIHsKCiAgICBpbnQgbigwKTsKICAgIGludCBzdGF0dXMoMCk7CiAgICBpbnQg
Y3VycmVudCgwKTsKICAgIGlmIChmZnRoZHUoZml0c1BvaW50ZXIoKSwmbiwmc3RhdHVzKSkgdGhy
b3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICBmZmdoZG4oZml0c1BvaW50ZXIoKSwmY3VycmVudCk7
CgogICAgaW50IGNvdW50KDApOwogICAgZm9yIChpbnQgaiA9IDI7IGogPD0gbjsgKytqKQogICAg
ewogICAgICAgIGlmIChuYW1lT2ZVbm1hcHBlZChqKSA9PSBpbnB1dE5hbWUpICsrY291bnQ7CiAg
ICB9CiAgICBpZiAoZmZtYWhkKGZpdHNQb2ludGVyKCksY3VycmVudCwwLCZzdGF0dXMpKSB0aHJv
dyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIHJldHVybiBjb3VudCsxOwoKICB9CgogIHZvaWQgRklU
Uzo6cmVhZCAoYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtl
eXMpCiAgewoKCiAgIEhEVUNyZWF0b3IgY3JlYXRlKG1fRklUU0ltcGwpOwoKCiAgIHBIRFUoc3Rh
dGljX2Nhc3Q8UEhEVSo+KGNyZWF0ZS5nZXRIZHUoMCxyZWFkRGF0YUZsYWcsa2V5cykpKTsKCgog
IH0KCiAgdm9pZCBGSVRTOjpyZWFkIChjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGJvb2wgcmVhZERh
dGFGbGFnLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzLCBpbnQgdmVyc2lvbikKICB7
CgogICAgICAgSERVQ3JlYXRvciBjcmVhdGUobV9GSVRTSW1wbCk7CgogICAgICAgIHRyeQogICAg
ICAgIHsKCiAgICAgICAgICAgICAgICBFeHRIRFUqIG5ld0hEVSA9IHN0YXRpY19jYXN0PEV4dEhE
VSo+KGNyZWF0ZS5nZXRIZHUoaGR1TmFtZSwgcmVhZERhdGFGbGFnLCBrZXlzLCBmYWxzZSwgdmVy
c2lvbikpOwoKICAgICAgICAgICAgICAgIGFkZEV4dGVuc2lvbihuZXdIRFUpOwogICAgICAgIH0K
ICAgICAgICBjYXRjaCAoIC4uLiApCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgTm9T
dWNoSERVKGhkdU5hbWUpOwogICAgICAgIH0KCgogIH0KCiAgdm9pZCBGSVRTOjpyZWFkIChjb25z
dCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZoZHVOYW1lcywgYm9vbCByZWFkRGF0YUZsYWcpCiAgewoK
ICAgaW50IG5oZHU9aGR1TmFtZXMuc2l6ZSgpOwogICBIRFVDcmVhdG9yIGNyZWF0ZShtX0ZJVFNJ
bXBsKTsKCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmhkdSA7IGkrKykKICAgewogICAgICAgIHRy
eQogICAgICAgIHsKCgogICAgICAgICAgICAgICAgYWRkRXh0ZW5zaW9uKHN0YXRpY19jYXN0PEV4
dEhEVSo+KGNyZWF0ZS5nZXRIZHUoaGR1TmFtZXNbaV0sIHJlYWREYXRhRmxhZykpKTsKICAgICAg
ICAgICAgICAgIGNyZWF0ZS5yZXNldCgpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoIE5vU3Vj
aEhEVSApCiAgICAgICAgewoKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAg
ICAgICAgY2F0Y2ggKCAuLi4gKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgIH0KICAgIH0KCgoKICB9CgogIHZvaWQgRklUUzo6cmVhZCAoY29uc3Qgc3RkOjp2ZWN0b3I8
c3RyaW5nPiAmaGR1TmFtZXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPHN0cmluZz4g
PiAma2V5cywgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGhkdVZl
cnNpb25zKQogIHsKCgogICBpbnQgbmhkdT1oZHVOYW1lcy5zaXplKCk7CgoKICAgSERVQ3JlYXRv
ciBjcmVhdGUobV9GSVRTSW1wbCk7CgogICBmb3IgKGludCBpID0gMDsgaSA8IG5oZHUgOyBpKysp
CiAgIHsKICAgICAgICB0cnkKICAgICAgICB7CgoKICAgICAgICAgICAgICAgIGFkZEV4dGVuc2lv
bihzdGF0aWNfY2FzdDxFeHRIRFUqPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0
ZS5nZXRIZHUoaGR1TmFtZXNbaV0sIHJlYWREYXRhRmxhZyxrZXlzW2ldLGZhbHNlLGhkdVZlcnNp
b25zW2ldKSkpOwoKICAgICAgICAgICAgICAgIGNyZWF0ZS5yZXNldCgpOwogICAgICAgIH0KICAg
ICAgICBjYXRjaCAoIE5vU3VjaEhEVSApCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgfQogICAgICAgIGNhdGNoICggLi4uICkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKICB9CgogIHZvaWQgRklUUzo6b3BlbiAo
Uldtb2RlIG1vZGUpCiAgewoKICBpbnQgc3RhdHVzPTA7CgoKICBzdGF0dXMgPSBmZm9wZW4oJm1f
RklUU0ltcGwtPmZwdHIoKSwgbV9GSVRTSW1wbC0+bmFtZSgpLmNfc3RyKCksIG1vZGUsICZzdGF0
dXMpOwoKICBjb25zdCBzdGQ6OnN0cmluZyBkaWFnIChtX0ZJVFNJbXBsLT5uYW1lKCkpOwogIGJv
b2wgc2lsZW50ID0gc192ZXJib3NlTW9kZTsKICBpZiAoc3RhdHVzICE9IDApCiAgewogICAgICAg
ICAgaWYgKHN0YXR1cyA9PSAxMDQpIHRocm93IENhbnRPcGVuKGRpYWcsc2lsZW50KTsKICAgICAg
ICAgIGVsc2UgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgfQoKCiAgfQoKICBib29sIEZJVFM6
OmNyZWF0ZSAoKQogIHsKCgogICAgICAgICAgaW50IHN0YXR1cygwKTsKIyA1NjcgIkZJVFMuY3h4
IgogICAgICAgICAgc3RyaW5nIGZOYW1lID0gbV9GSVRTSW1wbC0+bmFtZSgpOwogICAgICAgICAg
aWYgKG1fRklUU0ltcGwtPm5hbWUoKVswXSA9PSAnIScpCiAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIG1fRklUU0ltcGwtPm5hbWUoKSA9IGZOYW1lLnN1YnN0cigxKTsKICAgICAgICAgIH0K
CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICBmZmluaXQoJm1f
RklUU0ltcGwtPmZwdHIoKSxmTmFtZS5jX3N0cigpLCZzdGF0dXMpOwogICAgICAgICAgICAgICAg
ICBpZiAoc3RhdHVzID09IDEwNSkKICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJpbmcgd2FybihmTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
d2FybiArPSAiIGF0dGVtcHRpbmcgdG8gb3BlbiBleGlzdGluZyBmaWxlIjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBGSVRTOjpDYW50Q3JlYXRlKHdhcm4sdHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB0aHJvdyBGaXRz
RXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaCAoIENhbnRDcmVhdGUgKQogICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgICAgIG9wZW4oV3JpdGUpOwogICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICB9CgoKCgogIH0KCiAgaW50IEZJVFM6OmNsb3NlICgpIHRocm93ICgpCiAgewoKICBpbnQg
c3RhdHVzPTA7CiAgaWYgKG1fRklUU0ltcGwgPT0gMCkgcmV0dXJuIDA7CgogIHN0YXR1cyA9IGZm
Y2xvcyhtX0ZJVFNJbXBsLT5mcHRyKCksICZzdGF0dXMpOwogIHJldHVybiBzdGF0dXM7CgogIH0K
CiAgRklUUyAqIEZJVFM6OmNsb25lICgpIGNvbnN0CiAgewoKICByZXR1cm4gbmV3IEZJVFMoKnRo
aXMpOwoKICB9CgogIGNvbnN0IEV4dEhEVSYgRklUUzo6ZXh0ZW5zaW9uIChpbnQgaSkgY29uc3QK
ICB7CgoKICBjb25zdCBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwogIEV4
dE1hcENvbnN0SXQgaGR1QnlOdW0gPSBleHQuYmVnaW4oKTsKICBFeHRNYXBDb25zdEl0IGVuZE9m
TGlzdCA9IGV4dC5lbmQoKTsKICB3aGlsZSAoaGR1QnlOdW0gIT0gZW5kT2ZMaXN0KQogIHsKICAg
ICAgICAgIGlmICgoKmhkdUJ5TnVtKS5zZWNvbmQtPmluZGV4KCkgPT0gaSkgYnJlYWs7CiAgICAg
ICAgICArK2hkdUJ5TnVtOwogIH0KCiAgaWYgKGhkdUJ5TnVtID09IGVuZE9mTGlzdCkKICB7CgoK
CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwoKICAgICAgIG1zZyA8PCAiTm8gSERVIHdp
dGggaW5kZXggIiA8PCBpIDw8ICdcbic7CiAgICAgICB0aHJvdyBOb1N1Y2hIRFUobXNnLnN0cigp
KTsKICB9CiAgKCpoZHVCeU51bSkuc2Vjb25kLT5tYWtlVGhpc0N1cnJlbnQoKTsKICByZXR1cm4g
KigoKmhkdUJ5TnVtKS5zZWNvbmQpOwoKICB9CgogIG9zdHJlYW0gJiBGSVRTOjpwdXQgKG9zdHJl
YW0gJnMpIGNvbnN0CiAgewoKICBzIDw8ICJGSVRTOjogUHJpbWFyeSBIRFU6IFxuIiA7CgogIHMg
PDwgKm1fRklUU0ltcGwtPnBIRFUoKSA8PCBlbmRsOwoKICBzIDw8ICJGSVRTOjogRXh0ZW5zaW9u
czogXG4iOwoKICBjb25zdCBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwog
IEV4dE1hcENvbnN0SXQgZW5kT2ZMaXN0ID0gZXh0LmVuZCgpOwoKICBmb3IgKEV4dE1hcENvbnN0
SXQgaXQgPSBleHQuYmVnaW4oKTsKICAgICAgIGl0ICE9IGVuZE9mTGlzdDsKICAgICAgICsraXQp
CiAgICAgcyA8PCAqKCgqaXQpLnNlY29uZCkgPDwgZW5kbDsKCiAgcmV0dXJuIHM7CgoKICB9Cgog
IGZpdHNmaWxlKiYgRklUUzo6Zml0c1BvaW50ZXIgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4g
bV9GSVRTSW1wbC0+ZnB0cigpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpleHRlbnNpb24gKGludCBp
KQogIHsKCiAgRXh0TWFwJiBleHQgPSBtX0ZJVFNJbXBsLT5leHRlbnNpb24oKTsKICBFeHRNYXBJ
dCBoZHVCeU51bSA9IGV4dC5iZWdpbigpOwogIEV4dE1hcEl0IGVuZE9mTGlzdCA9IGV4dC5lbmQo
KTsKCiAgd2hpbGUgKGhkdUJ5TnVtICE9IGVuZE9mTGlzdCkKICB7CiAgICAgaWYgKCgqaGR1QnlO
dW0pLnNlY29uZC0+aW5kZXgoKSA9PSBpKSBicmVhazsKICAgICArK2hkdUJ5TnVtOwogIH0KCiAg
aWYgKGhkdUJ5TnVtID09IGVuZE9mTGlzdCkKICB7CgoKCiAgICAgICBzdGQ6Om9zdHJpbmdzdHJl
YW0gbXNnOwoKICAgICAgIG1zZyA8PCAiTm8gSERVIHdpdGggaW5kZXggIiA8PCBpOwogICAgICAg
dGhyb3cgTm9TdWNoSERVKG1zZy5zdHIoKSk7CiAgfQogICgqaGR1QnlOdW0pLnNlY29uZC0+bWFr
ZVRoaXNDdXJyZW50KCk7CiAgcmV0dXJuICooKCpoZHVCeU51bSkuc2Vjb25kKTsKCiAgfQoKICBj
b25zdCBFeHRIRFUmIEZJVFM6OmV4dGVuc2lvbiAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQg
dmVyc2lvbikgY29uc3QKICB7CgoKICByZXR1cm4gZXh0YnlWZXJzaW9uKGhkdU5hbWUsdmVyc2lv
bik7CgogIH0KCiAgY29uc3QgUEhEVSYgRklUUzo6cEhEVSAoKSBjb25zdAogIHsKCgoKICAgIHJl
dHVybiAqbV9GSVRTSW1wbC0+cEhEVSgpOwogIH0KCiAgUEhEVSYgRklUUzo6cEhEVSAoKQogIHsK
CgoKICAgIHJldHVybiAqbV9GSVRTSW1wbC0+cEhEVSgpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpl
eHRieVZlcnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24pIGNvbnN0CiAg
ewoKCgoKICBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwogIEV4dE1hcDo6
c2l6ZV90eXBlIG4gPSBleHQuY291bnQoaGR1TmFtZSk7CgogIGlmIChuID09IDApCiAgewoKCgog
ICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKCiAgICAgICBtc2cgPDwgIk5vIEhEVSB3aXRo
IG5hbWUgIiA8PCBoZHVOYW1lOwogICAgICAgaWYgKHZlcnNpb24pIG1zZyA8PCAiIGFuZCB2ZXJz
aW9uICIgPDwgdmVyc2lvbjsKICAgICAgIHRocm93IE5vU3VjaEhEVShtc2cuc3RyKCkpOwogIH0K
CgogICAgICAgIEV4dE1hcEl0IGMgPSBleHQubG93ZXJfYm91bmQoaGR1TmFtZSk7CiAgICAgICAg
aWYgKCBuID4gMSkKICAgICAgICB7CiAgICAgICAgICAgICBFeHRNYXBJdCBsYXN0ID0gZXh0LnVw
cGVyX2JvdW5kKGhkdU5hbWUpOwogICAgICAgICAgICAgd2hpbGUgKCBjICE9IGxhc3QgKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICgoKmMpLnNlY29uZC0+dmVyc2lvbigp
ID09IHZlcnNpb24pIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGMrKzsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICggYyA9PSBsYXN0ICkKICAgICAgICAgICAgIHsKCgoKICAgICAg
ICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwoKICAgICAgICAgICAgICAgICBtc2cg
PDwgIk5vIEhEVSB3aXRoIG5hbWUgIiA8PCBoZHVOYW1lOwogICAgICAgICAgICAgICAgIGlmICh2
ZXJzaW9uICE9IDEpIG1zZyA8PCAiIGFuZCB2ZXJzaW9uICIgPDwgdmVyc2lvbjsKICAgICAgICAg
ICAgICAgICB0aHJvdyBOb1N1Y2hIRFUobXNnLnN0cigpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgKCpjKS5zZWNvbmQtPm1ha2VUaGlzQ3VycmVudCgpOwogICAgICAgIHJldHVy
biAqKCgqYykuc2Vjb25kKTsKCiAgfQoKICB2b2lkIEZJVFM6OnBIRFUgKFBIRFUqIHZhbHVlKQog
IHsKICAgIG1fRklUU0ltcGwtPnBIRFUoKSA9IHZhbHVlOwoKCgogIH0KCiAgdm9pZCBGSVRTOjpy
ZWFkIChpbnQgaGR1SW5kZXgsIGJvb2wgcmVhZERhdGFGbGFnLCBjb25zdCBzdGQ6OnZlY3Rvcjxz
dHJpbmc+ICZrZXlzKQogIHsKCiAgICAgICAgIEhEVUNyZWF0b3IgY3JlYXRlKG1fRklUU0ltcGwp
OwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gMDsK
ICAgICAgICAgICAgICAgIGludCB0b3RhbEhEVXMgPSAxOwogICAgICAgICAgICAgICAgaWYgKGZm
dGhkdShtX0ZJVFNJbXBsLT5mcHRyKCksJnRvdGFsSERVcywmc3RhdHVzKSAhPSAwKQogICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhkdUlu
ZGV4IDwgMCB8fCBoZHVJbmRleCA+IHRvdGFsSERVcykKICAgICAgICAgICAgICAgICAgICAgICAg
ewoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBk
aWFnczsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ3MgPDwgIkludmFsaWQg
SERVIG51bWJlciAiIDw8IGhkdUluZGV4IDw8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIHJlcXVlc3RlZCBmcm9tIEZJVFMgZmlsZSAiIDw8IG1fRklUU0ltcGwtPm5hbWUoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBOb1N1Y2hIRFUoZGlhZ3Muc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoZHVJbmRleCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpjZXJyIDw8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlByaW1hcnkgaGVhZGVyIGlzIGFsd2F5cyByZWFkLCBkb2Vzbid0IG5lZWQgdG8g
YmUgcmVxdWVzdGVkIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgYWRkRXh0ZW5zaW9uKHN0YXRpY19jYXN0PEV4dEhEVSo+KGNyZWF0ZS5nZXRIZHUo
aGR1SW5kZXgsIHJlYWREYXRhRmxhZywga2V5cykpKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2gg
KCAuLi4gKQogICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0g
bXNnOwoKICAgICAgICAgICAgICAgIG1zZyA8PCAiRXJyb3I6IENvdWxkIG5vdCByZWFkIGV4dGVu
c2lvbjogIiA8PCBoZHVJbmRleDsKICAgICAgICAgICAgICAgIHRocm93IE5vU3VjaEhEVShtc2cu
c3RyKCkpOwogICAgICAgIH0KCiAgfQoKICB2b2lkIEZJVFM6OnJlYWRFeHRlbnNpb25zIChib29s
IHJlYWREYXRhRmxhZykKICB7CgogICBIRFVDcmVhdG9yIGNyZWF0ZShtX0ZJVFNJbXBsKTsKICAg
aW50IHN0YXR1cyA9IDA7CiAgIGludCBudW1IRFVzID0gMDsKCiAgIGlmIChmZnRoZHUobV9GSVRT
SW1wbC0+ZnB0cigpLCZudW1IRFVzLCZzdGF0dXMpICE9IDApIHRocm93IEZpdHNFcnJvcihzdGF0
dXMpOwoKCgoKCgogICBmb3IgKGludCBpID0gMTsgaSA8IG51bUhEVXMgOyBpKyspCiAgIHsKICAg
ICAgIGFkZEV4dGVuc2lvbihzdGF0aWNfY2FzdDxFeHRIRFUqPihjcmVhdGUuZ2V0SGR1KGkscmVh
ZERhdGFGbGFnKSkpOwogICAgICAgY3JlYXRlLnJlc2V0KCk7CiAgIH0KCiAgfQoKICBUYWJsZSog
RklUUzo6YWRkVGFibGUgKHN0cmluZyYgaGR1TmFtZSwgaW50IHJvd3MsIGNvbnN0IHN0ZDo6dmVj
dG9yPFZhbHVlVHlwZT4mIGNvbFR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVt
bk5hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVtbkZtdCwgY29uc3Qgc3RkOjp2
ZWN0b3I8c3RyaW5nPiYgY29sdW1uVW5pdCwgSGR1VHlwZSB0eXBlLCBpbnQgdmVyc2lvbikKICB7
CgoKICAgSERVQ3JlYXRvciBuZXdUYWJsZShtX0ZJVFNJbXBsKTsKICAgVGFibGUqIG5ld0hEVSA9
IHN0YXRpY19jYXN0PFRhYmxlKj4obmV3VGFibGUuY3JlYXRlVGFibGUoaGR1TmFtZSwgdHlwZSwg
cm93cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFR5cGUs
IGNvbHVtbk5hbWUsIGNvbHVtbkZtdCwgY29sdW1uVW5pdCwgdmVyc2lvbikpOwogICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGFibGUqPihhZGRFeHRlbnNpb24obmV3SERVKSk7CgogIH0KCiAgRXh0SERV
KiBGSVRTOjphZGRJbWFnZSAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQgYnBpeCwgc3RkOjp2
ZWN0b3I8bG9uZz4mIG5heGVzLCBpbnQgdmVyc2lvbikKICB7CgogICBIRFVDcmVhdG9yIG5ld0lt
YWdlKG1fRklUU0ltcGwpOwogICBFeHRIRFUqIG5ld0hEVSA9IG5ld0ltYWdlLmNyZWF0ZUltYWdl
KGhkdU5hbWUsIGJwaXgsIG5heGVzLnNpemUoKSwgbmF4ZXMsIHZlcnNpb24pOwogICByZXR1cm4g
YWRkRXh0ZW5zaW9uKG5ld0hEVSk7CgogIH0KCiAgdm9pZCBGSVRTOjpkZXN0cm95ICgpIHRocm93
ICgpCiAgewoKCgoKCgogICAgICAgIGNsb3NlKCk7CgoKCiAgICAgICAgZGVsZXRlIG1fRklUU0lt
cGw7CgoKICAgICAgICBtX0ZJVFNJbXBsID0gMDsKCiAgfQoKICBjb25zdCBzdHJpbmcmIEZJVFM6
OmN1cnJlbnRFeHRlbnNpb25OYW1lICgpIGNvbnN0CiAgewoKCgogICAgcmV0dXJuIG1fRklUU0lt
cGwtPmN1cnJlbnRFeHRlbnNpb25OYW1lKCk7CiAgfQoKICBFeHRIRFUqIEZJVFM6OmFkZEV4dGVu
c2lvbiAoRXh0SERVKiBleHQpCiAgewoKICAgaW50IHN0YXR1cygwKTsKICAgc3RyaW5nJiBleHRO
YW1lID0gZXh0LT5uYW1lKCk7CiAgIEV4dE1hcDo6dmFsdWVfdHlwZSBhZGRIRFVFbnRyeShleHRO
YW1lLGV4dCk7CiAgIG1fRklUU0ltcGwtPmN1cnJlbnRFeHRlbnNpb25OYW1lKCkgPSBleHROYW1l
OwogICBFeHRNYXBJdCBhZGRlZCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpLmluc2VydChhZGRI
RFVFbnRyeSk7CiAgIGlmIChmZnJkZWYoZml0c1BvaW50ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0
c0Vycm9yKHN0YXR1cyk7CiAgICgqYWRkZWQpLnNlY29uZC0+aW5kZXgoZml0c1BvaW50ZXIoKS0+
SERVcG9zaXRpb24pOwogICByZXR1cm4gKCphZGRlZCkuc2Vjb25kOwoKICB9CgogIHZvaWQgRklU
Uzo6cmVhZCAoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgc2VhcmNoS2V5cywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RyaW5nPiAmc2VhcmNoVmFsdWVzLCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1S2V5cywgaW50IHZlcnNpb24pCiAgewoKICBpbnQgdG90
YWxIRFVzID0gMTsKICBpbnQgc3RhdHVzID0gMDsKICBpZiAoZmZ0aGR1KG1fRklUU0ltcGwtPmZw
dHIoKSwmdG90YWxIRFVzLCZzdGF0dXMpICE9IDApIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwog
IEhEVUNyZWF0b3IgY3JlYXRlVGVzdChtX0ZJVFNJbXBsKTsKCiAgaW50IGhkdUluZGV4OwoKICBi
b29sIGdvdEl0ID0gZmFsc2U7CiAgZm9yIChoZHVJbmRleCA9IDE7IGhkdUluZGV4IDwgdG90YWxI
RFVzOyBoZHVJbmRleCsrICkKICB7CiAgICAgdHJ5CiAgICAgewogICAgICAgIHN0ZDo6YXV0b19w
dHI8RXh0SERVPgogICAgICAgICAgdGVzdEhEVShzdGF0aWNfY2FzdDxFeHRIRFUqPihjcmVhdGVU
ZXN0LmdldEhkdShoZHVJbmRleCxmYWxzZSxzZWFyY2hLZXlzKSkpOwoKCiAgICAgICAgc3RkOjp2
ZWN0b3I8c3RyaW5nPiB0ZXN0S2V5cyhzZWFyY2hLZXlzKTsKICAgICAgICBzdGQ6OnZlY3Rvcjxz
dHJpbmc+IHRlc3RSZXN1bHRzKHNlYXJjaEtleXMuc2l6ZSgpLCIiKTsKICAgICAgICB0ZXN0SERV
LT5yZWFkS2V5cyh0ZXN0S2V5cyx0ZXN0UmVzdWx0cyk7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNl
IEZJVFNVdGlsOwoKCgogICAgICAgIGlmICh0ZXN0S2V5cy5zaXplKCkgPT0gc2VhcmNoS2V5cy5z
aXplKCkpCiAgICAgICAgewoKCiAgICAgICAgICAgc2l6ZV90IGsgPSAwOwogICAgICAgICAgIGdv
dEl0ID0gdHJ1ZTsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciB2aShzZWFyY2hWYWx1ZXMuYmVnaW4oKSk7CiAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciB2aUVuZChzZWFyY2hWYWx1ZXMuZW5kKCkpOwoKICAgICAgICAgICB3
aGlsZSAodmkgIT0gdmlFbmQgJiYgZ290SXQpCiAgICAgICAgICAgewoKICAgICAgICAgICAgICBp
ZiAodmktPnNpemUoKSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBnb3RJdCA9
IChsb3dlckNhc2UodGVzdFJlc3VsdHNba10pID09IGxvd2VyQ2FzZSgqdmkpKTsKICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgKytrLCsrdmk7CiAgICAgICAgICAgfQoKICAgICAgICAgICBp
ZiAoZ290SXQpCiAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IDEpIGJy
ZWFrOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aW50IGV4dHZlciA9IDE7CiAgICAgICAgICAgICAgICAgdGVzdEhEVS0+cmVhZEtleSgiRVhUVkVS
IixleHR2ZXIpOwoKICAgICAgICAgICAgICAgICBpZiAoZXh0dmVyID09IHZlcnNpb24pIGJyZWFr
OwogICAgICAgICAgICAgICAgIGVsc2UgZ290SXQgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICB9CgogICAgIGNhdGNoIChIRFU6Ok5vU3VjaEtleXdv
cmQpCiAgICAgewoKCiAgICAgICAgY29udGludWU7CiAgICAgfQoKICAgICBjYXRjaCAoRml0c0Vy
cm9yKQogICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICB9CgogICAgIGNhdGNoICguLi4pCiAg
ICAgewogICAgICAgIHRocm93OwogICAgIH0KCiAgICAgY3JlYXRlVGVzdC5yZXNldCgpOwogIH0K
CiAgaWYgKGdvdEl0KQogIHsKICAgICBzdHJpbmcgZXh0bmFtZSgiIik7CiAgICAgaW50IGV4dHZl
ciA9IDA7CiAgICAgRXh0SERVOjpyZWFkSGR1TmFtZShtX0ZJVFNJbXBsLT5mcHRyKCksaGR1SW5k
ZXgsZXh0bmFtZSxleHR2ZXIpOwogICAgIHJlYWQoZXh0bmFtZSxyZWFkRGF0YUZsYWcsaGR1S2V5
cyxleHR2ZXIpOwogICAgIGN1cnJlbnRFeHRlbnNpb25OYW1lKGV4dG5hbWUpOwogIH0KCiAgZWxz
ZQogIHsKCgoKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZXJyOwoKICAgICAgZXJyIDw8ICJFcnJv
cjogVW5hYmxlIHRvIGZpbmQgZXh0ZW5zaW9uIGNvbnRhaW5pbmcga2V5d29yZHMgIjsKICAgICAg
c3RkOjpjb3B5KHNlYXJjaEtleXMuYmVnaW4oKSxzZWFyY2hLZXlzLmVuZCgpLAogICAgICAgICAg
ICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oZXJyLCIgIikpOwogICAgICBlcnIg
PDwgIlxud2l0aCByZXF1aXJlZCB2YWx1ZXMgYW5kIHZlcnNpb24gbnVtYmVyICI7CiAgICAgIHRo
cm93IE5vU3VjaEhEVShlcnIuc3RyKCkpOwogIH0KCiAgfQoKICB2b2lkIEZJVFM6OnN3YXAgKEZJ
VFMmIHJpZ2h0KQogIHsKCiAgICBGSVRTVXRpbDo6c3dhcChtX0ZJVFNJbXBsLHJpZ2h0Lm1fRklU
U0ltcGwpOwoKICB9CgogIGNvbnN0IHN0ZDo6bXVsdGltYXA8c3RyaW5nLEV4dEhEVSo+JiBGSVRT
OjpleHRlbnNpb24gKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9GSVRTSW1wbC0+ZXh0ZW5z
aW9uKCk7CiAgfQoKICB2b2lkIEZJVFM6OnJlc2V0UG9zaXRpb24gKCkKICB7CgogICAgaW50IHN0
YXR1cygwKTsKICAgIGlmIChmZm1haGQoZml0c1BvaW50ZXIoKSwxLDAsJnN0YXR1cykpIHRocm93
IEZpdHNFcnJvcihzdGF0dXMpOwoKICB9CgogIHZvaWQgRklUUzo6Y3VycmVudEV4dGVuc2lvbk5h
bWUgKGNvbnN0IHN0cmluZyYgZXh0TmFtZSkKICB7CiAgICBtX0ZJVFNJbXBsLT5jdXJyZW50RXh0
ZW5zaW9uTmFtZSgpID0gZXh0TmFtZTsKCgoKICB9CgogIGNvbnN0IHN0cmluZyYgRklUUzo6bmFt
ZSAoKSBjb25zdAogIHsKCgoKICAgIHJldHVybiBtX0ZJVFNJbXBsLT5uYW1lKCk7CiAgfQoKICBm
aXRzZmlsZSomIEZJVFM6OmZpdHNQb2ludGVyICgpCiAgewoKCgogICAgcmV0dXJuIG1fRklUU0lt
cGwtPmZwdHIoKTsKICB9CgogIHZvaWQgRklUUzo6Y29weSAoY29uc3QgSERVJiBzb3VyY2UpCiAg
ewoKICAgIGludCBzdGF0dXMoMCk7CgogICAgc291cmNlLm1ha2VUaGlzQ3VycmVudCgpOwoKICAg
IGlmIChmZmNvcHkoc291cmNlLmZpdHNQb2ludGVyKCksZml0c1BvaW50ZXIoKSwwLCZzdGF0dXMp
KQogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgoKCgoKCiAgfQoKICBU
YWJsZSYgRklUUzo6ZmlsdGVyIChjb25zdCBzdHJpbmcmIGV4cHJlc3Npb24sIEV4dEhEVSYgaW5w
dXRUYWJsZSwgYm9vbCBvdmVyd3JpdGUsIGJvb2wgcmVhZERhdGEpCiAgewojIDExMDAgIkZJVFMu
Y3h4IgogICAgICAgc3RhdGljIGNoYXIgRVhUVkVSW10gPSAiRVhUVkVSIjsKCgogICAgICAgdHJ5
CiAgICAgICB7CiAgICAgICAgICAgICAgIFRhYmxlJiB0YWJsZSA9IGR5bmFtaWNfY2FzdDxUYWJs
ZSY+KGlucHV0VGFibGUpOwogICAgICAgICAgICAgICBmaXRzZmlsZSogaW5wdXRGaXRzUG9pbnRl
ciA9IGlucHV0VGFibGUuZml0c1BvaW50ZXIoKSA7CiAgICAgICAgICAgICAgIEZJVFNVdGlsOjph
dXRvX2FycmF5X3B0cjxjaGFyPiBwTmFtZTEobmV3IGNoYXJbMTAyNV0pOwogICAgICAgICAgICAg
ICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8Y2hhcj4gcE5hbWUyKG5ldyBjaGFyWzEwMjVdKTsK
ICAgICAgICAgICAgICAgc3RyaW5nIHRhYmxlTmFtZSA9IHRhYmxlLm5hbWUoKTsKICAgICAgICAg
ICAgICAgaW50IHRhYmxlVmVyc2lvbih0YWJsZS52ZXJzaW9uKCkpOwogICAgICAgICAgICAgICBj
aGFyKiBjRXhwcmVzc2lvbiA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGV4cHJlc3Npb24uY19zdHIoKSk7
CiAgICAgICAgICAgICAgIGludCBzdGF0dXMoMCk7CgoKCgoKICAgICAgICAgICAgICAgaWYgKGZm
ZmxubShpbnB1dEZpdHNQb2ludGVyLHBOYW1lMS5nZXQoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vy
cm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAgIGlmIChmZmZsbm0oZml0c1BvaW50ZXIoKSxwTmFt
ZTIuZ2V0KCksJnN0YXR1cykpIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgICAgICAg
ICBjb25zdCBzdHJpbmcmIGluZmlsZSA9IHN0cmluZyhwTmFtZTEuZ2V0KCkpOwogICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIG91dGZpbGUgPSBzdHJpbmcocE5hbWUyLmdldCgpKTsKCgogICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+CiAgICAgICAgICAgICAgICAgICAga2V5U3Rv
cmUodGFibGUua2V5V29yZCgpLnNpemUoKSArIHRhYmxlLmNvbHVtbigpLnNpemUoKSk7CgogICAg
ICAgICAgICAgICBzdGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+Ojpjb25zdF9pdGVyYXRvciBrZXlJ
dCh0YWJsZS5rZXlXb3JkKCkuYmVnaW4oKSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFwPHN0cmlu
ZyxLZXl3b3JkKj46OmNvbnN0X2l0ZXJhdG9yIGtleUl0RW5kKHRhYmxlLmtleVdvcmQoKS5lbmQo
KSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFwPHN0cmluZyxDb2x1bW4qPjo6Y29uc3RfaXRlcmF0
b3IgY29sSXQodGFibGUuY29sdW1uKCkuYmVnaW4oKSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFw
PHN0cmluZyxDb2x1bW4qPjo6Y29uc3RfaXRlcmF0b3IgY29sSXRFbmQodGFibGUuY29sdW1uKCku
ZW5kKCkpOwoKICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50KDApOwogICAgICAgICAgICAgICBp
ZiAoIXRhYmxlLmtleVdvcmQoKS5lbXB0eSgpKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICgga2V5SXQgIT0ga2V5SXRFbmQgKQogICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5U3RvcmVbY291bnRd
ID0gKCprZXlJdCkuZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytrZXlJ
dCwgKytjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICBpZiAoICF0YWJsZS5jb2x1bW4oKS5lbXB0eSgpKQogICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY29sSXQgIT0gY29sSXRFbmQgKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleVN0b3JlW2NvdW50XSA9ICgqY29sSXQpLmZpcnN0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrY29sSXQsICsrY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpbnQgcmV2aXNlZFZlcnNpb24odGFibGVWZXJz
aW9uKTsKICAgICAgICAgICAgICAgaWYgKGluZmlsZSA9PSBvdXRmaWxlKQogICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkKICAgICAgICAgICAgICAg
ICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hcEV4dGVu
c2lvbihpbnB1dFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXZpc2VkVmVyc2lvbiA9IG5leHRWZXJzaW9uTnVtYmVyKHRhYmxlTmFt
ZSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUhlYWRlcihpbnB1dFRh
YmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmZwa3lqKGZpdHNQb2lu
dGVyKCksRVhUVkVSLHJldmlzZWRWZXJzaW9uLDAsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZnNyb3coaW5wdXRG
aXRzUG9pbnRlcixmaXRzUG9pbnRlcigpLGNFeHByZXNzaW9uLCZzdGF0dXMpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZmZmx1cyhmaXRzUG9pbnRlcigpLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJy
b3Ioc3RhdHVzKTsKCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgICAgICByZXZpc2VkVmVyc2lvbiA9IG5leHRW
ZXJzaW9uTnVtYmVyKHRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVIZWFk
ZXIoaW5wdXRUYWJsZSk7CgogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZnNyb3coaW5wdXRG
aXRzUG9pbnRlcixmaXRzUG9pbnRlcigpLGNFeHByZXNzaW9uLCZzdGF0dXMpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmZnBreWooZml0c1BvaW50ZXIoKSxFWFRWRVIscmV2aXNlZFZlcnNpb24s
MCwmc3RhdHVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJv
cihzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZmZsdXMoZml0c1BvaW50ZXIo
KSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAgICAgICAgICAgICB9CgoK
ICAgICAgICAgICAgICAgSERVQ3JlYXRvciBjcmVhdGUobV9GSVRTSW1wbCk7CiAgICAgICAgICAg
ICAgIEV4dEhEVSogcmVhZEJhY2sKICAgICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8RXh0SERV
Kj4oY3JlYXRlLmdldEhkdSh0YWJsZU5hbWUscmVhZERhdGEsa2V5U3RvcmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UscmV2aXNlZFZlcnNpb24pKTsKICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRhYmxlJj4oKmFkZEV4dGVuc2lvbihyZWFkQmFjaykpOwog
ICAgICAgfQogICAgICAgY2F0Y2ggKHN0ZDo6YmFkX2Nhc3QpCiAgICAgICB7CiAgICAgICAgICAg
ICAgIHRocm93IE9wZXJhdGlvbk5vdFN1cHBvcnRlZCgiIGZpbHRlcmluZyByb3dzIGZyb20gYW4g
aW1hZ2UgIik7CiAgICAgICB9CgoKCgoKCiAgfQoKICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRI
RFUqPiYgRklUUzo6ZXh0ZW5zaW9uICgpCiAgewoKCgogICAgcmV0dXJuIG1fRklUU0ltcGwtPmV4
dGVuc2lvbigpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpjdXJyZW50RXh0ZW5zaW9uICgpCiAgewoK
CgogICAgaW50IG51bSgwKTsKICAgIGZmZ2hkbihmaXRzUG9pbnRlcigpLCZudW0pOwoKICAgIHJl
dHVybiBleHRlbnNpb24obnVtIC0gMSk7CgogIH0KCiAgc3RyaW5nIEZJVFM6Om5hbWVPZlVubWFw
cGVkIChpbnQgaGR1TnVtKSBjb25zdAogIHsKCgoKCiAgICBzdGF0aWMgY2hhciBFWFROQU1FW10g
PSAiRVhUTkFNRSI7CiAgICBzdGF0aWMgY2hhciBIRFVOQU1FW10gPSAiSERVTkFNRSI7CiAgICBz
dHJpbmcgcmV0VmFsKCIiKTsKICAgIGludCBjdXJyZW50KDApOwogICAgaW50IHN0YXR1cygwKTsK
ICAgIGZmZ2hkbihmaXRzUG9pbnRlcigpLCZjdXJyZW50KTsKICAgIGlmIChmZm1haGQoZml0c1Bv
aW50ZXIoKSxoZHVOdW0sMCwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAg
RklUU1V0aWw6OmF1dG9fYXJyYXlfcHRyPGNoYXI+IHBUZXN0S2V5KG5ldyBjaGFyWzcxXSk7CiAg
ICBjaGFyKiB0ZXN0S2V5ID0gcFRlc3RLZXkuZ2V0KCk7CgogICAgaWYgKGZmZ2t5cyhmaXRzUG9p
bnRlcigpLEVYVE5BTUUsdGVzdEtleSwwLCZzdGF0dXMpID09IDApCiAgICB7CiAgICAgICAgICAg
IHJldFZhbCA9IHN0cmluZyh0ZXN0S2V5KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBp
ZiAoc3RhdHVzID09IDIwMikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwog
ICAgICAgICAgICAgICAgZmZna3lzKGZpdHNQb2ludGVyKCksSERVTkFNRSx0ZXN0S2V5LDAsJnN0
YXR1cykgOwogICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBzdHJpbmcodGVzdEtleSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMjAyKSB0aHJvdyBGaXRzRXJyb3Ioc3Rh
dHVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgIH0KICAgIH0K
ICAgIGlmIChmZm1haGQoZml0c1BvaW50ZXIoKSxjdXJyZW50LDAsJnN0YXR1cykpIHRocm93IEZp
dHNFcnJvcihzdGF0dXMpOwoKICAgIHJldHVybiByZXRWYWw7CgoKICB9CgogIHZvaWQgRklUUzo6
Y2xvbmVIZWFkZXIgKGNvbnN0IEV4dEhEVSYgc291cmNlKQogIHsKCgoKCgogICAgc291cmNlLm1h
a2VUaGlzQ3VycmVudCgpOwoKICAgIGZpdHNmaWxlKiBzb3VyY2VQb2ludGVyID0gc291cmNlLmZp
dHNQb2ludGVyKCk7CiAgICBpbnQgbktleXMoMCk7CiAgICBpbnQgZHVtKDApOwogICAgaW50IHN0
YXR1cygwKTsKCgoKCiAgICBpZiAoZmZnaHBzKHNvdXJjZVBvaW50ZXIsJm5LZXlzLCZkdW0sJnN0
YXR1cykpIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgRklUU1V0aWw6OmF1dG9fYXJyYXlf
cHRyPGNoYXI+IHBDYXJkKG5ldyBjaGFyWzgxXSk7CiAgICBjaGFyKiBjYXJkID0gcENhcmQuZ2V0
KCk7CgoKCgogICAgaWYgKHNvdXJjZVBvaW50ZXIgPT0gZml0c1BvaW50ZXIoKSkKICAgIHsKICAg
ICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+IGNhcmRzKG5LZXlzKTsKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuS2V5czsgKytqKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmZncmVjKHNvdXJjZVBvaW50ZXIsaixjYXJk
LCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgY2FyZHNbai0xXSA9IHN0cmluZyhjYXJkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
CgogICAgICAgIGlmIChmZmNyaGQoZml0c1BvaW50ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vy
cm9yKHN0YXR1cyk7CiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGog
PD0gbktleXM7ICsraikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZmcHJlYyhmaXRzUG9pbnRlcigpLGNhcmRzW2otMV0uY19zdHIoKSwmc3RhdHVzKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQoKCiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKGZmY3JoZChmaXRzUG9p
bnRlcigpLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICBmb3IgKGlu
dCBqID0gMTsgaiA8PSBuS2V5czsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChm
ZmdyZWMoc291cmNlUG9pbnRlcixqLGNhcmQsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgICAgICAgICAgaWYgKGZmcHJlYyhm
aXRzUG9pbnRlcigpLGNhcmQsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgIH0KICAgIH0KCgoKICAgIHN0YXRpYyBjaGFyIFJP
V1NbXSA9ICJOQVhJUzIiOwogICAgaWYgKGZmdWt5aihmaXRzUG9pbnRlcigpLFJPV1MsMCwwLCZz
dGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIGlmIChmZmZsdXMoZml0c1BvaW50
ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogIH0KCiAgdm9pZCBGSVRT
OjpkZWxldGVFeHRlbnNpb24gKGludCBkb29tZWQpCiAgewoKICAgIGludCBzdGF0dXMoMCk7CiAg
ICBFeHRIRFUmIGQgPSBleHRlbnNpb24oZG9vbWVkKTsKICAgIGlmIChmZmRoZHUoZml0c1BvaW50
ZXIoKSwwLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIHVubWFwRXh0ZW5z
aW9uKGQpOwoKICB9CgoKCgoKfQo=


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

end of thread, other threads:[~2002-04-25 14:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-25  7:27 c++/6427: compiler generates incorrect call to compiler generated copy ctor nathan
  -- strict thread matches above, loose matches on Subject: below --
2002-04-23  9:06 ben.dorman

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).