public inbox for libstdc++-prs@sourceware.org
help / color / mirror / Atom feed
From: vakatov@ncbi.nlm.nih.gov
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/20: basic_[io]stringstream::str() - extra "return" in void func?
Date: Sun, 02 Jan 2000 16:57:00 -0000	[thread overview]
Message-ID: <20000103005438.12507.qmail@sourceware.cygnus.com> (raw)

>Number:         20
>Category:       libstdc++
>Synopsis:       basic_[io]stringstream::str() - extra "return" in void func?
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jan 02 16:57:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     vakatov@ncbi.nlm.nih.gov
>Release:        libstdc++-2.90.7.tar.gz
>Organization:
>Environment:

>Description:
basic_[io]stringstream::str() - extra "return" in void func

std_sstream.h, line 232, 284, 338:

      void 
      str(const __string_type& __s)
      { return rdbuf()->str(__s); }
        ^^^^^^
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From dirk_aust@gmx.de Thu Jan 06 08:47:00 2000
From: dirk_aust@gmx.de
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/21: libstdc++
Date: Thu, 06 Jan 2000 08:47:00 -0000
Message-id: <20000106164403.19808.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00001.html
Content-length: 908

>Number:         21
>Category:       libstdc++
>Synopsis:       libstdc++
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jan 06 08:47:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     dirk_aust@gmx.de
>Release:        2.90.7
>Organization:
>Environment:
i686-linux-pc
>Description:
'make install' stops with the message:
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/src/packages/libstdc++-2.90.7/src'
make[1]: *** No rule to make target `bits/ctype_base.h', needed by `/usr/include/g++-v3/bits/ctype_base.h'.  Stop.
make[1]: Leaving directory `/usr/src/packages/libstdc++-2.90.7/src'
make: *** [install-recursive] Error 1
>How-To-Repeat:
at every 'make install'
>Fix:
don't know
>Release-Note:
>Audit-Trail:
>Unformatted:
>From bkoz@cygnus.com Thu Jan 06 19:37:00 2000
From: Benjamin Kosnik <bkoz@cygnus.com>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/20: basic_[io]stringstream::str() - extra "return" invoid func?
Date: Thu, 06 Jan 2000 19:37:00 -0000
Message-id: <20000107033700.26087.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00002.html
Content-length: 628

The following reply was made to PR libstdc++/20; it has been noted by GNATS.

From: Benjamin Kosnik <bkoz@cygnus.com>
To: vakatov@ncbi.nlm.nih.gov
Cc: libstdc++-gnats@sourceware.cygnus.com
Subject: Re: libstdc++/20: basic_[io]stringstream::str() - extra "return" in
 void func?
Date: Thu, 6 Jan 2000 19:29:47 -0800 (PST)

 fixed. thanks for taking the time to report bugs like this.
 
 best,
 benjamin
 
 > basic_[io]stringstream::str() - extra "return" in void func
 > 
 > std_sstream.h, line 232, 284, 338:
 > 
 >       void 
 >       str(const __string_type& __s)
 >       { return rdbuf()->str(__s); }
 >         ^^^^^^
 
 
>From cshihpin@dso.org.sg Fri Jan 07 06:57:00 2000
From: cshihpin@dso.org.sg
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/22: g++ cannot compile std::ostream_iterator<std::pair<int, int> >
Date: Fri, 07 Jan 2000 06:57:00 -0000
Message-id: <20000107145333.10156.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00003.html
Content-length: 1971

>Number:         22
>Category:       libstdc++
>Synopsis:       g++ cannot compile std::ostream_iterator<std::pair<int, int> >
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 07 06:57:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Richard Chan
>Release:        unknown-1.0
>Organization:
>Environment:
Linux RedHat 6.1, kernel 2.2.14
gcc-2.95.2/libgcc.a and libstdc++-2.90.7 compiled with -fhonor-std
and --enable-namespaces
>Description:
With -fhonor-std and --enable-namespaces g++ cannot compile
a operator<< function using ostream_iterator.

1. Define an overloaded function
std::ostream& operator<<(std::ostream&, const std::pair<int, int>&)

2. Try printing pairs - works!
std::pair<int, int> p(12,34);
std::cout << p; //this is OK; compiles and runs correctly

3. Try printing pair using std::ostream_iterator

std::ostream_iterator<pair<int, int> > out(std::cout, "\n");

*out = p; //this does not compile!! Compiler cannot find
      // operator<< function
      // library is built with --enable-namespaces
      // using -fhonor-std
>How-To-Repeat:
c++ -fhonor-std -c bugfile.cc
does not compile
>Fix:
No fix
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bugfile.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bugfile.cc"

I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGl0ZXJhdG9y
PgoKc3RkOjpvc3RyZWFtJgpvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIHN0ZDo6cGFpcjxp
bnQsIGludD4gcCkKewoJcmV0dXJuIG9zIDw8IHAuZmlyc3QgPDwgJyAnIDw8IHAuc2Vjb25kOwp9
CgptYWluKCkKewoJc3RkOjpwYWlyPGludCwgaW50PiBwKDEyLDM0KTsKCXN0ZDo6b3N0cmVhbV9p
dGVyYXRvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+ID4gb3V0KHN0ZDo6Y291dCwgIlxuIik7CgoJc3Rk
Ojpjb3V0IDw8IHAgPDwgc3RkOjplbmRsOwoJKm91dCA9IHA7IC8vIHRoaXMgZG9lcyBub3QgY29t
cGlsZSEKfQoJCg==
>From mooney@dogbert.cc.ndsu.nodak.edu Mon Jan 10 13:27:00 2000
From: mooney@dogbert.cc.ndsu.nodak.edu
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register" compile failure
Date: Mon, 10 Jan 2000 13:27:00 -0000
Message-id: <20000110212032.10660.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00004.html
Content-length: 1090

>Number:         23
>Category:       libstdc++
>Synopsis:       alpha-dec-osf4.0f: math/mycabsf.c "hard register" compile failure
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 10 13:27:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     mooney@dogbert.cc.ndsu.nodak.edu
>Release:        2.90.7
>Organization:
>Environment:
alphaev56-dec-osf4.0f, with all relevant patches applied.
Using gcc 2.95.2, compiled on this machine.
>Description:
While attempting to compile libstdc++ 2.90.7, the build
failed in the math subdirectory with the following error:

gcc -DHAVE_CONFIG_H -I. -I. -I.. -O2 -g -Wall -c  -DPIC mycabsf.c -o .libs/mycabsf.lo
mycabsf.c: In function `__mycabsf':
mycabsf.c:36: Unable to access imaginary part of complex value in a hard register on this target
>How-To-Repeat:
a simple

	./configure
	make

on an alpha-dec-osf4.x or 5.x box should reproduce the problem.
>Fix:
Unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
>From bkoz@cygnus.com Mon Jan 10 13:47:00 2000
From: Benjamin Kosnik <bkoz@cygnus.com>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register"compile failure (fwd)
Date: Mon, 10 Jan 2000 13:47:00 -0000
Message-id: <20000110214700.18208.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00005.html
Content-length: 1142

The following reply was made to PR libstdc++/23; it has been noted by GNATS.

From: Benjamin Kosnik <bkoz@cygnus.com>
To: libstdc++-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register"
 compile failure (fwd)
Date: Mon, 10 Jan 2000 13:45:56 -0800 (PST)

 ---------- Forwarded message ----------
 Date: Mon, 10 Jan 2000 13:37:35 -0800
 From: Richard Henderson <rth@cygnus.com>
 To: Benjamin Kosnik <bkoz@cygnus.com>
 Subject: Re: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register"
     compile failure (fwd)
 
 On Mon, Jan 10, 2000 at 01:33:19PM -0800, Benjamin Kosnik wrote:
 > Hey man. This is the complex stuff I was talking about. You had said (if i
 > remember correctly) that this is now a hard failure, whereas before it was
 > just silently failing. . . is there an ETA for complex to work on alpha,
 > and/or a specific compiler release to use?? (v3 requires >= 2.95.1)
 
 Some of this functions in current cvs.  Dunno about this specific case.
 
 In no compiler do we properly follow the Alpha ABI wrt complex numbers.
 There is no ETA for this either.
 
 
 r~
 
>From Gabriel.Dos-Reis@cmla.ens-cachan.fr Tue Jan 11 04:07:00 2000
From: Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register" compile failure
Date: Tue, 11 Jan 2000 04:07:00 -0000
Message-id: <20000111120700.15196.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00006.html
Content-length: 1603

The following reply was made to PR libstdc++/23; it has been noted by GNATS.

From: Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
To: mooney@dogbert.cc.ndsu.nodak.edu
Cc: libstdc++-gnats@sourceware.cygnus.com, libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/23: alpha-dec-osf4.0f: math/mycabsf.c "hard register" compile failure
Date: 11 Jan 2000 12:59:33 +0100

 mooney@dogbert.cc.ndsu.nodak.edu writes:
 
 | >Number:         23
 | >Category:       libstdc++
 | >Synopsis:       alpha-dec-osf4.0f: math/mycabsf.c "hard register" compile failure
 | >Confidential:   no
 | >Severity:       serious
 | >Priority:       medium
 | >Responsible:    unassigned
 | >State:          open
 | >Class:          sw-bug
 | >Submitter-Id:   net
 | >Arrival-Date:   Mon Jan 10 13:27:00 PST 2000
 | >Closed-Date:
 | >Last-Modified:
 | >Originator:     mooney@dogbert.cc.ndsu.nodak.edu
 | >Release:        2.90.7
 | >Organization:
 | >Environment:
 | alphaev56-dec-osf4.0f, with all relevant patches applied.
 | Using gcc 2.95.2, compiled on this machine.
 | >Description:
 | While attempting to compile libstdc++ 2.90.7, the build
 | failed in the math subdirectory with the following error:
 | 
 | gcc -DHAVE_CONFIG_H -I. -I. -I.. -O2 -g -Wall -c  -DPIC mycabsf.c -o .libs/mycabsf.lo
 | mycabsf.c: In function `__mycabsf':
 | mycabsf.c:36: Unable to access imaginary part of complex value in a hard register on this target
 
 Thanks, this is a known problem in the compiler.  I thought it was
 fixed, but apparantely I dreamt.  Please feel free to report this to
 
 	gcc-bugs@gcc.gnu.org
 
 -- Gaby
>From Nicholas.Walker@desy.de Wed Jan 12 03:27:00 2000
From: Nicholas.Walker@desy.de
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/25: all (istream) input causes segmentation fault
Date: Wed, 12 Jan 2000 03:27:00 -0000
Message-id: <20000112112523.28965.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00007.html
Content-length: 1393

>Number:         25
>Category:       libstdc++
>Synopsis:       all (istream) input causes segmentation fault
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 12 03:27:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Nick Walker
>Release:        stdlibc++-2.90.7
>Organization:
>Environment:
solaris (SunOS vs 5.5.1) 
>Description:
Attempting to read anything from an istream causes a segmentation fault. I have traced the problem to line 326 in file locale_facets.h:

   bool
   is(mask __m, char __c) const throw()
-> { return _M_table[(unsigned char)(__c)] & __m; }

It appears that _M_table = 0x0.

I am using a local installed version of stdlibc++-2.90.7, compiled with gcc 2.95.2. The test code (see How-To-Repeat) was compiled and linked using the -static flag. Both debug (-g) and optimised (-O3) compilation show the same bug.

As a side note, compiling the same code with 2.90.6 runs fine - but 2.90.6 float/double output doesn't work, and so I need 2.90.7.
>How-To-Repeat:
#include <iostream>
#include <fstream>

int main()
{
   int n;  // replace with your favorite type

   cin>>n; // boom!

   ifstream is("test.dat");
   is>>n;  // still boom!

   return 0;
}
   
>Fix:
Badly need one!!
>Release-Note:
>Audit-Trail:
>Unformatted:
>From jaten@accessone.com Mon Jan 17 20:07:00 2000
From: jaten@accessone.com
To: libstdc++-gnats@sourceware.cygnus.com
Cc: jaten@accessone.com
Subject: libstdc++/26: red black tree crashes after 128 inserts
Date: Mon, 17 Jan 2000 20:07:00 -0000
Message-id: <20000118040121.19392.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00008.html
Content-length: 5617

>Number:         26
>Category:       libstdc++
>Synopsis:       red black tree crashes after 128 inserts
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 17 20:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Jason Aten (jaten@accessone.com)
>Release:        libstdc++.so.2.9.0
>Organization:
>Environment:

>Description:
on line 232 of stl_tree.h
  x->left = y->right;

y can be 0x0 and so asking fro ->right gives us:

Program received signal SIGSEGV, Segmentation fault.
0x7f220 in __rb_tree_rotate_right__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc8e0, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:232
(gdb) bt
#0  0x7f220 in __rb_tree_rotate_right__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc8e0, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:232
#1  0x7f128 in __rb_tree_rebalance__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc910, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:267
#2  0x77298 in __insert__t7rb_tree5ZdZdZt8identity1ZdZt4less1ZdZt24__default_alloc_template2b0i0P19__rb_tree_node_baseT1RCd (
    this=0xeeb055c0, x_=0x0, y_=0x1bcaf0, v=@0x239ce0) at /home/jaten/local/include/g++/stl_tree.h:703
#3  0x77578 in rb_tree<double, double, identity<double>, less<double>, __default_alloc_template<false, 0> >::insert_unique (
    this=0xeeb055c0, v=@0x239ce0) at /home/jaten/local/include/g++/stl_tree.h:741
#4  0x7d374 in set<double, less<double>, __default_alloc_template<false, 0> >::insert (this=0xeeb055c0, x=@0x239ce0)
    at /home/jaten/local/include/g++/stl_set.h:116
#5  0x24618 in coreng_impl::correlateGene (this=0xbbcf0, geneID=12529, warehouseID=1, pValueThreshold=0.01, 
    thePValueOperator=org_rosetta_compute_coreng_intersectionOp, targetGeneIDs=@0xeeb059a0, refineExperimentIDs=@0xeeb05990, 
    excludedPairs=@0xeeb05978, maxPositivelyCorrelatedPointCount=30, maxNegativelyCorrelatedPointCount=0, 
    theProgressListener=0xbf038, options=0xb9000 "") at coreng_impl.cpp:1991
#6  0x3bc30 in org_rosetta_compute_coreng_CorrelationEngine_skel::_OB_op_correlateGene (this=0xbbe80, _ob_buf=@0xbeca8, 
    _ob_sw=false, _ob_offIn=60, _ob_offOut=24) at combo_skel.cpp:1236
#7  0x3ce54 in org_rosetta_compute_coreng_CorrelationEngine_skel::_OB_dispatch (this=0xbbe80, _ob_op=0xb6b78 "correlateGene", 
    _ob_buf=@0xbeca8, _ob_sw=false, _ob_offIn=60, _ob_offOut=24) at combo_skel.cpp:1424
#8  0xef5e402c in CORBA_BOA::_OB_dispatch (this=0xba988, key=@0xeeb05bd4, op=0xb6b78 "correlateGene", buf=@0xbeca8, sw=false, 
    offIn=60, offOut=24) at BOA.cpp:716
#9  0xef632aac in OBGIOPServerWorker::dispatchRequest (this=0xbc870, buf=@0xbeca8, swap=false) at GIOPServerWorker.cpp:418
#10 0xef67ba48 in OBGIOPServerWorkerThreaded::Dispatcher::run () from /home/jaten/local/lib/libOB.so
#11 0xef3c0c6c in JTCThread::_JTC_startThreadHook (this=0xbeb78) at Thread.cpp:1234
#12 0xef3bc458 in threadStart (arg=0xbeb78) at Thread.cpp:196
(gdb) up 5
#5  0x24618 in coreng_impl::correlateGene (this=0xbbcf0, geneID=12529, warehouseID=1, pValueThreshold=0.01, 
    thePValueOperator=org_rosetta_compute_coreng_intersectionOp, targetGeneIDs=@0xeeb059a0, refineExperimentIDs=@0xeeb05990, 
    excludedPairs=@0xeeb05978, maxPositivelyCorrelatedPointCount=30, maxNegativelyCorrelatedPointCount=0, 
    theProgressListener=0xbf038, options=0xb9000 "") at coreng_impl.cpp:1991
(gdb) p i
$1 = 128
(gdb) down
#4  0x7d374 in set<double, less<double>, __default_alloc_template<false, 0> >::insert (this=0xeeb055c0, x=@0x239ce0)
    at /home/jaten/local/include/g++/stl_set.h:116
(gdb) p x
$2 = (org_rosetta_compute_warehouse_EGID &) @0x239ce0: 10086
(gdb) down 5
#0  0x7f220 in __rb_tree_rotate_right__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc8e0, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:232
(gdb) p x
$3 = (__rb_tree_node_base *) 0x1bc8e0
(gdb) p y
$4 = (__rb_tree_node_base *) 0x0
(gdb) up
#1  0x7f128 in __rb_tree_rebalance__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc910, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:267
(gdb) p root
$5 = (__rb_tree_node_base *&) @0xcbcc4: 0xcc248
(gdb) p x->parent
$6 = (__rb_tree_node_base *) 0xd05a0
(gdb) p x->parent->parent
$7 = (__rb_tree_node_base *) 0xd0570
(gdb) down
#0  0x7f220 in __rb_tree_rotate_right__FP19__rb_tree_node_baseRP19__rb_tree_node_base (x=0x1bc8e0, root=@0xcbcc4)
    at /home/jaten/local/include/g++/stl_tree.h:232
(gdb) p x
$8 = (__rb_tree_node_base *) 0x1bc8e0
(gdb) p root
$9 = (__rb_tree_node_base *&) @0xcbcc4: 0xcc248
(gdb) p x->left
$10 = (__rb_tree_node_base *) 0x0
(gdb) up 5
#5  0x24618 in coreng_impl::correlateGene (this=0xbbcf0, geneID=12529, warehouseID=1, pValueThreshold=0.01, 
    thePValueOperator=org_rosetta_compute_coreng_intersectionOp, targetGeneIDs=@0xeeb059a0, refineExperimentIDs=@0xeeb05990, 
    excludedPairs=@0xeeb05978, maxPositivelyCorrelatedPointCount=30, maxNegativelyCorrelatedPointCount=0, 
    theProgressListener=0xbf038, options=0xb9000 "") at coreng_impl.cpp:1991
(gdb)  p i
$11 = 128
(gdb) list
1986	   // ==============================================
1987	   egid_set geneSet;
1988	
1989	   for (i = 0; i < num_allgenes; i++)
1990	   {
1991	      geneSet.insert((*p_allgenes)[i]);
1992	   }
1993	
1994	   // ============================================
1995	   // Now locate our query 
(gdb) 
>How-To-Repeat:
intermittant problem, hard to reproduce.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From arysin@yahoo.com Fri Jan 21 16:37:00 2000
From: arysin@yahoo.com
To: libstdc++-gnats@sourceware.cygnus.com
Cc: bothner@cygnus.com
Subject: libstdc++/27: 'mode' argument in fstream/ofstream constructor
Date: Fri, 21 Jan 2000 16:37:00 -0000
Message-id: <20000122002901.4913.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00009.html
Content-length: 824

>Number:         27
>Category:       libstdc++
>Synopsis:       'mode' argument in fstream/ofstream constructor
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 21 16:37:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     arysin@yahoo.com
>Release:        7
>Organization:
>Environment:
any
>Description:
When using 'mode' argument in ofstream
e.g. ofstream f("tm", ios::bin);
mode bit 'ios::out' gets cleaned so you have to type
ofstream f("tm", ios::out|ios::bin);

The same problem with ifstream.
>How-To-Repeat:

>Fix:
place 
 'mode |= ios::in;' in ifstream::ifstream(...)
and
 'mode |= ios::out;' in ofstream::ofstream(...)
>Release-Note:
>Audit-Trail:
>Unformatted:
>From whall@primextrading.com Fri Jan 21 18:47:00 2000
From: whall@primextrading.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/28: solaris/bits/ctype_base.h  incompatible with /usr/include/ctype.h, Solaris 7, SC5.0
Date: Fri, 21 Jan 2000 18:47:00 -0000
Message-id: <20000122023842.25040.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00010.html
Content-length: 1275

>Number:         28
>Category:       libstdc++
>Synopsis:       solaris/bits/ctype_base.h  incompatible with /usr/include/ctype.h, Solaris 7, SC5.0
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 21 18:47:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     cygnus
>Release:        libstdc++-2.90.7
>Organization:
>Environment:
Solaris 7, Sun SC5.0 compiler
>Description:
Upon standard install, during the "make && make install" phase, compilation of locale.cc resulted in an illegal conversion error within ctype.cc given the following:

libstdc++-2.90.7/config/solaris/bits/ctype_base.h:
  typedef long* __to_type;

libstdc++-2.90.7/config/solaris/ctype.cc:
  ctype_base::__to_type const& ctype<char>::_S_toupper = __trans_upper;

/usr/include/ctype.h:
  extern int* __trans_upper;
>How-To-Repeat:
mkdir bld-libstdc++
cd bld-libstdc++
../libstdc++-2.90.7/configure --prefix=/usr/local/gnu-new-libstdc++ --enable-namespaces
make && make install
>Fix:
In libstdc++-2.90.7/config/solaris/bits/ctype_base.h, replace this:
  typedef long* __to_type;

with this:
  typedef int* __to_type;
>Release-Note:
>Audit-Trail:
>Unformatted:
>From bkoz@cygnus.com Mon Jan 24 10:27:00 2000
From: Benjamin Kosnik <bkoz@cygnus.com>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/27: 'mode' argument in fstream/ofstream 
Date: Mon, 24 Jan 2000 10:27:00 -0000
Message-id: <20000124182700.4006.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00011.html
Content-length: 788

The following reply was made to PR libstdc++/27; it has been noted by GNATS.

From: Benjamin Kosnik <bkoz@cygnus.com>
To: libstdc++-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: libstdc++/27: 'mode' argument in fstream/ofstream 
Date: Mon, 24 Jan 2000 10:19:30 -0800 (PST)

 Fixed, before you submitted it :)
 
 I suggest checking out the CVS branch, it would have set you 
 straight a lot sooner than I eventually did. (I was gone last week)
 
 -benjamin
 
 
 2000-01-11  Benjamin Kosnik  <bkoz@gnu.org>
 
 	* bits/sstream.tcc (seekoff): Set based on end of written buffer,
 	not buffer size.
 	* testsuite/27_io/stringbuf.cc: Add tests for seekoff(end).
 
 	* bits/std_fstream.h (ifstream::open): Add ios_base::in to
 openmode.
 	(ofstream::open): Add ios_base::out to openmode.
 
 
 
>From rbsmithz@prodigy.net Sat Jan 29 15:07:00 2000
From: rbsmithz@prodigy.net
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/29: seg fault in global basic_string construction
Date: Sat, 29 Jan 2000 15:07:00 -0000
Message-id: <20000129230620.30181.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00012.html
Content-length: 1211

>Number:         29
>Category:       libstdc++
>Synopsis:       seg fault in global basic_string construction
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jan 29 15:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Randall B. Smith
>Release:        libstdc++ 2.95.2-3
>Organization:
>Environment:
RedHat 6.1, gcc-c++ 2.95.2, libstdc++-3-libc6.1-2-2.10.0.so
>Description:
A segmentation fault occurs during global object construction
of basic_string objects. This was traced to the std/bastring.h
file which #included the std/bastring.cc file.
>How-To-Repeat:
This problem is quite intermittant at compile/link time.
Changes in unrelated areas of my code would may the
problem go away or reappear, e.g., just commenting a
statement or changing the length of a char * constant.
I can provide code if necessary, but it seems odd that
bastring.h includes bastring.cc, so I'll assume this is
an oversight.
>Fix:
Comment-out or remove line at the bottom of
/usr/include/g++-3/std/bastring.h:

//#include <std/bastring.cc>
>Release-Note:
>Audit-Trail:
>Unformatted:
>From michael.reed@ft.com Mon Jan 31 07:47:00 2000
From: michael.reed@ft.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/30: SUN 32bit apps using 64bit file offsets
Date: Mon, 31 Jan 2000 07:47:00 -0000
Message-id: <20000131154527.19663.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00013.html
Content-length: 1024

>Number:         30
>Category:       libstdc++
>Synopsis:       SUN 32bit apps using 64bit file offsets
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 31 07:47:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Mike Reed
>Release:        with gcc-2.95.2
>Organization:
>Environment:
SunOS gp003dev 5.7 Generic_106541-07 sun4u sparc SUNW,Ultra-Enterprise
>Description:
When compiling a 32 bit app to use 64 bit file offsets (largefiles) one defines _FILE_OFFSET_BITS=64 before including system headers.  This causes, I believe, 'open' to be redifined to 'open64' so that one picks up the correct library function.  However, if one happens to include streambuf.h from the STL this undefs 'open' and stops this working.  This doesn't happen with the Sun compiler since they use some #pragma mechanism instead.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From stevemw@place.org Mon Jan 31 22:17:00 2000
From: stevemw@place.org
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/31: <deque> deallocates unowned memory within .pop_back()
Date: Mon, 31 Jan 2000 22:17:00 -0000
Message-id: <20000201060801.27564.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00014.html
Content-length: 1254

>Number:         31
>Category:       libstdc++
>Synopsis:       <deque> deallocates unowned memory within .pop_back()
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 31 22:17:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Stephen M Wynne
>Release:        libstdc++-2.9.0-24
>Organization:
>Environment:
Intel RedHat 6.1
>Description:
Coredumps occur after doing a D.pop_back() on an
empty object (declared by deque<int> D;).

After quickly reading it, I can only surmize that
stl_deque.h's class deque's pop_back() mutator
properly doesn't check to see if the object is empty.
(I didn't fully understand pop_back_aux(), but it may
be pointless to go into that function if we're empty.)

Note: I did a search for pop on libstdc++ and didn't
see a report for this bug. I think it's a major one,
so I hope we can fix it soon. Thanks for the work!
>How-To-Repeat:
int main() {
    deque<int> v;
 
    v.pop_back();
    v.push_back(1);
    return 0;
}
>Fix:
Add a check inside push_back() 
(before it does anything else) as follows:

if (finish == start) return;
>Release-Note:
>Audit-Trail:
>Unformatted:
>From steffend@lamar.colostate.edu Wed Feb 02 16:07:00 2000
From: steffend@lamar.colostate.edu
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/32: Install of libstdc++-2.90.7 fails; no header files copied
Date: Wed, 02 Feb 2000 16:07:00 -0000
Message-id: <20000203000518.31551.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00015.html
Content-length: 2014

>Number:         32
>Category:       libstdc++
>Synopsis:       Install of libstdc++-2.90.7 fails; no header files copied
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Feb 02 16:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     steffend@lamar.colostate.edu
>Release:        2.90.7
>Organization:
>Environment:
Mandrake Linux (6.0), dual-processor PII; gcc 2.95.2 with
a pretty standard install.
>Description:
Configure and make proceed happily. "make install" hops 
along until we get this:

----------------------------------------------------------------------
Libraries have been installed in:
   /home/steffend/lib/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/home/steffend/C++/libstdc++-2.90.7/src'
make[1]: *** No rule to make target `bits/ctype_base.h', needed by `/home/steffend/lib/include/g++-v3/bits/ctype_base.h'.  Stop.
make[1]: Leaving directory `/home/steffend/C++/libstdc++-2.90.7/src'
make: *** [install-recursive] Error 1

The .../lib directory seems to have been created, but I have
no .../include directory tree.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From jeremy.day@perth.wni.com Wed Feb 02 18:07:00 2000
From: jeremy.day@perth.wni.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/33: Is <sstream> supported in particular stringstream?
Date: Wed, 02 Feb 2000 18:07:00 -0000
Message-id: <20000203015945.11336.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00016.html
Content-length: 594

>Number:         33
>Category:       libstdc++
>Synopsis:       Is <sstream> supported in particular stringstream?
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Feb 02 18:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     jeremy.day@perth.wni.com
>Release:        unknown-1.0
>Organization:
>Environment:
SOLARIS
>Description:
g++ compilation can't find include file <sstream>
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From jsk29@cornell.edu Sat Feb 05 13:07:00 2000
From: jsk29@cornell.edu
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/34: Segmentation fault when resizing a valarry.
Date: Sat, 05 Feb 2000 13:07:00 -0000
Message-id: <20000205210227.20112.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00017.html
Content-length: 3515

>Number:         34
>Category:       libstdc++
>Synopsis:       Segmentation fault when resizing a valarry.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Feb 05 13:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     John Karcz
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
Redhat 6.1 on a Pentium 200, gcc 2.95.2 in /usr/local.
>Description:
First, I hope this is the correct place to report an STL
in gcc 2.95.2.  If not, please let me know who to contact.

Resizing a valarray of valarrays can cause a segmentation
fault under certain circumstances.

I am very new to using the STL, and to C++ in general.  This
is the first large program I have written using the STL, so
this could well be a feature and not a bug. :)  However, it
looks like a bug to me, and I can't figure out a reason why
it would occur othersize, so I'm reporting it to the list.

Let me know if you need more information, or if I should
redirect this report to someone else.
>How-To-Repeat:
A test program is included, which should reproduce the
crash.  I've also included tha Makefile, so you can see the
(simple) command line switches I used, and a backtrace, in
case that is helpful.

To reproduce the core dump:

1.  Define a valarray<valarray<double>>.  (I believe it
    also works with types other than double, but I haven't
    thoroughly tested any other types.)

2.  Resize the valarray to some size, say 10.

3.  Resize any of the elements of valarray to another size.
    (element 5 is resized to size 2 here, but any valarray
    element to any size seems to work.)

4.  Resize the valarray again, to the _same_ size as 
    previously.  (10 in the case of this example.)

The core dump should occur at this point.

The second resizing of the main valarray must be to the same
size as it was originally set to... if it is set with
resize(9) or resize(11) in this case, rather than
resize(10), no crash occurs.

--------
test.cc:
--------
#include <valarray>

int main(int argc, char * argv[]) {
  valarray< valarray<double> > a; // The outer valarray refers to

  a.resize(10);
  a[5].resize(2);

  a.resize(10);
}

---------
Makefile:
---------
all: test

test: test.cc
        g++ -pedantic -Wall -g test.cc -o test

clean:
        rm -f test *.o *.so

----------
Backtrace:
----------
#0  0x40095117 in memcpy (dstpp=0x8050500, srcpp=0x0, len=16)
    at ../sysdeps/generic/memcpy.c:55
#1  0x804d014 in void __valarray_copy<double> (__a=0x0, __n=2, __b=0x8050500)
    at /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/../../../../include/g++-3/std/valarray_array.h:69
#2  0x804cfdd in valarray<double>::operator= (this=0x80504d4, __v=@0xbffffc08)
    at /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/../../../../include/g++-3/std/std_valarray.h:342
#3  0x804cf7d in void __valarray_fill<valarray<double> > (__a=0x80504ac, 
    __n=10, __t=@0xbffffc08)
    at /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/../../../../include/g++-3/std/valarray_array.h:48
#4  0x804cd96 in valarray<valarray<double> >::resize (this=0xbffffc10, __n=10, 
    __c={_M_size = 3221224456, _M_data = 0x0})
    at /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/../../../../include/g++-3/std/std_valarray.h:535
#5  0x8049370 in main (argc=1, argv=0xbffffc64) at test.cc:9
Current language:  auto; currently c
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From Gabriel.Dos-Reis@cmla.ens-cachan.fr Sat Feb 05 15:27:00 2000
From: Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/34: Segmentation fault when resizing a valarry.
Date: Sat, 05 Feb 2000 15:27:00 -0000
Message-id: <20000205232700.2081.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00018.html
Content-length: 3303

The following reply was made to PR libstdc++/34; it has been noted by GNATS.

From: Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
To: jsk29@cornell.edu
Cc: libstdc++-gnats@sourceware.cygnus.com, libstdc++@sourceware.cygnus.com
Subject: Re: libstdc++/34: Segmentation fault when resizing a valarry.
Date: 06 Feb 2000 00:26:46 +0100

 jsk29@cornell.edu writes:
 
 | >Number:         34
 | >Category:       libstdc++
 | >Synopsis:       Segmentation fault when resizing a valarry.
 | >Confidential:   no
 | >Severity:       serious
 | >Priority:       medium
 | >Responsible:    unassigned
 | >State:          open
 | >Class:          sw-bug
 | >Submitter-Id:   net
 | >Arrival-Date:   Sat Feb 05 13:07:00 PST 2000
 | >Closed-Date:
 | >Last-Modified:
 | >Originator:     John Karcz
 | >Release:        gcc version 2.95.2 19991024 (release)
 | >Organization:
 | >Environment:
 | Redhat 6.1 on a Pentium 200, gcc 2.95.2 in /usr/local.
 | >Description:
 | First, I hope this is the correct place to report an STL
 | in gcc 2.95.2.  If not, please let me know who to contact.
 | 
 | Resizing a valarray of valarrays can cause a segmentation
 | fault under certain circumstances.
 | 
 | I am very new to using the STL, and to C++ in general.  This
 | is the first large program I have written using the STL, so
 | this could well be a feature and not a bug. :)  However, it
 | looks like a bug to me, and I can't figure out a reason why
 | it would occur othersize, so I'm reporting it to the list.
 
 Thank you very much for your bug report.
 
 | Let me know if you need more information, or if I should
 | redirect this report to someone else.
 | >How-To-Repeat:
 | A test program is included, which should reproduce the
 | crash.  I've also included tha Makefile, so you can see the
 | (simple) command line switches I used, and a backtrace, in
 | case that is helpful.
 | 
 | To reproduce the core dump:
 | 
 | 1.  Define a valarray<valarray<double>>.  (I believe it
 |     also works with types other than double, but I haven't
 |     thoroughly tested any other types.)
 
 valarray<valarray<double> > is not expected to work in general,
 because:
 
 26.1/1
   The complex and valarray components are parameterized by the type of
   information they contain and manipulate.  A C++ program shall
   instantiate these components only with a type T that satisfies the
   following requirements
   [...]
   -- If T is a class, its assignment operator, copy and default
   constructors, and destructor shall correspond to each other in the
   following sense: Initialization of raw storage using the default
   constructor, followed by assignment, is semantically equivalent to
   initialization of raw storage using the copy constructor. [...]
 
 valarrays do not meet this requirement.
 
 If you want to build a two dimensional array out of valarray, please
 consider using gslice and gslice_array in conjunction with a plain
 valarray. 
 
 [...]
 
 | #4  0x804cd96 in valarray<valarray<double> >::resize (this=0xbffffc10, __n=10, 
 |     __c={_M_size = 3221224456, _M_data = 0x0})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 I'm wondering how this can be possible, given:
 
 template<typename _Tp>
 inline valarray<_Tp>::valarray () : _M_size (0), _M_data (0) {}
 
 
 Thanks a lot.
 
 -- Gaby
>From amc@to.gd-es.com Mon Feb 07 18:27:00 2000
From: amc@to.gd-es.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/35: make error for Digital Unix 4.0D
Date: Mon, 07 Feb 2000 18:27:00 -0000
Message-id: <20000208022055.6623.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00019.html
Content-length: 698

>Number:         35
>Category:       libstdc++
>Synopsis:       make error for Digital Unix 4.0D
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 07 18:27:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Allen M. Cohen
>Release:        2.90.7
>Organization:
>Environment:

>Description:
FATAL ERROR from make
gcc version is:  2.95.2
Using GNU make too.

# ./configure
# make
mycabsf.c:36 in funct __mycabsf: unable to access imag part of complex value in a hard reg on this target
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From ori@extent.com Fri Feb 18 06:07:00 2000
From: ori@extent.com
To: libstdc++-gnats@sourceware.cygnus.com
Cc: yl@extent.com
Subject: libstdc++/36: A bug in STRING
Date: Fri, 18 Feb 2000 06:07:00 -0000
Message-id: <20000218140248.22082.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00020.html
Content-length: 805

>Number:         36
>Category:       libstdc++
>Synopsis:       A bug in STRING
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 18 06:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Ori Etkovitz
>Release:        unknown-1.0
>Organization:
>Environment:
SunOS
>Description:
A bug using STL library in MultiThreading.
The std::string is not ReEnterant !
In Release 2.95.1
It cause many Segmentation calls in our programs.
I replaced the STL header files with the ones from SGI,
and the problem was fixed.
>How-To-Repeat:

>Fix:
I replaced the STL header files with the ones from SGI,
and the problem was fixed.
>Release-Note:
>Audit-Trail:
>Unformatted:
>From rparnall@v-wave.com Fri Feb 25 10:17:00 2000
From: rparnall@v-wave.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/37: Both reverse_iterators in multiset are typedef'ed to const_reverse_iterator
Date: Fri, 25 Feb 2000 10:17:00 -0000
Message-id: <20000225181651.22846.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00021.html
Content-length: 1217

>Number:         37
>Category:       libstdc++
>Synopsis:       Both reverse_iterators in multiset are typedef'ed to const_reverse_iterator
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 25 10:16:59 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     rparnall@v-wave.com
>Release:        unknown-1.0
>Organization:
>Environment:
gcc version 2.95.2 19991024 (release)
>Description:
from stl_multiset.h:
typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;

stl_set.h is the same.

I believe the first one of the pair should be _Rep_type::reverse_iterator.
>How-To-Repeat:
#include <multiset.h>
class X 
{
public:
    int	x;
    int	GetX();
};

typedef multiset<X> XSet;
typedef XSet::reverse_iterator XIterator;
    
int main() 
{
    XSet a;
    XIterator b;
    for (b = a.rbegin(); b != a.rend(); b++) {
	cout << b->GetX();
    }  
}

results in
 passing `const X' as `this' argument of `int X::GetX()' discards qualifiers
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From rparnall@v-wave.com Fri Feb 25 16:47:00 2000
From: Ruth Parnall <rparnall@v-wave.com>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/37: Both reverse_iterators in multiset are typedef'ed to const_reverse_iterator
Date: Fri, 25 Feb 2000 16:47:00 -0000
Message-id: <20000226004701.16090.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00022.html
Content-length: 913

The following reply was made to PR libstdc++/37; it has been noted by GNATS.

From: Ruth Parnall <rparnall@v-wave.com>
To: libstdc++-gnats@sourceware.cygnus.com, nobody@sourceware.cygnus.com
Cc:  
Subject: Re: libstdc++/37: Both reverse_iterators in multiset are typedef'ed to 
 const_reverse_iterator
Date: Fri, 25 Feb 2000 17:40:37 -0700

 Can I remove this one?  About fifteen minutes after I sent it, the
 light dawned, and then I found some documentation about it.  (Blush).
 
 libstdc++-gnats@sourceware.cygnus.com wrote:
 > 
 > Thank you very much for your problem report.
 > It has the internal identification `libstdc++/37'.
 > The individual assigned to look at your
 > report is: unassigned.
 > 
 > >Category:       libstdc++
 > >Responsible:    unassigned
 > >Synopsis:       Both reverse_iterators in multiset are typedef'ed to const_reverse_iterator
 > >Arrival-Date:   Fri Feb 25 10:16:59 PST 2000
>From badger@prtr-13.ucsc.edu Sun Feb 27 09:47:00 2000
From: badger@prtr-13.ucsc.edu
To: libstdc++-gnats@sourceware.cygnus.com
Cc: badger@prtr-13.ucsc.edu
Subject: libstdc++/38: Bug in global map variables
Date: Sun, 27 Feb 2000 09:47:00 -0000
Message-id: <20000227174555.8857.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00023.html
Content-length: 3292

>Number:         38
>Category:       libstdc++
>Synopsis:       Bug in global map variables
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Feb 27 09:47:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     badger@prtr-13.ucsc.edu
>Release:        libstdc++-2.90.7 (And libstdc++v2 included with egcs)
>Organization:
>Environment:
Redhat linux-5.2 + kernel2.2 &
sparc-sun-solaris2.5.1
>Description:
I am generating two related errors concerning a global variable
that instantiates the map template class.

When attempting to access the variable from a function, I am
able to access and change keys that were generated in the
calling function as I expect. However, the calling function
is not able to access keys created in the called function.

When attempting to access the variable from code in a second
file none of the keys belonging to the map variable are
available to me.  None of the keys generated in this file
are available in the calling function in the main file.
>How-To-Repeat:
The files I am attaching contain a short code snippet to repeat
the error.  (If the file does not get to you, please get it
from http://www.tiki-lounge.com/~toshio/map-test.tgz )

Files: map-test.cpp:  The file containing the main function.
       map-test.h:    Contains an extern definition for the
                      global map variable.
       map-extern.cpp:Contains another function that attempts
                      to use the global map variable.
       t:             Contains output from the program run.

Compile, link, and run to regenerate the error.
>Fix:
Unknown.  If this is just my misunderstanding of the
spec or if this is an error in gcc/egcs rather than
libstdc++, please let me know.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-compressed; name="map-test.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="map-test.tgz"

H4sIAGBfuTgAA+1YbWvbMBDOZ/0NCuFBacva+t2rkxY22GCfNti+taW4tpIYEjnYTlcY/e87+UWR
3+IGZrcbui+JHkmn85303Elrb3NGnlIS03N/s5kMIpqq2qaJJxjrmmqzX6yZVvbLRDNMB2NHtWzd
cgxbA0S3VXOC1WHMqco2Sb0Y40kaJcsw2jeOxMkYBo0r6F1I/dU2IHgWRkkaE299LWBrbyM0FWie
pSRJz5cNCkKPURigfO94q/v5lvppGNHjE/wbIexH2xTPZsonsggpDekCN0beUmXKB2LlYxDEJElw
NMdhStauAuAR+we9hAYrcSyDb26Vb5TcKneugsuhNwxS7mDdHKxgHUp+/orqSgBqKCkxsJqrKnqW
MYEFrgyOfIm2MQAmBzILruAciOt/psEhTjl6w17pUsI801CTu6uuqEQ7VDGX1jXlbq4p4qAQqGf0
2sfszQ0KP9GDsX8v/5u6aZT8b5maxfhft3TJ/2PIxSn+HkeL2FvjNMJsJ+CllyzvYV9gDwhqsYoe
vBV+9OLQe1iR5Bzh0wv0kqzRlTagMfMjDQoL+Uvw/On7kKbX2eGdoiKdYJZamtx4fDLNsw6GKW1Z
p5l0WDKpj3Uzji3HtqSdjF5yBuHjGuxaDBO5dTZrYdYuYuXzd7Razq+Qajen7jQIjMp1VPm0k065
EoFMSx1tVIqKrvCRZTRrWrR/hE/QtMsmz3dqifAkmWGokgTbgiRjdFiMOlRAmGoqssBVVRRQuw0K
iGxVQxbqioISqWRcBCHFay8sjmZlX/BNwZx4pQuLfqXZnH8k+pWD0UpXu0JuDr0d5d7b/9AXb/MD
LWhu8R4FqIX5G17+78lkaC/308iBDQoaJNIX5pikW6gDVFm7Dyy70my4NXrqf7gBWFn9b9mGA+UB
9GowXtb/Y0hZce+tyl/bSCmDSTrCGn3vv45j8fdfS2fvv6quafL8jyFFwY3qVZH6NJ9f2h/Euh0w
TdUCw3c1sX4vYMt3dYT2PPcesMSD76otSwQMRq3PpqjxULpXO+zILv2Vq1nRMfddo7z4ZvetHCea
75oIdZT2f8mlbfYI40V7crzn8WM4s4ix81/FTRaPW5tFBxqktoZun03GbkrTLPENClzgju9a4rNG
AV/6rl0Ge9yPqE1phFzoEr6j1iV8DQrveW3ykSJFihQpUqRIkSJFyqjyB5mXb3oAKAAA
>From jbednar@cs.utexas.edu Thu Mar 02 22:07:00 2000
From: jbednar@cs.utexas.edu
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/39: allocator::address declared twice
Date: Thu, 02 Mar 2000 22:07:00 -0000
Message-id: <20000303060304.23903.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00024.html
Content-length: 250422

>Number:         39
>Category:       libstdc++
>Synopsis:       allocator::address declared twice
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 02 22:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     James A. Bednar
>Release:        GCC 2.95.1, libstdc++-v3
>Organization:
>Environment:
i686-pc-linux-gnu
>Description:
The trivial file:

#include <vector.h>
class c {
  typedef int (c::* fp) ( );
  vector<fp> v;
  c() { };
};

generates a bizarre and seemingly meaningless error:
.../include/g++-3/stl_alloc.h:750: `allocator<int (c::*)()>::address(int (c::* &)()) const' has already been declared in `allocator<int (c::*)()>'

>How-To-Repeat:
g++ -c bug2.c
>Fix:
I've no idea.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug2.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug2.ii"

IyAxICJidWcyLmMiCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9sdXNyL2dudS9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKCiAK
IAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoKCgogCgojIDEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9nbnUv
dHlwZXMuaCIgMSAzCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTE3ICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
MjIyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAyIDMKCgogCgoKCgoKCgojIDU0ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMK
CgogCgoKCgoKCgogCgoKCiMgODYgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoK
CgoKCgoKIAoKCgoKCgoKIyAyMDUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKIAoK
IAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAyMTkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoK
CiMgMyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNs
dWRlL2dudS90eXBlcy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS90eXBlcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7Cgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90
OwojIDQxICIvdXNyL2luY2x1ZGUvZ251L3R5cGVzLmgiIDMKCnR5cGVkZWYgX19xdWFkX3QgKl9f
cWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQg
X191aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcg
X19pbm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQg
X19ubGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVh
ZF90IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19z
c2l6ZV90OwkJCSAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19m
c2lkX3Q7CQkJCSAKCiAKdHlwZWRlZiBpbnQgX19kYWRkcl90OwkJCSAKdHlwZWRlZiBjaGFyICpf
X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19z
d2Jsa190OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKIAp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IF9fZmRfbWFzazsKCiAKCgogCgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewog
ICAgIAogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFz
aykpIF07CiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90OwoKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIyA0ICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvZ251L3R5cGVzLmgiIDIgMwoKCiMgMTYg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9n
bnUvdHlwZXMuaCIgMwoKCgoKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoK
IyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoK
IAoKCiMgNjEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKIAoKIyAyNzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAg
d2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEzICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoK
CnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p
KSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCiAK
CgoKCgoKCgoKCgoKCgojIDE1MSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMiAzCgoK
CgoKCgoKCgoKCgoKCgoKCiAgICAgIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAyMzQgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiMgMzE2ICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAogCiAKIyAzMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIuaCIgMiAzCgoKCiMgMSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9yZWxvcHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPCBfX3kpOwp9CgogCgoKCiAKIAogCiMgMzQgIi9sdXNyL2dudS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9wYWly
LmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1Qy
IHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJz
dChfVDEoKSksIHNlY29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBf
VDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJz
dChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0
ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3gu
Zmlyc3QgPCBfX3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkg
JiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBj
b25zdCBfVDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAK
CgoKIAogCiAKIyAzNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIuaCIgMiAzCgoKCgoKCgoKCgoKCiAK
IAogCiMgMzAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvaXRlcmF0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlvbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKCgoKCgogCgogCgoKCgog
CgoKIAoKCgoKCiAKCgojIDYxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7
CgoKCgoKCgoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251L2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgojIDM2ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvZnVuY3Rpb24uaCIgMiAz
CgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVz
dWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBl
OwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
MSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewog
IHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29u
ZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsgICAgICAK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7
CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0
aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8
X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9U
cCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiAK
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAg
Ym9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRl
cl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsg
cmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFy
eV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjph
cmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1
YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N
X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl
Ojphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwog
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFy
eV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9w
cmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBf
X3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAgICAgICAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0
CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNv
bnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNh
dGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVy
MXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRl
cjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1
ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPiAKYmlu
ZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVk
ZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwog
IHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6
c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09w
ZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNv
bmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0
dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg
Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+IApiaW5kMm5kKGNvbnN0IF9P
cGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5k
ZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9feCkpOwp9CgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21w
b3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3Vt
ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6
OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX19vcDE7CiAgX09wZXJh
dGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBf
X3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29wMShfX3gpLCBfX29wMihfX3kp
IHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp
b24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEs
X09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9P
cGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9P
cGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEs
IGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBv
c2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6
cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0
aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBv
c2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwgCiAgICAg
ICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAgICA6IF9NX29wMShfX3gpLCBf
TV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3Vs
dF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9NX29wMihfX3gpLCBfTV9vcDMo
X194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0
aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9u
MSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEm
IF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAgICAgICBjb25zdCBfT3BlcmF0
aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJh
dGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBfX29wMyk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0
aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgog
IF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgq
X194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9f
eCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJf
dG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5h
cnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1
bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVi
bGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgCiAg
ICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9B
cmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGlu
ZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1
bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmlu
YXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCiAKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVy
biBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1Ymxp
YyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1Nl
bGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZp
cnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3Io
KShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5
cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Bh
aXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBs
YXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9Q
YWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Q
cm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7
CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0
IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K
c3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIs
IF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0PF9BcmcxLCBf
QXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJv
amVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoKIAogCiAKdGVt
cGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgp7CiAgdHlwZWRl
ZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9fdmFsOwogIGNvbnN0YW50X3Zv
aWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwoX192KSB7fQogIGNvbnN0IHJl
c3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX192YWw7IH0KfTsgIAoKCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgoKCgpzdHJ1
Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVudCwg
X1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBf
UmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigp
KGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0Fy
ZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF9i
aW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9S
ZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAg
IHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBj
b25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwp
CnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1
bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91
bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVz
dWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4g
CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5h
cnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCiAKIApjbGFzcyBzdWJ0
cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25l
ZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBf
TV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVy
YXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgx
ICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01f
dGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRl
eDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9p
ZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50
IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAg
Zm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgy
MSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAg
ICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWld
OwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsK
ICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFi
bGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsK
ICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRy
YWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsg
fQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwoK
CiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgoKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3Qg
eyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1
cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVm
X3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1Jl
dCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNv
bnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9U
cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNv
bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6Oipf
TV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu
Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJn
PiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
cmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl
cmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJn
PgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn
IF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq
X01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4g
bWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1
bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
MShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4x
X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9m
dW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgpt
ZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgogCgoKCiAKIAogCiMgMzgg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9mdW5jdGlvbi5oIiAyIDMKCgoKIyA0OSAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2Z1bmN0aW9uLmgiIDMKCgojIDExMiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Z1bmN0aW9uLmgiIDMKCgoK
CiAKIAogCiMgMzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5oIiAyIDMKCgojIDEgIi9sdXNy
L2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQyICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45
NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5o
IiAyIDMKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRh
cmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsK
CgoKIAoKIyAxMjIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA5ICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkYXJnLmgi
IDMKCgoKCiMgNDcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNjQgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgOTggIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAK
CgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz
dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgog
ICAKICBpbnQgX3BvczsKIyAxODIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoKc3RydWN0
IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9w
dHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAg
Y2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciog
X0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZf
ZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jh
c2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFy
a2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBf
Ymxrc2l6ZTsKICBfX29mZl90ICAgX29mZnNldDsKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3Vy
X2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCiAgX0lP
X2xvY2tfdCAqX2xvY2s7Cn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87CgoK
CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX19zc2l6ZV90ICAgKCpyZWFkKSAgKHN0cnVjdCBfSU9f
RklMRSAqLCB2b2lkICosIF9fc3NpemVfdCAgKSAgOwogIF9fc3NpemVfdCAgICgqd3JpdGUpICAo
c3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX19zc2l6ZV90ICApICA7CiAgX19vZmZf
dCAgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX19vZmZfdCAgLCBpbnQpICA7CiAgaW50
ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZSB7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7
CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBf
X3VuZGVyZmxvdyAgKF9JT19GSUxFKikgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUq
KSAgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChfSU9fRklMRSosIGludCkgIDsKCgoKCgoKCgoK
CgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBp
bnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9f
ZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklM
RSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2Zw
KSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0
ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9f
ZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
ZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFKiwgY29uc3QgY2hhciosIF9fZ251Y192
YV9saXN0ICwgaW50KikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSosIGNv
bnN0IGNoYXIqLCBfX2dudWNfdmFfbGlzdCApICA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFk
biAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApICA7CmV4dGVybiBzaXplX3QgICBfSU9f
c2dldG4gIChfSU9fRklMRSAqLCB2b2lkKiwgc2l6ZV90ICApICA7CgpleHRlcm4gX19vZmZfdCAg
IF9JT19zZWVrb2ZmICAoX0lPX0ZJTEUqLCBfX29mZl90ICAsIGludCwgaW50KSAgOwpleHRlcm4g
X19vZmZfdCAgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUqLCBfX29mZl90ICAsIGludCkgIDsKCmV4
dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUqKSAgOwoKCn0KCgoKIyAz
NiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCn0KIAoKIyAxICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp2b2lkIHZhX2Vu
ZCAoX19nbnVjX3ZhX2xpc3QpOwkJIAoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKCgoKCgojIDE3NSAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKIAoKCgoKIAoK
IAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDQwICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4x
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3RyZWFt
OyBjbGFzcyBzdHJlYW1idWY7CgogCgoKCgoKCgp0eXBlZGVmIF9fb2ZmX3QgICBzdHJlYW1vZmY7
CnR5cGVkZWYgX19vZmZfdCAgIHN0cmVhbXBvczsKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFt
c2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpf
c3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdz
IF9mbGFnczsKICAgIHNob3J0ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lv
c3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlz
OyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi
IDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlv
cyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10
ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQg
b3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlv
X3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFk
Yml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0
ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBs
YWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVr
X2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7
CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAs
IGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkg
ICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAw
ICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAw
ICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51
bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2Zp
eGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7
IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0q
IHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgc2hvcnQgIGZp
bGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2Yp
Cgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBm
bXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxh
Z3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdz
ID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7
IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNp
Z25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9y
dCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7
CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7Cglm
bXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2
YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFn
cyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyBy
ZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9
CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFs
OyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0K
CiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8g
c3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m
YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK
CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBz
ZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJl
dHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAm
IGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChp
b3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4g
X3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkg
PyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBf
ZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhj
ZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1
cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9
CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpf
b2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAg
ICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3lu
Y193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFn
cyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChp
bnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAg
ICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsK
ICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlu
bGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5s
aW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBv
c3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7
CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2Vy
IHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9m
ZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVh
bWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJu
ICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsK
CnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3Mg
aW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsK
ICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgp
IHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3Rl
Y3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4
Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQg
X2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3Mg
ICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0
cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19y
ZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5k
OyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAg
ICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf
SU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lP
X2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBf
SU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0
cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4
ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30K
ICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0
ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNr
KSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAm
IDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lk
IHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIq
IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkK
ICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7
IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYg
KF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lP
X3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQog
ICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFj
a3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgp
IHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0K
ICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9l
bmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0
cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7
IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAg
Y2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigp
IHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4g
X0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1
cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAg
ICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9m
bGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBz
dHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxs
KCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1
YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7
ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1Zmxvdygp
OyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVh
bXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6
b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v
ZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1v
ZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0
dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7
IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNz
ZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsK
ICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58
aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVu
KTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsK
CiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAg
IGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZm
ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVy
ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZl
cmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0K
ICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsg
ZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFz
ZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7
IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9h
bGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsg
cmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5n
KCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1z
aXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs
IG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1
cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBz
LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50
IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGlu
dCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hhciBkZWxpbSwg
aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0
YyAoIGMgLCAgIHRoaXMgKSA7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0YyAo
IHRoaXMgKSA7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuIF9JT19wZWVrY19sb2NrZWQgKCB0
aGlzICkgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVh
ZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVs
c2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsg
aWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGlu
dCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFt
ID0gX19udWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQg
dmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3Jt
KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3Jl
YWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz
eXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2Uo
KTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3Mg
ZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgp
OwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYo
KTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQg
bGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAg
IGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwog
ICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2Rl
LCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0
dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3Qg
eyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19v
cGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0
dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwg
c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0
bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hh
ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6
ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0K
ICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0
cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAg
ICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUg
c2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rp
cik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1z
aXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQg
c3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2Is
IG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpi
YWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRo
PTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVj
aXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBv
c3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygp
IHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAK
CiMgMzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpj
bGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3Mm
KTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlwKShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVh
bSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwoKZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlu
cyk7CmV4dGVybiBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0m
IGVuZGwob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMp
OwoKY2xhc3Mgb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCiAgICB2b2lkIGRv
X29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkgeyB9CiAgICBvc3RyZWFtKHN0cmVhbWJ1
Ziogc2IsIG9zdHJlYW0qIHRpZWQ9IF9fbnVsbCApOwogICAgaW50IG9wZngoKSB7CglpZiAoIWdv
b2QoKSkgcmV0dXJuIDA7CgllbHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVy
biAxO30gfQogICAgdm9pZCBvc2Z4KCkgeyAgOwoJCSAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0
YnVmfGlvczo6c3RkaW8pKQoJCSAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2go
KTsKICAgIG9zdHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAq
dGhpczsgfQoKCgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pOwogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6
ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVh
bSYgd3JpdGUoY29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZv
aWQgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChz
dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0m
IGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBj
aGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykgeyBy
ZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNpZ25l
ZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgdW5z
aWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZv
aWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVuc2lv
bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25fXyBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNp
Z25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBv
cGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91
YmxlKW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKTsKCgoKICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhp
cyk7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhp
cyk7IHJldHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoK
Cgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3Rl
ZDoKICAgIHNpemVfdCAgIF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgog
ICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwg
b3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIs
IGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBn
ZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVh
bSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlz
dHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0g
J1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlz
dHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAg
IGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
JykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYg
Z2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsg
cmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIHJl
YWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBj
aGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBu
KTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQodm9p
ZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7
IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAg
ICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpbnQgaXBm
eChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1
cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYo
KS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQgJiYgKGZs
YWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAx
OwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpm
YWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1
c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7Cgkg
IGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICghZ29vZCgp
KSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChf
dGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAgcmV0dXJu
IDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7IGlmICgh
aXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMo
KTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAgICAgICBp
c2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAg
IHNpemVfdCAgIGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9y
ZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJl
YW0mIHNlZWtnKHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVr
X2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBj
aCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVh
cihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRi
aXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0
IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9s
aXN0ICBhcmdzKTsKCgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChj
aGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVy
biBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBj
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVy
YXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBj
KSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
aW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9f
IGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
ZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0
aGlzO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpm
dW5jKSgqdGhpcyk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07Cgpj
bGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGlj
OgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0q
dGllZD0gX19udWxsICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlz
dHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9z
dHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAK
ZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0
cmVhbV93aXRoYXNzaWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYg
aW5zKTsKZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVh
bSYgbG9jayhvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBv
dXRzKTsKCnN0cnVjdCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9z
JiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1
cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpk
ZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBp
KQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4g
aTsgfQp9ICAKCgojIDM0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IuaCIgMiAzCgoKIyAxICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCiAKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRw
dXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg
OiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAog
CiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3Rh
bmNlICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0
cnVjdCBvdXRwdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAg
ICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy
YXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAg
dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9U
cCogICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnko
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm
KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUo
Y29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkK
aXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9j
YXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNv
bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2
YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVf
dHlwZShfX2kpOyB9CgoKCgoKIyAyNTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg
MwoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytf
X247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LCAKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9
IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwog
IH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5
OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9y
X3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAg
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAw
KQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19p
Owp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ks
IF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRl
Z29yeShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGlj
OgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVm
IG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2lu
c2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hf
YmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQog
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKCiMgMzc4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAg
IGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZl
cmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gp
IDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3Zh
bHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigp
IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFp
bmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2Vy
dGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2Vy
dF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5h
bWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5l
ciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0
ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29u
c3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIg
PSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDU5ICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0
ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAgICAgICAgY2xh
c3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVjdGVkOgogIF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gp
CiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsK
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot
LV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3Rt
cCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYg
b3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJl
bnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi9sdXNyL2dudS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
aXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
CiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBf
UmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9f
eC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRv
ciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3Ig
aXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2Vs
ZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0
ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0
ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICAgIAogIGl0
ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ug
b3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJl
dHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVu
dDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZm
ZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7
CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJl
bnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVy
ZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwog
IH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50
ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAK
IAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3gu
YmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwg
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0
b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
IF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7
CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsK
fQoKIyA4MDUgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0
ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVy
YXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwog
IF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewog
ICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChf
TV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9
ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0
X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf
TV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRv
cihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRl
cmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisr
KGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsK
ICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAoX194Ll9NX3N0cmVhbSA9
PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3kuX01f
ZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195
Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9z
dHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0
IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6IF9NX3N0
cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBf
X3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9f
YykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3Zh
bHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmluZykgKl9N
X3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1faXRl
cmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJh
dG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSAKICBvc3RyZWFtX2l0ZXJh
dG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfSAKfTsKCiMgOTA3ICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAKIAogCiMgMzYgIi9sdXNy
L2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9pdGVyYXRvci5oIiAyIDMKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90
cmFpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNlX3R5cGUg
ewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgeyAKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKICAg
ICAgICAgICAgICAgICAgICAKCgoKCgogICAgCgoKCgoKCgoKIAoKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCiAKIAogCgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0Rf
dHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07CgojIDI5NSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m
YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8
PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19p
bnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxp
bnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVn
ZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07CgoKCgoKIAogCiAKIyAzOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yLmgiIDIgMwoKCgoj
IDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3RydWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL25ldy5oIiAxIDMKIAoKCgoKIyAxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbmV3IiAxIDMKIAogCgoK
CgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCiMgOCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9p
bmNsdWRlL25ldyIgMiAzCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBl
eGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlv
biAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBi
YWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9u
ICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQg
KCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxl
cikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxl
cik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5l
eHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lk
IHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbmV3IiAyIDMKCgpleHRlcm4gIkMrKyIg
ewoKbmFtZXNwYWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24g
ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkg
eyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHt9OwogIGV4
dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxl
cikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19oYW5kbGVyKTsKCn0gIAoK
IAp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBv
cGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAo
dm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpu
b3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBz
dGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9p
ZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVy
YXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQpp
bmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7
IHJldHVybiBwbGFjZTsgfQp9ICAKCgojIDYgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9uZXcuaCIgMiAzCgoKdXNpbmcgc3RkOjpuZXdfaGFu
ZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyAzNCAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgoKIAoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp
bmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9U
MSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9fcCkgX1QxKF9fdmFsdWUpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsK
ICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgpp
bmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJ
dGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewog
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJz
dCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKaW5saW5lIHZvaWQgZGVzdHJveShjaGFy
KiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoK
IAoKCgogCiAKIAojIDQyICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IuaCIgMiAzCgoKCiMgMSAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LCBjbGFzcyBfVHA+CmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9G
b3J3YXJkSXRlcmF0b3IgX01faXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9G
b3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQogIHJhd19zdG9yYWdlX2l0ZXJh
dG9yJiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9y
JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsKICAgIGNvbnN0cnVjdCgmKl9NX2l0
ZXIsIF9fZWxlbWVudCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfSAgICAgICAgCiAgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsr
X01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRl
cmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVy
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNzMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmF3
X3N0b3JhZ2VfaXRlci5oIiAzCgoKIAoKCgogCiAKIAojIDQ1ICIvbHVzci9nbnUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRl
cmF0b3IuaCIgMiAzCgoKCiMgOTggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5oIiAzCgoKCgog
CiAKIAojIDMzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4x
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL2x1c3Iv
Z251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK
CiMgMjY5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MiAzCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqICBfX3NyYywKCQkJICAgIHNpemVfdCBfX24pICA7CiAKCmV4dGVybiB2b2lkICogIG1l
bW1vdmUgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNp
emVfdCBfX24pICA7CgogCgoKZXh0ZXJuIHZvaWQgKiAgX19tZW1jY3B5ICAodm9pZCAqICBfX2Rl
c3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICAgIGludCBfX2MsIHNpemVfdCBfX24p
ICA7CgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19uKSAgOwoKCgogCmV4dGVybiB2
b2lkICogIG1lbXNldCAgKHZvaWQgKiAgX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSAgOwoKIApl
eHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAg
X19zMiwKCQkJc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25z
dCB2b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIDsKCgogCmV4dGVybiBjaGFyICpz
dHJjcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMpICA7CiAKZXh0ZXJuIGNo
YXIgKnN0cm5jcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBf
X24pICA7CgogCmV4dGVybiBjaGFyICpzdHJjYXQgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19zcmMpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgIChjaGFyICpfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24pICA7CgogCmV4dGVybiBpbnQgc3RyY21wICAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICA7CiAKZXh0ZXJuIGludCBzdHJu
Y21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p
ICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyKSAgOwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAgKGNoYXIgKl9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikgIDsKCgogCmV4dGVybiBjaGFyICpfX3N0cmR1
cCAgKF9fY29uc3QgY2hhciAqX19zKSAgOwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBj
aGFyICpfX3MpICA7CgoKIAoKCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgIChfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nLCBzaXplX3QgX19uKSAgOwoKCgoKIyAxMjEgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSAgOwogCmV4dGVybiBjaGFyICpzdHJyY2hyICAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
ICA7CgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gIChfX2NvbnN0IGNo
YXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIDsKIApleHRlcm4gY2hhciAqc3RycGJy
ayAgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSAgOwogCmV4dGVy
biBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq
X19uZWVkbGUpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2RlbGltKSAgOwoKCiAKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAgKGNoYXIgKl9fcywg
X19jb25zdCBjaGFyICpfX2RlbGltLAoJCQkgICAgY2hhciAqKl9fc2F2ZV9wdHIpICA7CgoKCgoK
CgoKCgoKIApleHRlcm4gc2l6ZV90IHN0cmxlbiAgKF9fY29uc3QgY2hhciAqX19zKSAgOwoKIyAx
NzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpzdHJlcnJvciAg
KGludCBfX2Vycm51bSkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgIChpbnQgX19l
cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pICA7CmV4dGVybiBjaGFyICpzdHJl
cnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwoK
CgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICogIF9fc3JjLCB2b2lkICogIF9f
ZGVzdCwgc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywg
c2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIGludCBiY21wICAoX19jb25zdCB2b2lkICogIF9fczEs
IF9fY29uc3Qgdm9pZCAqICBfX3MyLCBzaXplX3QgX19uKSAgOwoKIApleHRlcm4gY2hhciAqaW5k
ZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRl
eCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgOwoKIAoKZXh0ZXJuIGludCBmZnMgIChp
bnQgX19pKSAgOwoKIApleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKSAgOwpleHRlcm4gaW50IHN0cmNhc2VjbXAgIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIDsKCiAKZXh0ZXJuIGludCBfX3N0cm5j
YXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAg
ICBzaXplX3QgX19uKSAgOwpleHRlcm4gaW50IHN0cm5jYXNlY21wICAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90IF9fbikgIDsKCgoKIAoKZXh0
ZXJuIGNoYXIgKl9fc3Ryc2VwICAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2Rl
bGltKSAgOwpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBj
aGFyICpfX2RlbGltKSAgOwoKCiMgMjQxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIApl
eHRlcm4gY2hhciAqYmFzZW5hbWUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpICA7CgoKfSAK
CgojIDQ4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgi
IDEgMwogCgoKIAoKCgoKCiAKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgi
IDEgMwogCgoKIAoKIyAxMTQgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvcG9z
aXgxX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKIAoKCiAK
CgogCgoKIAoKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK
IAoKCiAKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxfbGltLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwoKCgoK
CgoKCgoKCgoKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9sb2NhbF9saW0uaCIgMiAzCgoKIAoKIAoK
CiAKCiAKCgogCgogCgojIDkyICIvdXNyL2luY2x1ZGUvcG9zaXgxX2xpbS5oIiAyIDMKCgoKCgoK
CgogCgoKCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgoKCgoKCgoKICAKIAogCiAKIAojIDUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKCgojIDEy
OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgojIDExNyAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N5
c2xpbWl0cy5oIiAyIDMKCgojIDExICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgog
CgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoK
CgoKCgoKCgoKCgoKIAoKCgojIDEwNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgNDkgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgojIDEgIi9sdXNyL2du
dS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCgoKCgoKCiAKCgojIDE5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoK
IyAyNjkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMKCgpleHRlcm4gIkMiIHsgCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJ
IAogICAgaW50IHJlbTsJCQkgCiAgfSBkaXZfdDsKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBs
b25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGRpdl90OwoKCgoKCgoK
CgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBpbnQgX19jdHlwZV9nZXRfbWJfY3VyX21heCAgKHZv
aWQpICA7CgoKIApleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsK
IApleHRlcm4gaW50IGF0b2kgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsKIApleHRlcm4gbG9u
ZyBpbnQgYXRvbCAgKF9fY29uc3QgY2hhciAqX19ucHRyKSAgOwoKCiAKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgYXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsKCgogCmV4dGVybiBkb3VibGUg
c3RydG9kICAoX19jb25zdCBjaGFyICpfX25wdHIsIGNoYXIgKipfX2VuZHB0cikgIDsKCgoKCgoK
CiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoq
X19lbmRwdHIsCgkJCSAgICAgaW50IF9fYmFzZSkgIDsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgc3RydG91bCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgIDsKCgogCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAgKF9f
Y29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoqX19lbmRwdHIsCgkJCQkgIGludCBfX2Jhc2UpICA7
CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAgKF9fY29uc3QgY2hhciAq
X19ucHRyLAoJCQkJCSAgICBjaGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UpICA7CgoKCiAKCiAK
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFy
ICoqX19lbmRwdHIsCgkJCQkgICBpbnQgX19iYXNlKSAgOwogCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHN0cnRvdWxsICAoX19jb25zdCBjaGFyICpfX25wdHIsCgkJCQkJICAgICBjaGFy
ICoqX19lbmRwdHIsIGludCBfX2Jhc2UpICA7CgoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRv
ZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJICAgICAgY2hhciAqKl9fZW5k
cHRyLCBpbnQgX19ncm91cCkgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsICAoX19j
b25zdCBjaGFyICpfX25wdHIsIGNoYXIgKipfX2VuZHB0ciwKCQkJCSAgICAgaW50IF9fZ3JvdXAp
ICA7CmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX25wdHIsCgkJCQkJCWNoYXIgKipfX2VuZHB0ciwgaW50IF9fZ3JvdXApICA7CmV4dGVybiBs
b25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoq
X19lbmRwdHIsCgkJCQkJaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICA7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJ
CQkJICBjaGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UsCgkJCQkJCSAgaW50IF9fZ3JvdXApICA7
CgpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvcV9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAq
X19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fZW5kcHRyLCBpbnQgX19iYXNlLAoJCQkJCSAgICAg
aW50IF9fZ3JvdXApICA7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91cV9p
bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJCQkgICAgICAgY2hhciAqKl9fZW5k
cHRyLAoJCQkJCQkgICAgICAgaW50IF9fYmFzZSwKCQkJCQkJICAgICAgIGludCBfX2dyb3VwKSAg
OwoKCiMgMTk3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKCiAKCgpleHRlcm4gY2hhciAq
bDY0YSAgKGxvbmcgaW50IF9fbikgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0
IGNoYXIgKl9fcykgIDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKCgoKdHlwZWRlZiBfX3VfY2hh
ciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2lu
dDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVk
ZWYgX19kZXZfdCBkZXZfdDsKdHlwZWRlZiBfX2dpZF90IGdpZF90Owp0eXBlZGVmIF9faW5vX3Qg
aW5vX3Q7CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90Owp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190
Owp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90Owp0eXBlZGVm
IF9fcGlkX3QgcGlkX3Q7CnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgp0eXBlZGVmIF9fc3NpemVf
dCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRy
X3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgoKCiMgOTcgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoj
IDI4MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoK
CgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA3
MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnQ7CgoKIAoKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CgoKIAoKCgoKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAg
X19RSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50
IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lf
XyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBf
X0RJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoKCiAKIyAxICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoj
IDEgIi91c3IvaW5jbHVkZS9ieXRlc2V4LmgiIDEgMwogCgoKIyAzNCAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAyIDMKCgoKCgoKCgoKCiMgMTIzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCiAKCgogCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMSAzCiAKCgojIDEgIi91c3IvaW5j
bHVkZS9zZWxlY3RiaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDUwICIvdXNyL2luY2x1ZGUvc2VsZWN0Yml0cy5oIiAzCgojIDY1ICIvdXNyL2lu
Y2x1ZGUvc2VsZWN0Yml0cy5oIiAzCgoKCiMgNCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMiAzCgoKCgoKIyAxOCAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3Nl
bGVjdGJpdHMuaCIgMwoKCgoKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
IAoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjgg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
CgoKCgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAg
ICBsb25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKCiMgMTI1ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCgoKCiMgMjgxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzUgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3RydWN0IHRpbWV2
YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRfc2V0IGZkX3Nl
dDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0ICAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0ZWZkcywgX19m
ZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICA7CmV4
dGVybiBpbnQgc2VsZWN0ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19m
ZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2
YWwgKl9fdGltZW91dCkgIDsKCiAKCgpleHRlcm4gaW50IF9fcHNlbGVjdCAgKGludCBfX25mZHMs
IF9fZmRfc2V0ICpfX3JlYWRmZHMsCgkJCSAgIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl
dCAqX19leGNlcHRmZHMsCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSAgOwpleHRl
cm4gaW50IHBzZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgX19m
ZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJIHN0cnVjdCB0aW1l
c3BlYyAqX190aW1lb3V0KSAgOwoKCn0gCgoKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKCgp9IAoKCiMgMjEwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAKCgoK
IApleHRlcm4gaW50MzJfdCBfX3JhbmRvbSAgKHZvaWQpICA7CmV4dGVybiBpbnQzMl90IHJhbmRv
bSAgKHZvaWQpICA7CgogCmV4dGVybiB2b2lkIF9fc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3Nl
ZWQpICA7CmV4dGVybiB2b2lkIHNyYW5kb20gICh1bnNpZ25lZCBpbnQgX19zZWVkKSAgOwoKIAoK
CgpleHRlcm4gdm9pZCAqICBfX2luaXRzdGF0ZSAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQg
KiAgX19zdGF0ZWJ1ZiwKCQkJCSBzaXplX3QgX19zdGF0ZWxlbikgIDsKZXh0ZXJuIHZvaWQgKiAg
aW5pdHN0YXRlICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRlYnVmLAoJCQkg
ICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pICA7CgogCgpleHRlcm4gdm9pZCAqICBfX3NldHN0YXRl
ICAodm9pZCAqICBfX3N0YXRlYnVmKSAgOwpleHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQg
KiAgX19zdGF0ZWJ1ZikgIDsKCgoKIAoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQz
Ml90ICpmcHRyOwkJIAogICAgaW50MzJfdCAqcnB0cjsJCSAKICAgIGludDMyX3QgKnN0YXRlOwkJ
IAogICAgaW50IHJhbmRfdHlwZTsJCSAKICAgIGludCByYW5kX2RlZzsJCSAKICAgIGludCByYW5k
X3NlcDsJCSAKICAgIGludDMyX3QgKmVuZF9wdHI7CQkgCiAgfTsKCmV4dGVybiBpbnQgX19yYW5k
b21fciAgKHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYsIGludDMyX3QgKl9fcmVzdWx0KSAgOwpl
eHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJfdCAq
X19yZXN1bHQpICA7CgpleHRlcm4gaW50IF9fc3JhbmRvbV9yICAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgOwoKZXh0ZXJu
IGludCBfX2luaXRzdGF0ZV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRl
YnVmLAoJCQkgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21fZGF0YSAqX19i
dWYpICA7CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lk
ICogIF9fc3RhdGVidWYsCgkJCSAgICAgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21f
ZGF0YSAqX19idWYpICA7CgpleHRlcm4gaW50IF9fc2V0c3RhdGVfciAgKHZvaWQgKiAgX19zdGF0
ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKZXh0ZXJuIGludCBzZXRzdGF0ZV9y
ICAodm9pZCAqICBfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgOwoKCgoK
IApleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgOwogCmV4dGVybiB2b2lkIHNyYW5kICAodW5zaWdu
ZWQgaW50IF9fc2VlZCkgIDsKCgogCmV4dGVybiBpbnQgX19yYW5kX3IgICh1bnNpZ25lZCBpbnQg
Kl9fc2VlZCkgIDsKZXh0ZXJuIGludCByYW5kX3IgICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgIDsK
CgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9pZCkgIDsKZXh0ZXJuIGRvdWJsZSBl
cmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICA7CgogCmV4dGVybiBsb25n
IGxyYW5kNDggICh2b2lkKSAgOwpleHRlcm4gbG9uZyBucmFuZDQ4ICAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10pICA7CgogCmV4dGVybiBsb25nIG1yYW5kNDggICh2b2lkKSAgOwpleHRl
cm4gbG9uZyBqcmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICA7CgogCmV4
dGVybiB2b2lkIHNyYW5kNDggIChsb25nIF9fc2VlZHZhbCkgIDsKZXh0ZXJuIHVuc2lnbmVkIHNo
b3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgIDsKZXh0
ZXJuIHZvaWQgbGNvbmc0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSAgOwoKIApz
dHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSAKICAg
IHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsJIAog
ICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOyAgCiAgICBpbnQgaW5pdDsJCQkgCiAgfTsK
CgogCmV4dGVybiBpbnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIs
IGRvdWJsZSAqX19yZXN1bHQpICA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLCBk
b3VibGUgKl9fcmVzdWx0KSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fYnVmZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4
X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19idWZmZXIsIGxvbmcgKl9fcmVzdWx0KSAgOwoKIApleHRlcm4gaW50IG1yYW5kNDhf
ciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKZXh0
ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIsIGxvbmcgKl9fcmVzdWx0KSAgOwoKIApleHRl
cm4gaW50IHNyYW5kNDhfciAgKGxvbmcgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgIDsKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICA7CmV4dGVybiBp
bnQgbGNvbmc0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgOwoKCiAKZXh0ZXJuIGludCBfX2RyYW5kNDhfaXRl
cmF0ZSAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkJICAgc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19idWZmZXIpICA7CgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6ZV90
IF9fc2l6ZSkgIDsKIAoKZXh0ZXJuIHZvaWQgKiAgcmVhbGxvYyAgKHZvaWQgKiAgX19wdHIsIHNp
emVfdCBfX3NpemUpICA7CiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUpICA7CiAKZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICA7
CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19wdHIpICA7CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2FsbG9jYS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2x1c3Iv
Z251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKCgoKCgoKIAoKCiMgMTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAK
CgojIDI2OSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKIApleHRlcm4gdm9pZCAqICBfX2FsbG9jYSAgKHNp
emVfdCBfX3NpemUpICA7CmV4dGVybiB2b2lkICogIGFsbG9jYSAgKHNpemVfdCBfX3NpemUpICA7
CgoKCgoKCn0gCgoKIyAzNjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgogCmV4dGVy
biB2b2lkICogIHZhbGxvYyAgKHNpemVfdCBfX3NpemUpICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJv
cnQgICh2b2lkKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBp
bnQgYXRleGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgOwoKCiAKCmV4dGVybiBpbnQgX19v
bl9leGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJ
CSAgIHZvaWQgKiAgX19hcmcpICA7CmV4dGVybiBpbnQgb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMp
IChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgdm9pZCAqICBfX2FyZykgIDsKCgog
CgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBfX3N0YXR1cykgICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKIApleHRlcm4gY2hhciAqZ2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25h
bWUpICA7CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52ICAoX19jb25zdCBjaGFyICpf
X25hbWUpICA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAgKF9fY29uc3QgY2hhciAqX19zdHJp
bmcpICA7CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUsIF9f
Y29uc3QgY2hhciAqX192YWx1ZSwKCQkJaW50IF9fcmVwbGFjZSkgIDsKCiAKZXh0ZXJuIHZvaWQg
dW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIDsKCgoKIAoKCmV4dGVybiBpbnQgX19j
bGVhcmVudiAgKHZvaWQpICA7CmV4dGVybiBpbnQgY2xlYXJlbnYgICh2b2lkKSAgOwoKCgoKIAoK
CgpleHRlcm4gY2hhciAqbWt0ZW1wICAoY2hhciAqX190ZW1wbGF0ZSkgIDsKCiAKCgoKCmV4dGVy
biBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICA7CgoKCiAKZXh0ZXJuIGludCBzeXN0
ZW0gIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgIDsKCgoKCgoKCgoKCiAKCgoKCgpleHRlcm4g
Y2hhciAqcmVhbHBhdGggIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCkg
IDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgIChfX2NvbnN0IHZvaWQgKiAs
IF9fY29uc3Qgdm9pZCAqICkgIDsKCgoKCgoKIAoKZXh0ZXJuIHZvaWQgKiAgYnNlYXJjaCAgKF9f
Y29uc3Qgdm9pZCAqICBfX2tleSwgX19jb25zdCB2b2lkICogIF9fYmFzZSwKCQkJICAgICBzaXpl
X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KSAgOwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9fYmFzZSwgc2l6ZV90IF9fbm1l
bWIsIHNpemVfdCBfX3NpemUsCgkJCV9fY29tcGFyX2ZuX3QgX19jb21wYXIpICA7CgoKIApleHRl
cm4gaW50IGFicyAgKGludCBfX3gpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbG9uZyBpbnQgbGFicyAgKGxvbmcgaW50IF9feCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgoKIAoKIApleHRlcm4gZGl2X3QgZGl2ICAoaW50IF9fbnVtZXIsIGludCBfX2Rl
bm9tKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2ICAo
bG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgoKCiAKCgogCgoKZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJCWludCAqX19zaWduKSAgOwoKIAoKCmV4
dGVybiBjaGFyICpmY3Z0ICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX2Rl
Y3B0LAoJCQlpbnQgKl9fc2lnbikgIDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgOwoKIApleHRlcm4gY2hhciAqcWVj
dnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJ
CSBpbnQgKl9fc2lnbikgIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX2RlY3B0LAoJCQkgaW50ICpfX3NpZ24pICA7CmV4dGVy
biBjaGFyICpxZ2N2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIg
Kl9fYnVmKSAgOwoKCgogCgpleHRlcm4gaW50IGVjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19kZWNwdCwKCQkJaW50ICpfX3NpZ24sIGNoYXIgKl9fYnVmLCBzaXpl
X3QgX19sZW4pICA7CmV4dGVybiBpbnQgZmN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX2RlY3B0LAoJCQlpbnQgKl9fc2lnbiwgY2hhciAqX19idWYsIHNpemVfdCBf
X2xlbikgIDsKCmV4dGVybiBpbnQgcWVjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19kZWNwdCwKCQkJIGludCAqX19zaWduLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fbGVuKSAgOwpleHRlcm4gaW50IHFmY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJCSBpbnQgKl9fc2lnbiwgY2hhciAqX19idWYs
IHNpemVfdCBfX2xlbikgIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJsZW4gIChfX2NvbnN0IGNoYXIg
Kl9fcywgc2l6ZV90IF9fbikgIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgICh3Y2hhcl90ICpfX3B3
YywgX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pICA7CiAKCmV4dGVybiBpbnQgd2N0b21i
ICAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpICA7CgoKIApleHRlcm4gc2l6ZV90IG1ic3Rv
d2NzICAod2NoYXJfdCAqX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgIDsK
IApleHRlcm4gc2l6ZV90IHdjc3RvbWJzICAoY2hhciAqX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9f
cHdjcywgc2l6ZV90IF9fbikgIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2ggIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpICA7CgoKCiMgNTgyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
CgoKCgoKCgoKCn0gCgoKIyA1MCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMK
CiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA1MSAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBf
VHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lk
IGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0
ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBfX3Rt
cCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19j
b21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19i
IDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl
cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9kaXNw
YXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0
dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0
YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJl
dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3Ry
aXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAg
ICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0K
CiMgMjEzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAK
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19j
b3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2Fy
ZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+
IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3Qg
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBf
Q2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRp
cmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jl
c3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBl
Pgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s
YXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9U
cCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBf
VHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0
LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwg
Y2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAg
ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U
cml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
fQoKIyAzMDMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFp
cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7
CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091
dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0
ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+
KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9u
KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAg
fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly
c3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1p
c21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29s
IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9f
Zmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJl
dHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGlu
ZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsK
ICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVf
dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVt
Y21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBi
b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19m
aXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2Zp
cnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9Cgppbmxp
bmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19m
aXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAK
ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29t
cGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNo
YXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzNiAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdW5pbml0
aWFsaXplZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgogCgog
CiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJl
dHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFs
aXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1
bHQ7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsr
X19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19j
dXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7
IH0gOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVHA+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJk
SXRlcgogIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7Cn0K
CmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29u
c3QgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9f
cmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJf
dCogCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hh
cl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewogIG1l
bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2Zp
cnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K
cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZv
ciAoIDsgX19jb3VudCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgCiAgICAg
IGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy
LCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0
cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBh
aXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf
bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9
IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9y
d2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
aXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5w
dXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFz
dCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk
Cl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19m
YWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAg
IGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1
ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRo
cm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICAgICAgICAgICAgICAgICAK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1
bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJz
dCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFs
c2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBm
b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwg
X194KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmly
c3QsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlciAK
X191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVy
IAp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs
IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKCiAKIAogCiAKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3
YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJk
SXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpOwogIHRyeSAgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19s
YXN0MiwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlk
KSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlk
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1
bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSAgewogICAgcmV0
dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0
Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAog
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgIHsKICAgIHVu
aW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikg
eyAgZGVzdHJveShfX2ZpcnN0MiwgX19taWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAoj
IDM5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMiAzCgoKCiMgNjUgIi9sdXNyL2dudS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9hbGdvYmFzZS5oIiAzCgoKCgogCiAKIAojIDMwICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9y
LmgiIDIgMwoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45
NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKIyAxICIvbHVz
ci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDM0MiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9j
LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQg
X19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sCgkJCQlfX2NvbnN0IGNo
YXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQlfX2NvbnN0IGNoYXIgKl9f
ZnVuY3Rpb24pICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCmV4dGVy
biB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsICAoaW50IF9fZXJybnVtLAoJCQkJICAgICAgIF9f
Y29uc3QgY2hhciAqX19maWxlLAoJCQkJICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkg
ICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDU2ICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgogICAgIAogICAgIAogICAgIAoj
IDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCiAKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm9z
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l
cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDQgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKCgojIDE0ICIv
dXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMwoKCgojIDI0ICIvdXNyL2luY2x1ZGUvZXJybm9z
LmgiIDIgMwoKCgogCmV4dGVybiBpbnQgZXJybm87CgogCmV4dGVybiBpbnQgKl9fZXJybm9fbG9j
YXRpb24gICh2b2lkKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNDQgIi91c3Iv
aW5jbHVkZS9lcnJub3MuaCIgMwoKCgogCgoKCgoKCgoKCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAyIDMKCgoKCgogCgoKCgoKCgoKIyA2MyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMK
CgoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAx
IDMKIAoKCiAKCiMgMTE0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgojIDY4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgODAgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKCgoKCiMgOTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgojIDEyNSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDI4MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
CgojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9z
Y2hlZGJpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIApzdHJ1Y3Qg
c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKCiAKCgoKCgoKCgog
CmV4dGVybiBpbnQgX19jbG9uZSAgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9f
Y2hpbGRfc3RhY2ssCgkJCSBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpICA7CgpleHRlcm4gaW50
IGNsb25lICAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywK
CQkgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSAgOwoKCgoKIyAzMiAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3Nl
dHBhcmFtICAoX19waWRfdCBfX3BpZCwKCQkJCSAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pICA7CmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLAoJ
CQkJX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7CgogCmV4dGVybiBpbnQg
X19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w
YXJhbSkgIDsKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVk
dWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxl
ciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNjaGVkdWxl
ciAgKF9fcGlkX3QgX19waWQpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyICAoX19w
aWRfdCBfX3BpZCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICAodm9pZCkgIDsKZXh0
ZXJuIGludCBzY2hlZF95aWVsZCAgKHZvaWQpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRf
cHJpb3JpdHlfbWF4ICAoaW50IF9fYWxnb3JpdGhtKSAgOwpleHRlcm4gaW50IHNjaGVkX2dldF9w
cmlvcml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9n
ZXRfcHJpb3JpdHlfbWluICAoaW50IF9fYWxnb3JpdGhtKSAgOwpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9taW4gIChpbnQgX19hbGdvcml0aG0pICA7CgogCmV4dGVybiBpbnQgX19zY2hl
ZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkg
IDsKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9fcGlkLCBzdHJ1
Y3QgdGltZXNwZWMgKl9fdCkgIDsKCn0gCgoKIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKCgoKIAoKCgoKIAoKCgogCgoKCiAKCgoKIAoK
CgogCgoKIAoKCiAKCgoKCiAKCgogCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Bvc2l4X29w
dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKIAoKCiMg
MTM3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgogCgoKCgoKIAoKCgoKCgoKCgoKIyAx
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgog
CgoKIyAxMjYgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKCiMgMjY5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMTU3ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDIgMwoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBfX2FjY2VzcyAgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSAgOwpleHRlcm4gaW50IGFjY2VzcyAgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSAgOwoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAK
CgoKCmV4dGVybiBfX29mZl90IF9fbHNlZWsgIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwg
aW50IF9fd2hlbmNlKSAgOwpleHRlcm4gX19vZmZfdCBsc2VlayAgKGludCBfX2ZkLCBfX29mZl90
IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpICA7CgogCmV4dGVybiBpbnQgX19jbG9zZSAgKGludCBf
X2ZkKSAgOwpleHRlcm4gaW50IGNsb3NlICAoaW50IF9fZmQpICA7CgogCgpleHRlcm4gc3NpemVf
dCAgX19yZWFkICAoaW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBfX25ieXRlcykgIDsK
ZXh0ZXJuIHNzaXplX3QgIHJlYWQgIChpbnQgX19mZCwgdm9pZCAqICBfX2J1Ziwgc2l6ZV90IF9f
bmJ5dGVzKSAgOwoKIApleHRlcm4gc3NpemVfdCAgX193cml0ZSAgKGludCBfX2ZkLCBfX2NvbnN0
IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICA7CmV4dGVybiBzc2l6ZV90ICB3cml0ZSAgKGlu
dCBfX2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICA7CgoKIAoKCgpleHRl
cm4gaW50IF9fcGlwZSAgKGludCBfX3BpcGVkZXNbMl0pICA7CmV4dGVybiBpbnQgcGlwZSAgKGlu
dCBfX3BpcGVkZXNbMl0pICA7CgogCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gICh1
bnNpZ25lZCBpbnQgX19zZWNvbmRzKSAgOwoKIAoKCgoKCgpleHRlcm4gdW5zaWduZWQgaW50IHNs
ZWVwICAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgIDsKCgogCgoKCmV4dGVybiB1bnNpZ25lZCBp
bnQgdWFsYXJtICAodW5zaWduZWQgaW50IF9fdmFsdWUsCgkJCQkgdW5zaWduZWQgaW50IF9faW50
ZXJ2YWwpICA7CgogCgpleHRlcm4gdm9pZCB1c2xlZXAgICh1bnNpZ25lZCBpbnQgX191c2Vjb25k
cykgIDsKCgoKIAoKZXh0ZXJuIGludCBwYXVzZSAgKHZvaWQpICA7CgoKIApleHRlcm4gaW50IF9f
Y2hvd24gIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJIF9fdWlkX3QgX19vd25lciwgX19naWRf
dCBfX2dyb3VwKSAgOwpleHRlcm4gaW50IGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ
ICAgICAgIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSAgOwoKCiAKZXh0ZXJuIGlu
dCBfX2ZjaG93biAgKGludCBfX2ZkLAoJCQkgIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dy
b3VwKSAgOwpleHRlcm4gaW50IGZjaG93biAgKGludCBfX2ZkLAoJCQlfX3VpZF90IF9fb3duZXIs
IF9fZ2lkX3QgX19ncm91cCkgIDsKCgogCgpleHRlcm4gaW50IF9fbGNob3duICAoX19jb25zdCBj
aGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwKCQkJICBfX2dpZF90IF9fZ3JvdXApICA7CmV4
dGVybiBpbnQgbGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwK
CQkJX19naWRfdCBfX2dyb3VwKSAgOwoKCgogCmV4dGVybiBpbnQgX19jaGRpciAgKF9fY29uc3Qg
Y2hhciAqX19wYXRoKSAgOwpleHRlcm4gaW50IGNoZGlyICAoX19jb25zdCBjaGFyICpfX3BhdGgp
ICA7CgoKIApleHRlcm4gaW50IGZjaGRpciAgKGludCBfX2ZkKSAgOwoKCiAKCgoKCgoKZXh0ZXJu
IGNoYXIgKl9fZ2V0Y3dkICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpICA7CmV4dGVybiBj
aGFyICpnZXRjd2QgIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgIDsKCiMgMzE3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoKCmV4dGVybiBjaGFyICpnZXR3ZCAgKGNoYXIgKl9f
YnVmKSAgOwoKCgogCmV4dGVybiBpbnQgX19kdXAgIChpbnQgX19mZCkgIDsKZXh0ZXJuIGludCBk
dXAgIChpbnQgX19mZCkgIDsKCiAKZXh0ZXJuIGludCBfX2R1cDIgIChpbnQgX19mZCwgaW50IF9f
ZmQyKSAgOwpleHRlcm4gaW50IGR1cDIgIChpbnQgX19mZCwgaW50IF9fZmQyKSAgOwoKIApleHRl
cm4gY2hhciAqKl9fZW52aXJvbjsKCgoKCgogCgpleHRlcm4gaW50IF9fZXhlY3ZlICAoX19jb25z
dCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCgkJCSAgY2hhciAqX19jb25z
dCBfX2VudnBbXSkgIDsKZXh0ZXJuIGludCBleGVjdmUgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
Y2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKCQkJY2hhciAqX19jb25zdCBfX2VudnBbXSkgIDsKCgoK
CgoKCgoKCiAKZXh0ZXJuIGludCBleGVjdiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpf
X2NvbnN0IF9fYXJndltdKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjbGUgIChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSAgOwoKIAoKZXh0ZXJuIGludCBleGVj
bCAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICA7Cgog
CgpleHRlcm4gaW50IGV4ZWN2cCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0
IF9fYXJndltdKSAgOwoKIAoKCmV4dGVybiBpbnQgZXhlY2xwICAoX19jb25zdCBjaGFyICpfX2Zp
bGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgIDsKCgoKIApleHRlcm4gaW50IG5pY2UgIChp
bnQgX19pbmMpICA7CgoKCiAKZXh0ZXJuIHZvaWQgX2V4aXQgIChpbnQgX19zdGF0dXMpICAgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9jb25m
bmFtZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCmVudW0KICB7CiAgICBfUENfTElOS19N
QVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1F
X01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9X
Tl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAg
X1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9Q
Q19TT0NLX01BWEJVRgoKICB9OwoKIAplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1ND
X0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAg
X1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoK
ICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElN
RV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMs
CgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAg
X1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxF
UywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVN
T1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBI
T1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElP
X01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAg
IF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BS
SU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JU
U0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwK
CiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKICAgICAKCiAgICBf
U0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01B
WCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAg
ICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19M
SU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFY
LAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RF
ViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9T
V19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlf
WFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1ND
X1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01B
WElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVU
X0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAg
ICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKICAgICAKICAgIF9TQ19USFJF
QURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0la
RV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFY
LAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJB
VElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01J
TiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFD
S0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BS
SU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1ND
X1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgog
ICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAg
X1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01B
WCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19Y
T1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZ
UFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9T
Q18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAg
ICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBH
NCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9N
SU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklU
LAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8s
CgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9N
SU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJf
TUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hS
VF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1ND
X05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9T
Q19OTF9URVhUTUFYCgogIH07CgoKIAplbnVtCiAgewogICAgX0NTX1BBVEgJCQkgCgogIH07Cgoj
IDM5MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgogCmV4dGVybiBsb25nIGludCBfX3Bh
dGhjb25mICAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpICA7CmV4dGVybiBsb25n
IGludCBwYXRoY29uZiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSAgOwoKIApl
eHRlcm4gbG9uZyBpbnQgX19mcGF0aGNvbmYgIChpbnQgX19mZCwgaW50IF9fbmFtZSkgIDsKZXh0
ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAgKGludCBfX2ZkLCBpbnQgX19uYW1lKSAgOwoKIApleHRl
cm4gbG9uZyBpbnQgX19zeXNjb25mICAoaW50IF9fbmFtZSkgIDsKZXh0ZXJuIGxvbmcgaW50IHN5
c2NvbmYgIChpbnQgX19uYW1lKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBjb25mc3RyICAoaW50IF9f
bmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgIDsKCgoKIApleHRlcm4gX19waWRfdCBf
X2dldHBpZCAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IGdldHBpZCAgKHZvaWQpICA7CgogCmV4
dGVybiBfX3BpZF90IF9fZ2V0cHBpZCAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IGdldHBwaWQg
ICh2b2lkKSAgOwoKIApleHRlcm4gX19waWRfdCBnZXRwZ3JwICAodm9pZCkgIDsKCiAKCgpleHRl
cm4gaW50IHNldHBnaWQgIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgIDsKCiAKZXh0
ZXJuIF9fcGlkX3QgX19nZXRwZ2lkICAoX19waWRfdCBfX3BpZCkgIDsKCgoKCgogCgoKCgoKCgoK
CgoKIAoKZXh0ZXJuIGludCBzZXRwZ3JwICAodm9pZCkgIDsKCgoKCgoKCgoKIAoKCmV4dGVybiBf
X3BpZF90IF9fc2V0c2lkICAodm9pZCkgIDsKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICAodm9pZCkg
IDsKCgoKCgoKIApleHRlcm4gX191aWRfdCBfX2dldHVpZCAgKHZvaWQpICA7CmV4dGVybiBfX3Vp
ZF90IGdldHVpZCAgKHZvaWQpICA7CgogCmV4dGVybiBfX3VpZF90IF9fZ2V0ZXVpZCAgKHZvaWQp
ICA7CmV4dGVybiBfX3VpZF90IGdldGV1aWQgICh2b2lkKSAgOwoKIApleHRlcm4gX19naWRfdCBf
X2dldGdpZCAgKHZvaWQpICA7CmV4dGVybiBfX2dpZF90IGdldGdpZCAgKHZvaWQpICA7CgogCmV4
dGVybiBfX2dpZF90IF9fZ2V0ZWdpZCAgKHZvaWQpICA7CmV4dGVybiBfX2dpZF90IGdldGVnaWQg
ICh2b2lkKSAgOwoKIAoKCmV4dGVybiBpbnQgX19nZXRncm91cHMgIChpbnQgX19zaXplLCBfX2dp
ZF90IF9fbGlzdFtdKSAgOwpleHRlcm4gaW50IGdldGdyb3VwcyAgKGludCBfX3NpemUsIF9fZ2lk
X3QgX19saXN0W10pICA7CgoKCgoKCgogCgoKCmV4dGVybiBpbnQgX19zZXR1aWQgIChfX3VpZF90
IF9fdWlkKSAgOwpleHRlcm4gaW50IHNldHVpZCAgKF9fdWlkX3QgX191aWQpICA7CgoKIAoKZXh0
ZXJuIGludCBfX3NldHJldWlkICAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSAgOwpl
eHRlcm4gaW50IHNldHJldWlkICAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSAgOwoK
CgogCmV4dGVybiBpbnQgc2V0ZXVpZCAgKF9fdWlkX3QgX191aWQpICA7CgoKIAoKCgpleHRlcm4g
aW50IF9fc2V0Z2lkICAoX19naWRfdCBfX2dpZCkgIDsKZXh0ZXJuIGludCBzZXRnaWQgIChfX2dp
ZF90IF9fZ2lkKSAgOwoKCiAKCmV4dGVybiBpbnQgX19zZXRyZWdpZCAgKF9fZ2lkX3QgX19yZ2lk
LCBfX2dpZF90IF9fZWdpZCkgIDsKZXh0ZXJuIGludCBzZXRyZWdpZCAgKF9fZ2lkX3QgX19yZ2lk
LCBfX2dpZF90IF9fZWdpZCkgIDsKCgoKIApleHRlcm4gaW50IHNldGVnaWQgIChfX2dpZF90IF9f
Z2lkKSAgOwoKCgogCgoKZXh0ZXJuIF9fcGlkX3QgX19mb3JrICAodm9pZCkgIDsKZXh0ZXJuIF9f
cGlkX3QgZm9yayAgKHZvaWQpICA7CgoKIAoKCgpleHRlcm4gX19waWRfdCBfX3Zmb3JrICAodm9p
ZCkgIDsKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgICh2b2lkKSAgOwoKCgogCgpleHRlcm4gY2hhciAq
dHR5bmFtZSAgKGludCBfX2ZkKSAgOwoKIAoKZXh0ZXJuIGludCBfX3R0eW5hbWVfciAgKGludCBf
X2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwpleHRlcm4gaW50IHR0eW5hbWVf
ciAgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwoKIAoKZXh0ZXJu
IGludCBfX2lzYXR0eSAgKGludCBfX2ZkKSAgOwpleHRlcm4gaW50IGlzYXR0eSAgKGludCBfX2Zk
KSAgOwoKCiAKCmV4dGVybiBpbnQgdHR5c2xvdCAgKHZvaWQpICA7CgoKCiAKZXh0ZXJuIGludCBf
X2xpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAgOwpleHRl
cm4gaW50IGxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAg
OwoKCiAKZXh0ZXJuIGludCBfX3N5bWxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25z
dCBjaGFyICpfX3RvKSAgOwpleHRlcm4gaW50IHN5bWxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJv
bSwgX19jb25zdCBjaGFyICpfX3RvKSAgOwoKIAoKCmV4dGVybiBpbnQgX19yZWFkbGluayAgKF9f
Y29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgOwpleHRlcm4g
aW50IHJlYWRsaW5rICAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3Qg
X19sZW4pICA7CgoKIApleHRlcm4gaW50IF9fdW5saW5rICAoX19jb25zdCBjaGFyICpfX25hbWUp
ICA7CmV4dGVybiBpbnQgdW5saW5rICAoX19jb25zdCBjaGFyICpfX25hbWUpICA7CgogCmV4dGVy
biBpbnQgX19ybWRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAgOwpleHRlcm4gaW50IHJtZGly
ICAoX19jb25zdCBjaGFyICpfX3BhdGgpICA7CgoKIApleHRlcm4gX19waWRfdCB0Y2dldHBncnAg
IChpbnQgX19mZCkgIDsKCiAKZXh0ZXJuIGludCB0Y3NldHBncnAgIChpbnQgX19mZCwgX19waWRf
dCBfX3BncnBfaWQpICA7CgoKIApleHRlcm4gY2hhciAqZ2V0bG9naW4gICh2b2lkKSAgOwoKCgoK
CgoKCiAKZXh0ZXJuIGludCBzZXRsb2dpbiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgOwoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGdldG9wdCAgKGludCBfX2FyZ2Ms
IGNoYXIgKl9fY29uc3QgKiBfX2FyZ3YsCgkJCV9fY29uc3QgY2hhciAqX19vcHRzKSAgOwpleHRl
cm4gaW50IG9wdGVycjsKZXh0ZXJuIGludCBvcHRpbmQ7CmV4dGVybiBpbnQgb3B0b3B0OwpleHRl
cm4gY2hhciAqb3B0YXJnOwoKCgoKCiAKCgpleHRlcm4gaW50IF9fZ2V0aG9zdG5hbWUgIChjaGFy
ICpfX25hbWUsIHNpemVfdCBfX2xlbikgIDsKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAgKGNoYXIg
Kl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwoKIAoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAgKF9f
Y29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pICA7CgogCgpleHRlcm4gaW50IHNldGhv
c3RpZCAgKGxvbmcgaW50IF9faWQpICA7CgoKIAoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAg
KGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUg
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwoKCiAKZXh0ZXJuIGludCBm
c3luYyAgKGludCBfX2ZkKSAgOwoKCiAKCgpleHRlcm4gaW50IHZoYW5ndXAgICh2b2lkKSAgOwoK
IApleHRlcm4gaW50IHJldm9rZSAgKF9fY29uc3QgY2hhciAqX19maWxlKSAgOwoKCiAKCgoKCmV4
dGVybiBpbnQgcHJvZmlsICAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp
emVfdCBfX3NpemUsCgkJCXNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpICA7
CgoKIAoKCmV4dGVybiBpbnQgYWNjdCAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgOwoKIAoKZXh0
ZXJuIGludCBjaHJvb3QgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgIDsKCgogCmV4dGVybiBjaGFy
ICpnZXR1c2Vyc2hlbGwgICh2b2lkKSAgOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgICh2b2lk
KSAgOyAgCmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAgKHZvaWQpICA7ICAKCgogCgpleHRlcm4g
Y2hhciAqZ2V0cGFzcyAgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpICA7CgogCgoKZXh0ZXJuIGlu
dCBkYWVtb24gIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSAgOwoKCgoKCgogCmV4dGVy
biBsb25nIGludCBnZXRob3N0aWQgICh2b2lkKSAgOwoKIApleHRlcm4gaW50IHN5bmMgICh2b2lk
KSAgOwoKCiAKCmV4dGVybiBpbnQgX19nZXRwYWdlc2l6ZSAgKHZvaWQpICA7CmV4dGVybiBpbnQg
Z2V0cGFnZXNpemUgICh2b2lkKSAgOwoKCiAKZXh0ZXJuIGludCB0cnVuY2F0ZSAgKF9fY29uc3Qg
Y2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSAgOwoKIApleHRlcm4gaW50IGZ0cnVuY2F0
ZSAgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSAgOwoKCiAKCmV4dGVybiBpbnQgX19nZXRk
dGFibGVzaXplICAodm9pZCkgIDsKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICAodm9pZCkgIDsK
CgoKCgoKIAoKZXh0ZXJuIGludCBfX2JyayAgKHZvaWQgKiAgX19hZGRyKSAgOwpleHRlcm4gaW50
IGJyayAgKHZvaWQgKiAgX19hZGRyKSAgOwoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMg
MTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvbHVzci9nbnUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK
CgogCgogCgoKIyAxODggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgojIDc2OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgogCgoKCmV4dGVy
biB2b2lkICogIF9fc2JyayAgKHB0cmRpZmZfdCBfX2RlbHRhKSAgOwpleHRlcm4gdm9pZCAqICBz
YnJrICAocHRyZGlmZl90IF9fZGVsdGEpICA7CgoKCgogCgoKCgoKCgoKCmV4dGVybiBsb25nIGlu
dCBzeXNjYWxsICAobG9uZyBpbnQgX19zeXNubywgLi4uKSAgOwoKCgoKCgogCgoKCiAKCgoKCgoK
CgpleHRlcm4gaW50IGxvY2tmICAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikg
IDsKCgoKIyA4MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgogCgpleHRlcm4gaW50IGZk
YXRhc3luYyAgKGludCBfX2ZpbGRlcykgIDsKCgoKIAoKIyA4NjEgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwoKCn0gCgoKIyAyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CmV4dGVybiAiQyIgeyAKCgojIDEgIi91c3IvaW5jbHVkZS9zaWdzZXQuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRlZiBz
dHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9m
ICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgojIDEy
MyAiL3Vzci9pbmNsdWRlL3NpZ3NldC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMwoKCgoKCgoKCgoKIyAxNTggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCgoKCnR5cGVk
ZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgoKIyAyMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMwoKCgoKIyAyNzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCgojIDI5OCAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAzCgoKfSAKCgojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2
OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDgwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CgoKCgojIDk3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKCgoKIyAyODEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAyOCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIAoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgogCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgogCnN0cnVjdCBfcHRocmVhZF9xdWV1
ZQp7CiAgX3B0aHJlYWRfZGVzY3IgaGVhZDsJCSAKICBfcHRocmVhZF9kZXNjciB0YWlsOwkJIAp9
OwoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IG1fc3BpbmxvY2s7CQkgCiAgaW50IG1fY291bnQ7
CQkJIAogIF9wdGhyZWFkX2Rlc2NyIG1fb3duZXI7CSAKICBpbnQgbV9raW5kOwkJCSAKICBzdHJ1
Y3QgX3B0aHJlYWRfcXVldWUgbV93YWl0aW5nOyAgCn0gcHRocmVhZF9tdXRleF90OwoKCgoKCgog
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgY19zcGlubG9jazsgICAgICAgICAgICAgICAgICAgCiAg
c3RydWN0IF9wdGhyZWFkX3F1ZXVlIGNfd2FpdGluZzsgIAp9IHB0aHJlYWRfY29uZF90OwoKCgog
CgplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKICBQVEhSRUFEX0NSRUFURV9ERVRB
Q0hFRAp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAogIFBUSFJFQURfRVhQTElD
SVRfU0NIRUQKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAogIFBUSFJFQURfU0NP
UEVfUFJPQ0VTUwp9OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBkZXRhY2hzdGF0ZTsKICBpbnQg
c2NoZWRwb2xpY3k7CiAgc3RydWN0IHNjaGVkX3BhcmFtIHNjaGVkcGFyYW07CiAgaW50IGluaGVy
aXRzY2hlZDsKICBpbnQgc2NvcGU7Cn0gcHRocmVhZF9hdHRyX3Q7CgplbnVtCnsKICBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QCn07Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IG11dGV4a2luZDsK
fSBwdGhyZWFkX211dGV4YXR0cl90OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBkdW1teTsKfSBw
dGhyZWFkX2NvbmRhdHRyX3Q7CgoKIAoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlf
dDsKCiAKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRf
Y2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpyb3V0aW5lKSAgKHZvaWQgKikgIDsJIAogIHZvaWQg
KmFyZzsJCQkJIAogIGludCBjYW5jZWx0eXBlOwkJCSAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKnByZXY7CSAKfTsKCiAKCmVudW0geyBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsIFBU
SFJFQURfQ0FOQ0VMX0RJU0FCTEUgfTsKZW51bSB7IFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELCBQ
VEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMgfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jcmVhdGUgIChwdGhyZWFkX3QgKl9fdGhyZWFkLAoJCQkJX19jb25zdCBwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLAoJCQkJdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAoJCQkJdm9p
ZCAqX19hcmcpICA7CgogCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICAodm9pZCkgIDsK
CiAKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVh
ZF90IF9fdGhyZWFkMikgIDsKCiAKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICAodm9pZCAqX19y
ZXR2YWwpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIAoKCmV4dGVybiBpbnQg
cHRocmVhZF9qb2luICAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pICA7
CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggIChwdGhyZWFkX3QgX190aCkgIDsKCgog
CgogCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0ICAocHRocmVhZF9hdHRyX3QgKl9fYXR0
cikgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlICAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX2RldGFjaHN0YXRlKSAgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAgKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgIDsKCiAKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5ICAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX3BvbGljeSkgIDsKCiAKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
CgkJCQkJICAgICBpbnQgKl9fcG9saWN5KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRpbmhlcml0c2NoZWQgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAgIGludCBf
X2luaGVyaXQpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAg
KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICBpbnQgKl9faW5oZXJp
dCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgIChwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLCBpbnQgX19zY29wZSkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c2NvcGUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICAgaW50ICpf
X3Njb3BlKSAgOwoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gIChwdGhy
ZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCgkJCQkgICAgICAgX19jb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRz
Y2hlZHBhcmFtICAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKCQkJCSAgICAgICBpbnQgKl9f
cG9saWN5LAoJCQkJICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCgogCgog
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211
dGV4LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICA7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211dGV4
LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICA7Cgog
CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95ICAocHRocmVhZF9tdXRl
eF90ICpfX211dGV4KSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrICAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIDsKCiAKZXh0ZXJuIGludCBfX3B0aHJl
YWRfbXV0ZXhfbG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIDsKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICA7CgogCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
IDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCkgIDsKCgogCgogCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0
cl9pbml0ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgOwoKIApleHRlcm4gaW50IF9f
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikg
IDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0
dHJfdCAqX19hdHRyKSAgOwoKIAoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX3NldGtp
bmRfbnAgIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCgkJCQkJCWludCBfX2tpbmQpICA7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCAgKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICBpbnQgX19raW5kKSAgOwogCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfZ2V0a2luZF9ucCAgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpfX2tpbmQpICA7CgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAgKHB0aHJl
YWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19j
b25kX2F0dHIpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgIChwdGhyZWFk
X2NvbmRfdCAqX19jb25kKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgIChw
dGhyZWFkX2NvbmRfdCAqX19jb25kKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9h
ZGNhc3QgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfd2FpdCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpICA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJ
CQkJCV9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpICA7CgogCgogCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kYXR0cl9pbml0ICAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95ICAocHRocmVhZF9jb25kYXR0
cl90ICpfX2F0dHIpICA7CgoKIAoKIAoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVh
dGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0
aW9uKSAodm9pZCAqKSkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgIChwdGhyZWFk
X2tleV90ICpfX2tleSwKCQkJCSAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikp
ICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlICAocHRocmVhZF9rZXlfdCBfX2tl
eSkgIDsKCiAKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90
IF9fa2V5LAoJCQkJICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSAgOwpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICBfX2Nv
bnN0IHZvaWQgKl9fcG9pbnRlcikgIDsKCiAKZXh0ZXJuIHZvaWQgKl9fcHRocmVhZF9nZXRzcGVj
aWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXkpICA7CmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNw
ZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIDsKCgogCgogCgoKCmV4dGVybiBpbnQgX19w
dGhyZWFkX29uY2UgIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCQl2b2lkICgq
X19pbml0X3JvdXRpbmUpICh2b2lkKSkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgIChwdGhy
ZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCSAgICAgIHZvaWQgKCpfX2luaXRfcm91dGlu
ZSkgKHZvaWQpKSAgOwoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAg
KGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpICA7CgogCgpleHRlcm4gaW50IF9fcHRocmVh
ZF9zZXRjYW5jZWx0eXBlICAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpICA7CmV4dGVybiBp
bnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlICAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgIChwdGhyZWFkX3QgX190aHJlYWQpICA7Cgog
CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICAodm9pZCkgIDsKCgogCgoKCgoKCgoK
CgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggIChzdHJ1Y3QgX3B0aHJlYWRfY2xl
YW51cF9idWZmZXIgKl9fYnVmZmVyLAoJCQkJCXZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJ
CQkJCXZvaWQgKl9fYXJnKSAgOwoKIAoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cG9wICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCSAgICAg
ICBpbnQgX19leGVjdXRlKSAgOwoKIAoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2hfZGVmZXIgIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAoJ
CQkJCSAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJCQkJCSAgICAgIHZvaWQgKl9f
YXJnKSAgOwoKIAoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3Jl
ICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCQkgICAgICAg
aW50IF9fZXhlY3V0ZSkgIDsKCiAKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAgKGlu
dCBfX2hvdywgX19jb25zdCBzaWdzZXRfdCAqX19uZXdtYXNrLAoJCQkJIHNpZ3NldF90ICpfX29s
ZG1hc2spICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVh
ZCwgaW50IF9fc2lnbm8pICA7CgoKIAoKIAoKCgoKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRf
YXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQp
ICh2b2lkKSwKCQkJCSAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIDsKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0Zm9yayAgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLAoJCQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIDsKCiAKCgpleHRlcm4gdm9p
ZCBfX3B0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIDsKZXh0ZXJuIHZvaWQg
cHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgICh2b2lkKSAgOwoKCiAKZXh0ZXJuIHZvaWQg
X19wdGhyZWFkX2luaXRpYWxpemUgICh2b2lkKSAgOwoKfSAKCgojIDcxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgODcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMwoKIyA5NyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDExNSAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKCgoKCgoKCiAKCgoKCgogCiAKCgoKCgoKCgoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnBy
aXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZv
aWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19t
YWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxs
b2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwog
ICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3As
IHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBf
X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkg
X19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jl
c3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpf
X2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4o
X19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkg
PSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAg
ICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg
ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVt
b3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkg
cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwg
c2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9p
ZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv
Y19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9
CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVh
bGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwog
ICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsK
CnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoK
cHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1
cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChf
VHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9U
cCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxv
Yzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6
ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz
IGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07ICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAoKcHVibGljOgoK
ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3Vs
dCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90
KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCiAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hh
ciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoICooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90Kilf
X3JlYWxfcCA9PSBfX24iICwJIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI2MywgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf
cCwgX19uICsgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3Jl
YWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9f
cmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19y
ZWFsX3AgPT0gX19vbGRfc3oiICwJIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIq
KQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEs
IF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7
CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxhdGUg
PGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7
Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFY
X0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJR059
OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJl
dHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2YXRl
IDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsK
ICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoKCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0
YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAg
cmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0
YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciog
X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRp
YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhf
dCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL2x1c3IvZ251L2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgIF9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2Fs
bG9jYXRvcl9sb2NrKSA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRo
cmVhZF9tdXRleF91bmxvY2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsKICAg
IGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CiAg
ICBfT2JqKiAgIF9fcmVzdWx0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAgICBf
X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAg
ICAgCiAgICAgCiAgICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7
CgogICAgX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICBpZiAoX19yZXN1bHQgPT0gMCkg
ewogICAgICAgIHZvaWQqIF9fciA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAg
ICByZXR1cm4gX19yOwogICAgfQogICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01f
ZnJlZV9saXN0X2xpbms7CiAgICByZXR1cm4gKF9fcmVzdWx0KTsKICB9OwoKICAgCiAgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgX09iaiogX19x
ID0gKF9PYmoqKV9fcDsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgogICAg
aWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICBtYWxsb2NfYWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIF9fbXlfZnJlZV9s
aXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKCiAgICAg
ICAgIAogICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICBfX3EgLT4gX01fZnJlZV9s
aXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAg
ICAgCiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29s
ZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8IHRydWUgLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9f
bm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBf
X3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0g
X1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsK
ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSAr
PSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl
c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7
CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUg
Kz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsK
ICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9T
X3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0
ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlz
dCA9CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9m
cmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09
IF9TX3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09i
aiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKCSAgICBfT2JqKiBfX3A7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoX19pID0gX19z
aXplOyBfX2kgPD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAg
X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwog
ICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYg
KDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+
IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo
Y2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJl
ZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJICAgIF9TX2VuZF9mcmVlID0gMDsJIAog
ICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUo
X19ieXRlc190b19nZXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgIH0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAg
ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAg
cmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKIAogCiAK
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewog
ICAgaW50IF9fbm9ianMgPSAyMDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhf
X24sIF9fbm9ianMpOwogICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKICAgIF9P
YmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9v
Ymo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsK
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2Zy
ZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3Ig
KF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsK
ICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAg
ICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2Jq
IC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9f
bmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAg
IGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwog
ICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19z
eikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBf
X2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAg
bWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19v
bGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CiAgICBwdGhyZWFkX211dGV4X3QKICAgIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAg
ICAgICA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsIHswLCAwfX0gOwoKCgoKCgoK
CgojIDYwMiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi9sdXNyL2du
dS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X1Nfc3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2Vu
ZF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6
ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlIApfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAg
X05GUkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCB9OwogCiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAg
ICAgCnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRy
ZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
X1RwICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0
b3IoKSB0aHJvdygpICB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+
JikgdGhyb3coKSAge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRy
ZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVy
IGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAg
CiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAg
ICByZXR1cm4gX19uICE9IDAgPyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9f
biAqIHNpemVvZihfVHApKSkKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9p
ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXpl
KCkgY29uc3QgdGhyb3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsg
fQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXco
X19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U
cCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBz
aXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCog
Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U
cDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9y
PF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFs
bG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoKIAogCiAKIAogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2Mg
X191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCAgICBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0
cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVy
OwogIH07CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9jYXRvcihjb25zdCBf
X2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9f
dW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRv
cihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkgCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRv
cigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBl
IF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0
YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2Yo
X1RwKSkpCiAgICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9f
cCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19w
LCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhy
b3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv
bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192
YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsK
ICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlw
ZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19h
bGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9j
ICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKIAogCiAKCnRlbXBsYXRlIDxpbnQgaW5z
dD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp
bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1
cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2Fs
bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9B
bGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNl
Owp9CgoKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJh
aXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OiAgIHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAg
YWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
Pgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2Vs
ZXNzOwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190
cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxs
b2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3Jf
dHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxs
b2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7
CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9f
aW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2Fs
bG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h
bGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAg
ICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt
cGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgog
ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw
ZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9j
YXRvcl90eXBlOwp9OwoKCgoKCgoKCiAKCgoKCgogCiAKIAojIDIxICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
YWxsb2MuaCIgMiAzCgoKCiMgNDAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAzCgoKCgogCiAK
IAojIDMxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yLmgiIDIgMwoKIyAxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgog
IAoKCgoKCgogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh
dG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3Jf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9j
YXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgw
KSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7
CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9y
YWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgX19uKTsgfQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0
b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojph
bGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1Zl
Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCks
IF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVjdGVkOgog
IF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFn
ZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9B
bGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAg
IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9j
YXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
X3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxs
b2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxs
b2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShz
aXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFz
ZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7IH0KfTsgICAgCgojIDE1MCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KY2xh
c3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gCnsKcHJpdmF0
ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90
eXBlKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X2l0ZXJhdG9y
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKCgoKCgoKcHJvdGVjdGVkOgoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcg
X0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9C
YXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3Rl
Y3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw
JiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1Ymxp
YzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgp
IGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QK
ICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o
c2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSAr
IF9fbik7IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKSAKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9Cgog
IGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRv
cl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0
LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194
KSAKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01f
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0
YXJ0KTsgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3Io
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2Ep
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50
ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBf
SW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9p
bml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBl
KSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9NX3N0YXJ0ICsgX19uOyAKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u
KF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRv
cl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCgoKCiAgfnZlY3RvcigpIHsgZGVzdHJv
eShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRv
cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90
eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2Nh
dGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2Zp
bmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9z
dGFydCArIF9fbjsKICAgIH0KICB9CgogICAKICAgCiAgIAogICAKCiAgdm9pZCBhc3NpZ24oc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgoKICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1
dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50
ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
dmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192
YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rp
c3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlw
ZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOyAKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7
IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsg
fQoKICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwog
ICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQo
KSwgX194KTsKICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19N
X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQog
IHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3Rh
cnQsIF9feC5fTV9zdGFydCk7CiAgICAgOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwog
IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194
KSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAg
ICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgIHJldHVybiBi
ZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UK
ICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uKTsKICAgIHJldHVybiBiZWdpbigpICsgX19u
OwogIH0KCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy
dChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp
IHsKICAgIGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwogIH0KCgoKCgogIHZvaWQg
aW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoK
ICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2Zpbmlz
aCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChf
X3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgX01fZmlu
aXNoLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gp
OwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pID0gY29weShfX2xhc3Qs
IF9NX2ZpbmlzaCwgX19maXJzdCk7CiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIF9N
X2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2Zp
cnN0OwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYg
X194KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkgCiAgICAgIGVyYXNlKGJlZ2luKCkg
KyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3Np
emUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNl
KGJlZ2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgaXRlcmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9f
biwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKewogICAgaXRlcmF0
b3IgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5ICB7CiAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24p
IDsgdGhyb3c7IH0gOwogIH0KIyA0NDAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMK
CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5p
dGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2Zp
cnN0KTsKICB9CgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lk
IF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbik7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2Vy
dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6
ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQo
KSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mIAp2ZWN0b3I8
X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsK
ICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNp
emUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fdG1w
ID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsK
ICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShf
TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0g
X190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9
CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIGRlc3Ryb3koX19pLCBf
TV9maW5pc2gpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5i
ZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3gu
YmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2ln
bihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkgewogIGlmIChfX24gPiBjYXBh
Y2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9h
bGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4g
c2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2gg
PSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwog
IH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyID0g
YmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyAr
K19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQo
KSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46
Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
IHsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19s
ZW4pOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9N
X2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgZGVzdHJveShf
TV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAo
c2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgZGVzdHJveShfX25ld19maW5pc2gsIF9NX2Zpbmlz
aCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgfQogIGVsc2UgewogICAgX0Zvcndh
cmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBj
b3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihf
TV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsK
ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoIC0gMiwgX01fZmluaXNoIC0g
MSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNp
emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0g
X19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdf
c3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBf
X25ld19zdGFydDsKICAgIHRyeSAgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0
KF9fbmV3X2ZpbmlzaCwgX194KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2Zp
bmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9f
bGVuKSkgOyB0aHJvdzsgfSA7CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01f
c3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7
CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNo
IC0gMiwgX01fZmluaXNoIC0gMSk7CiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOwogIH0KICBlbHNl
IHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAg
aXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBpdGVyYXRvciBf
X25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSAgewogICAgICBfX25ld19maW5pc2gg
PSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsK
ICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNo
LCBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19z
dGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7
CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0gMCkg
ewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19u
KSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxl
bXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9m
aW5pc2ggPSBfTV9maW5pc2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAg
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5p
c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChf
X3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1z
X2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0
ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwg
X01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBm
aWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7ICAgICAg
ICAKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z
aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVu
KTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAg
ewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19w
b3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAog
ICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25l
d19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3Rh
cnQsX19uZXdfZmluaXNoKSwgCiAgICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsg
X19sZW47CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+
OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq
X19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9U
cCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsK
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIGlmIChzaXplX3R5cGUoX01f
ZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBjb25zdCBzaXplX3R5
cGUgX19lbGVtc19hZnRlciA9IF9NX2ZpbmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9y
IF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p
IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j
ZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk
LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz
aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxz
ZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25z
dCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAg
ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVy
YXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25l
d19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNo
KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKSA7IHRocm93OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsK
ICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3
X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwog
ICAgfQogIH0KfQoKIyA4MTAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgoKCgoK
CiAgCgoKCiAKIAogCiMgMzIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IuaCIgMiAzCgoKCgoKCgoK
IAogCiAKIyAxICJidWcyLmMiIDIKCgpjbGFzcyBjIHsKICB0eXBlZGVmIGludCAoYzo6KiBmcCkg
KCApOwogIHZlY3RvcjxmcD4gdjsKICBjKCkgeyB9Owp9Owo=
>From anders@ieee.org Thu Mar 09 20:57:00 2000
From: anders@ieee.org
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/40: bitset::operator<<= and >>= incorrect for multiples of 32
Date: Thu, 09 Mar 2000 20:57:00 -0000
Message-id: <20000310045438.17716.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00025.html
Content-length: 994

>Number:         40
>Category:       libstdc++
>Synopsis:       bitset::operator<<= and >>= incorrect for multiples of 32
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 09 20:57:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Anders Johnson
>Release:        libstdc++-2.90.7
>Organization:
>Environment:
SunOS thresher 5.6 Generic_105181-05 sun4u sparc SUMW,Ultra-60
>Description:
The implementation of bitset relies on the behavior
of _WordT >> __BITS_PER_WORDT(_WordT), which is not
defined according to the C standard, and is equivalent
to _WordT >> 0 on the Sparc. This occurs whenever the
shift amount is a multiple of __BITS_PER_WORDT(_WordT).
>How-To-Repeat:

>Fix:
The expressions on lines 201 and 220 of stl/bits/std_bitset.h
should read (__offset ? ... : static_cast<_WordT>(0)) instead.
>Release-Note:
>Audit-Trail:
>Unformatted:
>From bkoz@cygnus.com Fri Mar 10 11:27:00 2000
From: Benjamin Kosnik <bkoz@cygnus.com>
To: nobody@sourceware.cygnus.com
Cc: libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/40: bitset::operator<<= and >>= incorrect for multiplesof 32
Date: Fri, 10 Mar 2000 11:27:00 -0000
Message-id: <20000310192700.14858.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00026.html
Content-length: 1568

The following reply was made to PR libstdc++/40; it has been noted by GNATS.

From: Benjamin Kosnik <bkoz@cygnus.com>
To: anders@ieee.org
Cc: libstdc++-gnats@sourceware.cygnus.com, libstdc++-prs@sourceware.cygnus.com
Subject: Re: libstdc++/40: bitset::operator<<= and >>= incorrect for multiples
 of 32
Date: Fri, 10 Mar 2000 11:17:48 -0800 (PST)

 can you please send me a patch and change log entry?
 
 thanks,
 benjamin
 
 
 On 10 Mar 2000 anders@ieee.org wrote:
 
 > 
 > >Number:         40
 > >Category:       libstdc++
 > >Synopsis:       bitset::operator<<= and >>= incorrect for multiples of 32
 > >Confidential:   no
 > >Severity:       serious
 > >Priority:       medium
 > >Responsible:    unassigned
 > >State:          open
 > >Class:          sw-bug
 > >Submitter-Id:   net
 > >Arrival-Date:   Thu Mar 09 20:57:00 PST 2000
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     Anders Johnson
 > >Release:        libstdc++-2.90.7
 > >Organization:
 > >Environment:
 > SunOS thresher 5.6 Generic_105181-05 sun4u sparc SUMW,Ultra-60
 > >Description:
 > The implementation of bitset relies on the behavior
 > of _WordT >> __BITS_PER_WORDT(_WordT), which is not
 > defined according to the C standard, and is equivalent
 > to _WordT >> 0 on the Sparc. This occurs whenever the
 > shift amount is a multiple of __BITS_PER_WORDT(_WordT).
 > >How-To-Repeat:
 > 
 > >Fix:
 > The expressions on lines 201 and 220 of stl/bits/std_bitset.h
 > should read (__offset ? ... : static_cast<_WordT>(0)) instead.
 > >Release-Note:
 > >Audit-Trail:
 > >Unformatted:
 > 
 
>From george@moberg.com Fri Mar 10 13:57:00 2000
From: george@moberg.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/41: -fcheck-memory-usage cannot be used with basic_string<>
Date: Fri, 10 Mar 2000 13:57:00 -0000
Message-id: <20000310214844.14302.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00027.html
Content-length: 1536

>Number:         41
>Category:       libstdc++
>Synopsis:       -fcheck-memory-usage cannot be used with basic_string<>
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Mar 10 13:57:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     george@moberg.com
>Release:        The version that's included with gcc 2.95.2.
>Organization:
>Environment:
Linux Mandrake 7.0 on an Intel Pentium II.
>Description:
The basic_string<> class uses asm() in its release() method
for the Rep structure.  This causes a compilation error
when compiling with the GCC -fcheck-memory-usage option.
>How-To-Repeat:
Compile the above program with the option -fcheck-memory-usage.
>Fix:
I could discover no easy workaround.  I would assume that
it would be possible to move the asm() statement in this
function to another file and mark that with
__attribute__ ((no_check_memory_usage)), but I don't know
anything about x86 assembly language.

iostream.h and stl_alloc.h also have assembly language in them.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="str.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="str.cc"

I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKewoJc3RyaW5nCXRoZXJlKCJ0aGVyZSEiKTsKCgljb3V0IDw8ICJIZWxs
byAiIDw8IHRoZXJlIDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0K
>From mikes@nilenet.com Wed Mar 15 14:47:00 2000
From: mikes@nilenet.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/42: vector<>::at()  doesn't throw out_of_range
Date: Wed, 15 Mar 2000 14:47:00 -0000
Message-id: <20000315224607.17867.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00028.html
Content-length: 911

>Number:         42
>Category:       libstdc++
>Synopsis:       vector<>::at()  doesn't throw out_of_range
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 15 14:47:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     mikes@nilenet.com
>Release:        2.90.x
>Organization:
>Environment:
i686-linux slackware, gcc compiled with namespace
>Description:
if you give vector<>::at() an out of range value, it
doesn't throw out_of_range like it should
>How-To-Repeat:
try this simple program:
#include <iostream>
#include <vector>
#include <stdexcept>
int main()try
{
    std::vector<int> myvec(2);
    std::cout << myvec.at(2) << std::endl;
}
catch(std::out_of_range)
{
    std::cerr << "out of range" << std::endl;
}
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From kmcwhirter@magellan.com Sat Mar 18 09:37:00 2000
From: kmcwhirter@magellan.com
To: libstdc++-gnats@sourceware.cygnus.com
Subject: libstdc++/43: Sun compile error on line 446 of locale.cc (includes ctype.cc)
Date: Sat, 18 Mar 2000 09:37:00 -0000
Message-id: <20000318173641.15005.qmail@sourceware.cygnus.com>
X-SW-Source: 2000-q1/msg00029.html
Content-length: 1709

>Number:         43
>Category:       libstdc++
>Synopsis:       Sun compile error on line 446 of locale.cc (includes ctype.cc)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Mar 18 09:37:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Kevin L McWhirter
>Release:        libstdc++-2.90.7
>Organization:
>Environment:
Sun Solaris 7, Sparc, gcc 2.95.2
>Description:
Output from gnu c++ attached as file.
>How-To-Repeat:
Type make after ./configure on Solaris 7 for Sparc.
>Fix:
Would like one (or work around).
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="libstdc++-err.txt"
Content-Disposition: inline; filename="libstdc++-err.txt"

# make
/bin/sh ../libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I. -I.. -nostdinc++ -I../config/solaris -I.. -I../stl -I../libio    -D_GNU_SOURCE -fno-implicit-templates -Wall -Wno-format -W -Wwrite-strings -Winline -Werror  -g -fhonor-std -c locale.cc
rm -f .libs/locale.lo
c++ -DHAVE_CONFIG_H -I. -I. -I.. -nostdinc++ -I../config/solaris -I.. -I../stl -I../libio -D_GNU_SOURCE -fno-implicit-templates -Wall -Wno-format -W -Wwrite-strings -Winline -Werror -g -fhonor-std -c  -fPIC -DPIC locale.cc -o .libs/locale.lo
In file included from locale.cc:446:
../config/solaris/ctype.cc:36: converting to `long int *' from `int *'
../config/solaris/ctype.cc:37: converting to `long int *' from `int *'
../config/solaris/ctype.cc:41: converting to `long int *' from `int *'
../config/solaris/ctype.cc:42: converting to `long int *' from `int *'
make: *** [locale.lo] Error 1


                 reply	other threads:[~2000-01-02 16:57 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20000103005438.12507.qmail@sourceware.cygnus.com \
    --to=vakatov@ncbi.nlm.nih.gov \
    --cc=libstdc++-gnats@sourceware.cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).