> < ^ Date: Tue, 19 Aug 2003 12:42:14 +0200
^ From: sebastian.egner@philips.com < >
< ^ Subject: Re: Testing expression for positivity
--=_mixed 003AE914C1256D87_=
Content-Type: multipart/alternative; boundary="=_alternative 003AE914C1256D87_="


--=_alternative 003AE914C1256D87_=
Content-Type: text/plain; charset="us-ascii"

Dear GAP-forum, dear Derek,

A couple of years ago, I implemented a module for GAP3 that computes
rational approximations of real cyclotomic numbers. Testing positivity can
be solved by computing an approximation interval which is sufficiently
small not to contain zero (unless the number is 0 itself).

To make life easier for you, I have just added a function to compute
the sign of the real part of a cyclotomic field element. Here is the
interface:

#F SignReCyc( <z> )
#F   the sign of Re(z). The sign is in {-1, 0, 1}.

Assuming you want to use the code in GAP4, I made a very quick
hack to port the program to GAP4. Use it with care.
The program is also not optimized for performance in any way but
it computes nice approximations.

Cheers,

Sebastian.

----
Dr. Sebastian Egner
Senior Scientist
Philips Research Laboratories
Prof. Holstlaan 4 (postbox WY63, kamer WY 6-55)
5656 AA Eindhoven
The Netherlands
tel:       +31 40 27-42069
fax:      +31 40 27-42566
email: sebastian.egner@philips.com
--=_alternative 003AE914C1256D87_=
Content-Type: text/html; charset="us-ascii"

<br><font size=2 face="sans-serif">Dear GAP-forum, dear Derek,</font>
<br>
<br><font size=2 face="sans-serif">A couple of years ago, I implemented a module for GAP3 that computes</font>
<br><font size=2 face="sans-serif">rational approximations of real cyclotomic numbers. Testing positivity can</font>
<br><font size=2 face="sans-serif">be solved by computing an approximation interval which is sufficiently</font>
<br><font size=2 face="sans-serif">small not to contain zero (unless the number is 0 itself).</font>
<br>
<br><font size=2 face="sans-serif">To make life easier for you, I have just added a function to compute</font>
<br><font size=2 face="sans-serif">the sign of the real part of a cyclotomic field element. Here is the interface:</font>
<br>
<br><font size=2 face="sans-serif">#F SignReCyc( &lt;z&gt; )</font>
<br><font size=2 face="sans-serif">#F &nbsp; the sign of Re(z). The sign is in {-1, 0, 1}.</font>
<br>
<br><font size=2 face="sans-serif">Assuming you want to use the code in GAP4, I made a very quick</font>
<br><font size=2 face="sans-serif">hack to port the program to GAP4. Use it with care.</font>
<br><font size=2 face="sans-serif">The program is also not optimized for performance in any way but</font>
<br><font size=2 face="sans-serif">it computes nice approximations.</font>
<br>
<br><font size=2 face="sans-serif">Cheers,</font>
<br>
<br><font size=2 face="sans-serif">Sebastian.</font>
<br>
<br>
<br>
<br>
<br><font size=2 face="sans-serif"><br>
----<br>
Dr. Sebastian Egner<br>
Senior Scientist<br>
Philips Research Laboratories<br>
Prof. Holstlaan 4 (postbox WY63, kamer WY 6-55)<br>
5656 AA Eindhoven<br>
The Netherlands<br>
tel: &nbsp; &nbsp; &nbsp; +31 40 27-42069<br>
fax: &nbsp; &nbsp; &nbsp;+31 40 27-42566<br>
email: sebastian.egner@philips.com</font>
--=_alternative 003AE914C1256D87_=--
--=_mixed 003AE914C1256D87_=
Content-Type: application/octet-stream; name="approx4.g"
Content-Disposition: attachment; filename="approx4.g"
Content-Transfer-Encoding: base64

IyBBcHByb3hpbWF0aW9uIG9mIGN5Y2xvdG9taWMgZmllbGQgZWxlbWVudHMKIyBTZWJhc3RpYW4g
RWduZXIsIE1heS0xOTk3LCBHQVAgdjMuNAojCiMgVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9u
cyB0byBjb21wdXRlIHJhdGlvbmFsIGFwcHJveGltYXRpb25zCiMgZm9yIGN5Y2xvdG9taWMgZmll
bGQgZWxlbWVudHMuIE1vcmUgcHJlY2lzZWx5LCBmaXggdGhlIGVtYmVkZGluZyAKIyBvZiBDeWNs
b3RvbWljRmllbGQobikgaW50byB0aGUgY29tcGxleCBudW1iZXJzLCBkZWZpbmVkIGJ5IAojICAg
RShuKSAtPiBleHAoMiBwaSBpL24pLiAKIyBUaGVuIGFuIGFwcHJveGltYXRpb24gb2YgdGhlICpy
ZWFsIHBhcnQqIG9mIHRoZSBjeWNsb3RvbWljIGZpZWxkIAojIGVsZW1lbnQgeiBpcyBhIHBhaXIg
W2EsIGJdIG9mIHJhdGlvbmFsIG51bWJlcnMgYW5kIGEgcG9zaXRpdmUgCiMgcmF0aW9uYWwgZXBz
aWxvbiBzdWNoIHRoYXQKIyAgIGEgPD0gUmUoeikgPD0gYiAgIGFuZCAgIGIgLSBhIDwgZXBzaWxv
bi4KIyAoUmVtZW1iZXIsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB6IGlzIHdyaXR0ZW4gR2Fs
b2lzQ3ljKHosIC0xKSwKIyB0aGUgcmVhbCBwYXJ0IGlzICh6ICsgR2Fsb2lzQ3ljKHosIC0xKSkv
MiBhbmQgc28gb24uKQojCiMgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgbm90IG1l
YW50IHRvIGludHJvZHVjZSBudW1lcmljYWwKIyBjb21wdXRhdGlvbiBpbnRvIEdBUC4gUmF0aGVy
IHRoZXkgc3VwcGx5IGEgd2F5IHRvIGZpbmQgYWNjdXJhdGUKIyByYXRpb25hbCBhcHByb3hpbWF0
aW9ucyBvZiBjeWNsb3RvbWljcywgcmVwcmVzZW50aW5nIHJlYWwgYW5kCiMgY29tcGxleCBudW1i
ZXJzLiBJbiBmYWN0LCB0aGVyZSBpcyBhbHNvIGEgc2ltcGxlIGZ1bmN0aW9uIHRvIHByaW50CiMg
YW4gYXBwcm94aW1hdGlvbiBpbiBkZWNpbWFsLWRvdCBub3RhdGlvbiwgYmVjYXVzZSBzb21ldGlt
ZXMgaXQgaXMKIyBkZXNpcmVhYmxlIHRvIGhhdmUgYW4gaWRlYSBvZiB0aGUgb3JkZXIgb2YgbWFn
bml0dWRlLgojIAojIElmIHlvdSB3YW50IGEgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9ucyBl
eHBvcnRlZCBmcm9tIHRoaXMgCiMgbW9kdWxlIGZpbHRlciBvdXQgYWxsIGxpbmVzIGNvbnRhaW5p
bmcgdGhlIHN0cmluZyBtYWRlIGZyb20gJyMnIAojIGFuZCAnRicgKGUuZy4gd2l0aCBhIFVOSVgg
Z3JlcCkuIFRoZSBtYWluIGZ1bmN0aW9ucyBhcmUKIwojICAgQXBwcm94UmVDeWNTaW1wbGUoY3lj
LCBlcHNpbG9uKQojICAgQXBwcm94UmVDeWNCaW5hcnkoY3ljLCBlcHNpbG9uKQojICAgQXBwcm94
UmVDeWNTdGVybkJyb2NvdChjeWMsIGVwc2lsb24pCiMgICAgIGNvbXB1dGUgYW4gYXBwcm94aW1h
dGlvbiBbYSwgYl0gc3VjaCB0aGF0IGEgPD0gUmUoY3ljKSA8PSBiCiMgICAgIGFuZCBiIC0gYSA8
IGVwc2lsb24uIFRoZSB0aHJlZSBmdW5jdGlvbnMgcmV0dXJuIGFwcHJveGltYXRpb25zCiMgICAg
IHByb2R1Y2VkIGZyb20gZGlmZmVyZW50IG1ldGhvZDogU2ltcGxlIHJldHVybnMgYSBhcHByb3hp
bWF0aW9uCiMgICAgIHdoaWNoIGlzIHF1aWNrIHRvIGZpbmQsIEJpbmFyeSByZXR1cm5zIGEgYmlu
YXJ5IGZyYWN0aW9uLCB0aGF0CiMgICAgIGlzIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyIG9m
IDIsIFN0ZXJuQnJvY290IHJldHVybnMgY29udGludWVkCiMgICAgIGZyYWN0aW9uIHJlc3VsdCwg
c28gdGhlIGRlbm9taW5hdG9yIGlzICdsZWFzdCcgaW4gYSBjZXJ0YWluIHNlbnNlLgojCiMgICBT
dHJpbmdEZWNpbWFsUmF0KHJhdCwgbWFudGlzc2FEaWdpdHMpCiMKIyBoaXN0b3J5CiMgICBTRSwg
IDEuMDcuOTYgaW5pdGlhbCB2ZXJzaW9uCiMgICBTRSwgIDMuMDcuOTYgYXBwcm94LiB2aWEgbWlu
aW1pYWwgcG9seW5vbWlhbAojICAgU0UsICA0LjA3Ljk2IGFwcHJveC4gd2l0aG91dCBtaW5wb2wK
IyAgIFNFLCAgOS4wNy45NiBuZXcgYXBwcm94LiBmdW5jdGlvbnMgaW50ZWdyYXRlZAojICAgU0Us
IDIyLjAzLjk3IGZpeGVkIGJ1ZyBhdCBTdHJpbmdEZWNpbWFsUmF0KDApCiMgICBTRSwgMTkuMDgu
MDMgYWRkZWQgU2lnblJlQ3ljKCkKIyAgIFNFLCAxOS4wOC4wMyBxdWljayBwb3J0IG9mICdhcHBy
b3guZycgdG8gR0FQNCAtLSB1c2Ugd2l0aCBjYXJlIQojCiMgcmVmZXJlbmNlCiMgICBbMV0gQ29u
Y3JldGUgTWF0aGVtYXRpY3MsIGNoLiA0LjUgKCdTdGVybi1Ccm9jb3QgdHJlZScpCiMgICBbMl0g
SmFjb2Jzb246IEJhc2ljIEFsZ2VicmEgSSwgY2guIDUuMyAoJ1N0dXJtIHNlcXVlbmNlJykKIyAg
IFszXSBEYXZlbnBvcnQsIFNpcmV0LCBUb3VybmllcjogQ29tcHV0ZXIgQWxnZWJyYSAoJ1N0dXJt
IHNlcXVlbmNlJykKCmlmIG5vdCBJc0JvdW5kKEluZm9BcHByb3gxKSB0aGVuIEluZm9BcHByb3gx
IDo9IFByaW50OyAgZmk7CmlmIG5vdCBJc0JvdW5kKEluZm9BcHByb3gyKSB0aGVuIEluZm9BcHBy
b3gyIDo9IElnbm9yZTsgZmk7CgojIFF1aWNrIFBvcnRpbmcgdG8gR0FQNAojID09PT09PT09PT09
PT09PT09PT09PQoKIyBOdW1lcmF0b3IgICAtPiBOdW1lcmF0b3JSYXQKIyBEZW5vbWluYXRvciAt
PiBEZW5vbWluYXRvclJhdAoKIyBQb2x5bm9taWFsKFJhdGlvbmFscywgY29lZnMpIC0+IFBvbHlu
b21pYWxSYXRpb25hbHMoY29lZnMpCgpQb2x5bm9taWFsUmF0aW9uYWxzIDo9IGZ1bmN0aW9uICgg
Y29lZnMgKQogIGxvY2FsIHo7CgogIHogOj0gSW5kZXRlcm1pbmF0ZShSYXRpb25hbHMpOwogIHJl
dHVybiBTdW0oTGlzdChbMS4uTGVuZ3RoKGNvZWZzKV0sIGkgLT4gY29lZnNbaV0qel4oaS0xKSkp
KzAqejsKZW5kOwoKIyBQb2x5bm9taWFsKFJhdGlvbmFscywgTWluUG9sKChFKG4pICsgRShuKV4t
MSkvMikpIC0+IE1pbnBvbFJlQ3ljKG4pCgpNaW5wb2xSZUN5YyA6PSBmdW5jdGlvbiAoIG4gKSAK
ICByZXR1cm4gTWluaW1hbFBvbHlub21pYWwoUmF0aW9uYWxzLCAoRShuKSArIEUobileLTEpLzIp
OwplbmQ7CgojIE5vZkN5Yyh6KSAtPiB2aWEgZGVmYXVsdCBmaWVsZAoKTm9mQ3ljIDo9IGZ1bmN0
aW9uICggeiApCiAgcmV0dXJuIE9yZGVyQ3ljKCBHZW5lcmF0b3JzT2ZGaWVsZCggRGVmYXVsdEZp
ZWxkKHopIClbMV0gKTsKZW5kOwoKIyBjb2VmZmljaWVudHMgb2YgcG9seW5vbWlhbCAtPiBjb2UK
CmNvZWZzIDo9IENvZWZmaWNpZW50c09mVW5pdmFyaWF0ZVBvbHlub21pYWw7CgojIElzUG9seW5v
bWlhbCAtPiBNeUlzUG9seW5vbWlhbAoKTXlJc1BvbHlub21pYWwgOj0gZnVuY3Rpb24gKCBvYmog
KQogIHJldHVybiBub3QgSXNMaXN0KG9iaikgYW5kIElzUG9seW5vbWlhbChvYmopOwplbmQ7Cgoj
IFVuaXZlcnNhbCB0b29scwojID09PT09PT09PT09PT09PQoKIyBGbG9vclJhdCggPHJhdD4gKQoj
IENlaWxpbmdSYXQoIDxyYXQ+ICkKIyAgIGNvbXB1dGUgdGhlIGxhcmdlc3QgaW50ZWdlciBsZXNz
IG9yIGVxdWFsIHggKEZsb29ySW50KQojICAgYW5kIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0
ZXIgb3IgZXF1YWwgeCAoQ2VpbGluZ0ludCkuCiMKCkZsb29yUmF0IDo9IGZ1bmN0aW9uICggeCAp
CiAgaWYgSXNJbnQoeCkgdGhlbgogICAgcmV0dXJuIHg7CiAgZWxpZiB4ID4gMCB0aGVuCiAgICBy
ZXR1cm4gUXVvSW50KE51bWVyYXRvclJhdCh4KSwgRGVub21pbmF0b3JSYXQoeCkpOwogIGVsc2Ug
IyB4IDwgMAogICAgcmV0dXJuIC1RdW9JbnQoTnVtZXJhdG9yUmF0KC14KSwgRGVub21pbmF0b3JS
YXQoLXgpKSAtIDE7CiAgZmk7CmVuZDsKCkNlaWxpbmdSYXQgOj0gZnVuY3Rpb24gKCB4ICkKICBy
ZXR1cm4gLUZsb29yUmF0KC14KTsKZW5kOwoKCiMgSXNvbGF0aW9uIG9mIHJlYWwgcm9vdHMgb2Yg
cmF0aW9uYWwgcG9seW5vbWlhbHMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQoKI0YgU3R1cm1TZXF1ZW5jZSggPGY+ICkKI0YgICBjb21wdXRlcyBhIFN0
dXJtIHNlcXVlbmNlIGZvciB0aGUgcmF0aW9uYWwgcG9seW5vbWlhbCBmLgojRgoKU3R1cm1TZXF1
ZW5jZSA6PSBmdW5jdGlvbiAoIGYgKQogIGxvY2FsIFMsIGcsIGgsIGksIGNvbnRlbnRSZW1vdmVk
OwoKICAjIGNvbnRlbnRSZW1vdmVkKCA8Zj4gKQogICMgICBjbGVhcnMgYWxsIGRlbm9taW5hdG9y
cyBhbmQgcmVtb3ZlcyB0aGUgcG9zaXRpdmUgZ2NkIG9mCiAgIyAgIHRoZSByZW1haW5pbmcgaW50
ZWdlciBjb2VmZmljaWVudHMuIENhcmUgaXMgdGFrZSBub3QgdG8KICAjICAgYWx0ZXIgdGhlIHNp
Z24gb2YgdGhlIGxlYWRpbmcgY29lZmZpY2llbnQuCgogIGNvbnRlbnRSZW1vdmVkIDo9IGZ1bmN0
aW9uICggZiApCiAgICBsb2NhbCBGLCBkLCBnLCBpOwoKICAgIEYgOj0gU2hhbGxvd0NvcHkoY29l
ZnMoZikpOwoKICAgIGQgOj0gMTsKICAgIGZvciBpIGluIFsxLi5MZW5ndGgoRildIGRvCiAgICAg
IGlmIElzUmF0KEZbaV0pIHRoZW4KICAgICAgICBkIDo9IExjbUludChkLCBEZW5vbWluYXRvclJh
dChGW2ldKSk7CiAgICAgIGZpOwogICAgb2Q7CiAgICBpZiBkID4gMSB0aGVuCiAgICAgIGZvciBp
IGluIFsxLi5MZW5ndGgoRildIGRvCiAgICAgICAgRltpXSA6PSBkKkZbaV07CiAgICAgIG9kOwog
ICAgZmk7CgogICAgZyA6PSAwOwogICAgaSA6PSAxOwogICAgd2hpbGUgaSA8PSBMZW5ndGgoRikg
YW5kIGcgPD4gMSBkbwogICAgICBpZiBGW2ldIDw+IDAgdGhlbgogICAgICAgIGlmIGcgPSAwIHRo
ZW4KICAgICAgICAgIGcgOj0gQWJzSW50KEZbaV0pOyAKICAgICAgICBlbHNlIAogICAgICAgICAg
ZyA6PSBHY2RJbnQoZywgQWJzSW50KEZbaV0pKTsgCiAgICAgICAgZmk7CiAgICAgIGZpOwogICAg
ICBpIDo9IGkgKyAxOwogICAgb2Q7CiAgICBpZiBnID0gMCB0aGVuCiAgICAgIGcgOj0gMTsKICAg
IGZpOwoKICAgIHJldHVybiBkL2cgKiBmOwogIGVuZDsKCiAgIyBoYW5kbGUgdHJpdmlhbCBjYXNl
cyBhbmQgbWFrZSBmIGEgcmF0aW9uYWwgcG9seW5vbWlhbAogIEluZm9BcHByb3gxKCIjSSBTdHVy
bVNlcXVlbmNlKCA8cG9seS4gb2YgZGVncmVlICIsIERlZ3JlZShmKSwgIj4gKVxuIik7CiAgaWYg
ZiA9IDAqZiB0aGVuCiAgICByZXR1cm4gWyBdOwogIGZpOwogIGYgOj0gUG9seW5vbWlhbFJhdGlv
bmFscyhjb2VmcyhmKSk7CgogICMgY29tcHV0ZSB0aGUgU3R1cm0gc2VxdWVuY2UgUyBmb3IgZjsg
YWxsIGRlbm9taW5hdG9ycyBhbmQgZ2NkcwogICMgb2YgdGhlIGNvZWZmaWNpZW50cyBhcmUgcmVt
b3ZlZCBzaW5jZSB3ZSB3aWxsIGV2YWx1YXRlIHRoZQogICMgc2VxdWVuY2UgcG9zc2libHkgYSBs
YXJnZSBudW1iZXIgb2YgdGltZXM7IHN1YnJlc3VsdGFudCBtZXRob2RzCiAgIyBkbyBub3Qgc2F2
ZSB0aW1lIGluIHRoaXMgc2l0dWF0aW9uLgoKICBTIDo9IFsgY29udGVudFJlbW92ZWQoZikgXTsK
ICBnIDo9IGNvbnRlbnRSZW1vdmVkKERlcml2YXRpdmUoU1sxXSkpOwogIHdoaWxlIERlZ3JlZShn
KSA+IDAgZG8KICAgIEFkZChTLCBnKTsKICAgIGggOj0gLWNvbnRlbnRSZW1vdmVkKEV1Y2xpZGVh
blJlbWFpbmRlcihmLCBnKSk7CiAgICBmIDo9IGc7CiAgICBnIDo9IGg7CiAgb2Q7CiAgaWYgZyA8
PiAwKmcgdGhlbgogICAgQWRkKFMsIGcpOwogIGZpOwogICMgcmVtb3ZlIHRoZSBnY2Qgb2YgZiBh
bmQgZicgZnJvbSBhbGwgcG9seW5vbWlhbHMgaW4gUzsKICAjIHRoaXMgbm9ybWFsaXphdGlvbiBt
YWtlcyBTWzFdIHNxdWFyZWZyZWUgYW5kIFNbTGVuZ3RoKFMpXSA9IDEuCgogIGcgOj0gU1tMZW5n
dGgoUyldOwogIGZvciBpIGluIFsxLi5MZW5ndGgoUyldIGRvCiAgICBTW2ldIDo9IGNvbnRlbnRS
ZW1vdmVkKEV1Y2xpZGVhblF1b3RpZW50KFNbaV0sIGcpKTsKICBvZDsKICByZXR1cm4gUzsKZW5k
OwoKCiMgU3R1cm1TZXF1ZW5jZVZhbHVlKCA8Uz4sIDx4PiApCiMgICByZXR1cm5zIGFuIGludGVn
ZXIgd2hpY2ggY29udGFpbnMgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uCiMgICBvZiBldmFsdWF0
aW5nIHRoZSBTdHVybSBzZXF1ZW5jZSBTIGF0IHRoZSByYXRpb25hbCBwb2ludCB4LiAKIyAgIE5h
bWVseSwgdGhlIHJlc3VsdCBpcyBWID0gMip2ICsgdyB3aGVyZSB2IGlzIHRoZSBudW1iZXIgb2Yg
CiMgICBzaWduIHZhcmlhdGlvbnMgb2YgUyBhdCB4IGFuZCB3ID0gMS1hYnMoc2lnbih2YWx1ZShT
WzFdLCB4KSkpLgojICAgVGhlIHBvaW50IHggbWF5IGFsc28gYmUgImluZmluaXR5IiBvciAiLWlu
ZmluaXR5Ii4KIwoKU3R1cm1TZXF1ZW5jZVZhbHVlIDo9IGZ1bmN0aW9uICggUywgeCApCiAgbG9j
YWwgViwgcywgc2ksIHNpZ24sIGk7CgogIGlmIExlbmd0aChTKSA9IDAgdGhlbgogICAgcmV0dXJu
IDA7CiAgZmk7CgogICMgc2lnbihmKSA6PSBTaWduSW50KFZhbHVlKGYsIHgpKQogIGlmIHggPSAi
LWluZmluaXR5IiB0aGVuCiAgICBzaWduIDo9IGYgLT4gKC0xKV5EZWdyZWUoZikgKiBTaWduSW50
KExlYWRpbmdDb2VmZmljaWVudChmKSk7CiAgZWxpZiBJc1JhdCh4KSB0aGVuCiAgICBzaWduIDo9
IGYgLT4gU2lnbkludChWYWx1ZShmLCB4KSk7CiAgZWxpZiB4ID0gImluZmluaXR5IiB0aGVuCiAg
ICBzaWduIDo9IGYgLT4gU2lnbkludChMZWFkaW5nQ29lZmZpY2llbnQoZikpOwogIGZpOwoKICAj
IGNvdW50IHNpZ24gdmFyaWF0aW9ucyBkcm9wcGluZyB6ZXJvcywgYW5kIGdldCBzaWduKFNbMV0p
CiAgcyA6PSBzaWduKFNbMV0pOwogIFYgOj0gMSAtIEFic0ludChzKTsKICBmb3IgaSBpbiBbMi4u
TGVuZ3RoKFMpXSBkbwogICAgc2kgOj0gc2lnbihTW2ldKTsKICAgIGlmIHNpIDw+IDAgdGhlbgog
ICAgICBpZiBzIDw+IDAgYW5kIHNpIDw+IHMgdGhlbgogICAgICAgIFYgOj0gViArIDI7CiAgICAg
IGZpOwogICAgICBzIDo9IHNpOwogICAgZmk7CiAgb2Q7CiAgcmV0dXJuIFY7CmVuZDsKCgojIFN0
dXJtU2VxdWVuY2VOclJlYWxSb290cyggPGE+LCA8VmE+LCAgPGI+LCA8VmI+ICkKIyAgIHJldHVy
bnMgdGhlIG51bWJlciBvZiByZWFsIHJvb3RzIG9mIGEgcmF0aW9uYWwgcG9seW5vbWlhbCAKIyAg
IGYgPD4gMCBpbiB0aGUgKm9wZW4qIGludGVydmFsIHt4IHwgYSA8IHggPCBifSwgCiMgICBnaXZl
biB0aGUgdmFsdWVzIFZhLCBWYiBvZiBhIFN0dXJtIHNlcXVlbmNlIFNfZiBhdCBhLCBiIAojICAg
YXMgcmV0dXJuZWQgYnkgU3R1cm1TZXF1ZW5jZVZhbHVlLiBUaGUgdmFsdWVzIGEsIGIgbWF5IGJl
CiMgICByYXRpb25hbHMsICItaW5maW5pdHkiLCBvciAiaW5maW5pdHkiLgojCgpTdHVybVNlcXVl
bmNlTnJSZWFsUm9vdHMgOj0gZnVuY3Rpb24gKCBhLCBWYSwgIGIsIFZiICkKICBpZiAKICAgIElz
UmF0KGEpICAgICAgICBhbmQgSXNSYXQoYikgYW5kIGEgPCBiIG9yCiAgICBhID0gIi1pbmZpbml0
eSIgYW5kIElzUmF0KGIpICAgICAgICAgICBvcgogICAgSXNSYXQoYSkgICAgICAgIGFuZCBiID0g
ImluZmluaXR5IiAgICAgb3IKICAgIGEgPSAiLWluZmluaXR5IiBhbmQgYiA9ICJpbmZpbml0eSIK
ICB0aGVuCiAgICByZXR1cm4gUXVvSW50KFZhLCAyKSAtIChRdW9JbnQoVmIsIDIpKyhWYiBtb2Qg
MikpOwogIGVsc2UKICAgIHJldHVybiAwOwogIGZpOwplbmQ7CgoKI0YgUmVhbFJvb3RJc29sYXRp
b25CaW5hcnkoICAgICAgPEY+IFssIDxtaW4+LCA8bWF4Pl0gKQojRiBSZWFsUm9vdElzb2xhdGlv
blN0ZXJuQnJvY290KCA8Rj4gWywgPG1pbj4sIDxtYXg+XSApCiNGICAgcmV0dXJuIHJhdGlvbmFs
IGlzb2xhdGlvbiBpbnRlcnZhbHMgZm9yIGFsbCByZWFsIHJvb3RzIG9mIHRoZQojRiAgIHJhdGlv
bmFsIHBvbHlub21pYWwgZiA8PiAwIGluIHRoZSBjbG9zZWQgaW50ZXJ2YWwgW21pbi4ubWF4XS4K
I0YgICBUaGUgYXJndW1lbnQgRiBpcyBlaXRoZXIgdGhlIHBvbHlub21pYWwgZiBvciBhIFN0dXJt
IHNlcXVlbmNlCiNGICAgZm9yIGYuIFRoZSBib3VuZHMgbWluLCBtYXggYXJlICItaW5maW5pdHki
LCAiaW5maW5pdHkiIG9yIHJhdGlvbmFsLgojRiAgIFRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIHJh
dGlvbmFsIHBhaXJzIFthLCBiXSB3aGljaCByZXByZXNlbnQgdGhlIAojRiAgIGNsb3NlZCBzdWJp
bnRlcnZhbCBbYS4uYl0gb2YgW21pbi4ubWF4XSBzdWNoIHRoYXQgdGhlcmUgaXMgZXhhY3RseSAK
I0YgICBvbmUgcmVhbCB4IHNhdGlzZnlpbmcgYSA8PSB4IDw9IGIgYW5kIGYoeCkgPSAwLiBUaGUg
dHdvIGZ1bmN0aW9ucyAKI0YgICBkaWZmZXIgaW4gdGhlIHdheSB0aGV5IGdlbmVyYXRlIHRoZSBy
YXRpb25hbCBudW1iZXJzIGEgYW5kIGIuCiNGCgpSZWFsUm9vdElzb2xhdGlvbkJpbmFyeSA6PSBm
dW5jdGlvbiAoIGFyZyApCiAgbG9jYWwgCiAgICBTLCBtaW4sIG1heCwgICAgICAgICAgICAgICAg
IyBjb21wbGV0ZWQgYXJndW1lbnQgbGlzdAogICAgcm9vdHMsICAgICAgICAgICAgICAgICAgICAg
ICMgbGlzdCBvZiBpbnRlcnZhbHMgW2EsIGJdIGZvciB0aGUgcm9vdHMKICAgIFZtaW5mLCBWbTEs
IFYwLCBWcDEsIFZwaW5mLCAjIHNpZ24gdmFyaWF0aW9ucyBhdCBzb21lIHBvaW50cwogICAgaXNv
bGF0ZVNpbmdsZVBvaW50LAogICAgaXNvbGF0ZU9wZW5JbnRlcnZhbDsKCiAgaXNvbGF0ZVNpbmds
ZVBvaW50IDo9IGZ1bmN0aW9uICggYSxWYSApCgogICAgIyBzdG9wIGlmIGEgaXMgbm90IGluIFtt
aW4uLm1heF0KICAgIGlmIG5vdCAoCiAgICAgICggbWluID0gIi1pbmZpbml0eSIgb3IgbWluIDw9
IGEgKSBhbmQKICAgICAgKCBtYXggPSAgImluZmluaXR5IiBvciBtYXggPj0gYSApCiAgICApIHRo
ZW4KICAgICAgcmV0dXJuOwogICAgZmk7CgogICAgIyBzaW1wbHkgdGVzdCBmKGEpID0gMAogICAg
SW5mb0FwcHJveDIoIlsiLCBhLCAiXSBcYyIpOwogICAgaWYgVmEgbW9kIDIgPSAxIHRoZW4KICAg
ICAgQWRkKHJvb3RzLCBbYSwgYV0pOwogICAgZmk7CiAgZW5kOwoKICBpc29sYXRlT3BlbkludGVy
dmFsIDo9IGZ1bmN0aW9uICggYSxWYSwgYixWYiApCiAgICBsb2NhbCBjLCBWYzsKCiAgICAjIHN0
b3AgaWYgKGEuLmIpIGlzIGRpc2pvaW50IHRvIFttaW4uLm1heF0KICAgIGlmIG5vdCAoCiAgICAg
ICggbWluID0gIi1pbmZpbml0eSIgb3IgYiA9ICAiaW5maW5pdHkiIG9yIG1pbiA8IGIgKSBhbmQK
ICAgICAgKCBtYXggPSAgImluZmluaXR5IiBvciBhID0gIi1pbmZpbml0eSIgb3IgbWF4ID4gYSAp
CiAgICApIHRoZW4KICAgICAgcmV0dXJuOwogICAgZmk7ICAgIAoKICAgICMgc3RvcCBpZiAoYS4u
YikgZG9lcyBub3QgY29udGFpbiBhIHJvb3QgYW55bW9yZQogICAgSW5mb0FwcHJveDIoIigiLCBh
LCAiLi4iLCBiLCAiKSBcYyIpOwogICAgaWYgU3R1cm1TZXF1ZW5jZU5yUmVhbFJvb3RzKGEsVmEs
IGIsVmIpID0gMCB0aGVuCiAgICAgIHJldHVybjsKICAgIGZpOwoKICAgIGlmIElzUmF0KGEpIGFu
ZCBJc1JhdChiKSB0aGVuCgogICAgICAjIChhLi5iKSBmaW5pdGU6IHN1YmRpdmlkZSBhdCAoYSti
KS8yIHVudGlsIGEgcm9vdCBpcyBpc29sYXRlZAogICAgICAjIGFuZCB0aGUgYm91bmRzIGEsIGIg
Ym90aCBsaWUgaW4gW21pbi4ubWF4XQogICAgICBpZiAKICAgICAgICBTdHVybVNlcXVlbmNlTnJS
ZWFsUm9vdHMoYSxWYSwgYixWYikgPSAxIGFuZAogICAgICAgICggbWluID0gIi1pbmZpbml0eSIg
b3IgbWluIDw9IGEpIGFuZAogICAgICAgICggbWF4ID0gICJpbmZpbml0eSIgb3IgbWF4ID49IGIp
CiAgICAgIHRoZW4KICAgICAgICBBZGQocm9vdHMsIFthLCBiXSk7CiAgICAgICAgcmV0dXJuOwog
ICAgICBmaTsKICAgICAgYyA6PSAoYSArIGIpLzI7CgogICAgZWxpZiBhID0gIi1pbmZpbml0eSIg
dGhlbgoKICAgICAgIyAoLWluZmluaXR5Li5iKTogZGVjcmVhc2UgYiBleHBvbmVudGlhbGx5CiAg
ICAgIGMgOj0gMipiOwoKICAgIGVsaWYgYiA9ICJpbmZpbml0eSIgdGhlbgogIAogICAgICAjIChh
Li5pbmZpbml0eSk6IGluY3JlYXNlIGEgZXhwb25lbnRpYWxseQogICAgICBjIDo9IDIqYTsKCiAg
ICBmaTsKCiAgICAjIHNwbGl0IChhLi5iKSBhcyAoYS4uYykgdW5pb24ge2N9IHVuaW9uIChjLi5i
KSAKICAgIFZjIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCBjKTsKICAgIGlzb2xhdGVPcGVuSW50
ZXJ2YWwoYSxWYSwgYyxWYyk7CiAgICBpc29sYXRlU2luZ2xlUG9pbnQoYyxWYyk7CiAgICBpc29s
YXRlT3BlbkludGVydmFsKGMsVmMsIGIsVmIpOwogIGVuZDsKCiAgIyBkZWNvZGUgYW5kIGNoZWNr
IGFyZwogIGlmIExlbmd0aChhcmcpID0gMSB0aGVuCiAgICBTICAgOj0gYXJnWzFdOwogICAgbWlu
IDo9ICItaW5maW5pdHkiOwogICAgbWF4IDo9ICAiaW5maW5pdHkiOwogIGVsaWYgTGVuZ3RoKGFy
ZykgPSAzIHRoZW4KICAgIFMgICA6PSBhcmdbMV07CiAgICBtaW4gOj0gYXJnWzJdOwogICAgbWF4
IDo9IGFyZ1szXTsKICBlbHNlCiAgICBFcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywg
MSBvciAzIGV4cGVjdGVkIik7CiAgZmk7CiAgaWYgbm90ICggTXlJc1BvbHlub21pYWwoUykgb3Ig
SXNMaXN0KFMpIGFuZCBGb3JBbGwoUywgTXlJc1BvbHlub21pYWwpICkgdGhlbgogICAgRXJyb3Io
IjxTPiBtdXN0IGJlIGEgcmF0aW9uYWwgcG9seW5vbWlhbCBvciBhIFN0dXJtIHNlcXVlbmNlIik7
CiAgZmk7CiAgaWYgbm90ICggCiAgICAoIElzUmF0KG1pbikgb3IgbWluIGluIFsiLWluZmluaXR5
IiwgImluZmluaXR5Il0gKSBhbmQKICAgICggSXNSYXQobWF4KSBvciBtYXggaW4gWyItaW5maW5p
dHkiLCAiaW5maW5pdHkiXSApCiAgKSB0aGVuCiAgICBFcnJvcigiPG1pbj4gYW5kIDxtYXg+IG11
c3QgYmUgcmF0aW9uYWwsIFwiaW5maW5pdHlcIiwgb3IgXCItaW5maW5pdHlcIiIpOwogIGZpOwog
IGlmIG5vdCBJc0xpc3QoUykgdGhlbiAgICAKICAgIFMgOj0gU3R1cm1TZXF1ZW5jZShTKTsKICBm
aTsKICBJbmZvQXBwcm94MSgKICAgICIjSSBSZWFsUm9vdElzb2xhdGlvbkJpbmFyeSggPHBvbHku
IG9mIGRlZ3JlZSAiLCAKICAgICBEZWdyZWUoU1sxXSksIAogICAgIj4gKVxuIgogICk7CgogICMg
c2FtcGxlIFMgYXQgYSBudW1iZXIgb2Ygc3RhbmRhcmQgcG9pbnRzCiAgVm1pbmYgOj0gU3R1cm1T
ZXF1ZW5jZVZhbHVlKFMsICItaW5maW5pdHkiKTsgCiAgVm0xICAgOj0gU3R1cm1TZXF1ZW5jZVZh
bHVlKFMsICAgICAgICAgIC0xKTsgCiAgVjAgICAgOj0gU3R1cm1TZXF1ZW5jZVZhbHVlKFMsICAg
ICAgICAgICAwKTsKICBWcDEgICA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICAgICAgICAgIDEp
OyAKICBWcGluZiA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICJpbmZpbml0eSIpOyAKCiAgSW5m
b0FwcHJveDIoIiNJICAgIik7CiAgcm9vdHMgOj0gWyBdOwogIGlzb2xhdGVPcGVuSW50ZXJ2YWwo
Ii1pbmZpbml0eSIsIFZtaW5mLCAtMSwgVm0xKTsKICBpc29sYXRlU2luZ2xlUG9pbnQoIC0xLCBW
bTEpOwogIGlzb2xhdGVPcGVuSW50ZXJ2YWwoLTEsIFZtMSwgMCwgVjApOwogIGlzb2xhdGVTaW5n
bGVQb2ludCggIDAsIFYwKTsKICBpc29sYXRlT3BlbkludGVydmFsKCAwLCBWMCwgMSwgVnAxKTsK
ICBpc29sYXRlU2luZ2xlUG9pbnQoICAxLCBWcDEpOwogIGlzb2xhdGVPcGVuSW50ZXJ2YWwoIDEs
IFZwMSwgImluZmluaXR5IiwgVnBpbmYpOwogIEluZm9BcHByb3gyKCJcbiIpOwoKICByZXR1cm4g
cm9vdHM7CmVuZDsKClJlYWxSb290SXNvbGF0aW9uU3Rlcm5Ccm9jb3QgOj0gZnVuY3Rpb24gKCBh
cmcgKQogIGxvY2FsIAogICAgUywgbWluLCBtYXgsICAgICAgICAgICAgICAgICMgY29tcGxldGVk
IGFyZ3VtZW50IGxpc3QKICAgIHJvb3RzLCAgICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2Yg
aW50ZXJ2YWxzIFthLCBiXSBmb3IgdGhlIHJvb3RzCiAgICBWbWluZiwgVm0xLCBWMCwgVnAxLCBW
cGluZiwgIyBzaWduIHZhcmlhdGlvbnMgYXQgc29tZSBwb2ludHMKICAgIGlzb2xhdGVTaW5nbGVQ
b2ludCwKICAgIGlzb2xhdGVPcGVuSW50ZXJ2YWw7CgogIGlzb2xhdGVTaW5nbGVQb2ludCA6PSBm
dW5jdGlvbiAoIGEsVmEgKQogICAgaWYgbm90ICgKICAgICAgKCBtaW4gPSAiLWluZmluaXR5IiBv
ciBtaW4gPD0gYSApIGFuZAogICAgICAoIG1heCA9ICAiaW5maW5pdHkiIG9yIG1heCA+PSBhICkK
ICAgICkgdGhlbgogICAgICByZXR1cm47CiAgICBmaTsKICAgIEluZm9BcHByb3gyKCJbIiwgYSwg
Il0gXGMiKTsKICAgIGlmIFZhIG1vZCAyID0gMSB0aGVuCiAgICAgIEFkZChyb290cywgW2EsIGFd
KTsKICAgIGZpOwogIGVuZDsKCiAgaXNvbGF0ZU9wZW5JbnRlcnZhbCA6PSBmdW5jdGlvbiAoIGEs
VmEsIGIsVmIgKQogICAgbG9jYWwgCiAgICAgIGMsIFZjLCAgICAgICAgICAgICAjIHRoZSBzcGxp
dHRpbmcgcG9pbnQKICAgICAgYU4sYUQsIGJOLGJELCAgICAgICMgTnVtZXJhdG9yLCBEZW5vbWlu
YXRvciBvZiBhLCBiCiAgICAgIHNwbGl0UG9pbnQsIHZhbGlkLCAjIGZ1bmN0aW9ucyB0byBzZWFy
Y2ggZmFzdGVyCiAgICAgIGtMbywga01pLCBrSGksICAgICAjIHBvc2l0aXZlIGludGVnZXIgaW5k
aWNlcyB0byBzZWFyY2ggZmFzdGVyCiAgICAgIGNMbywgY01pLCBjSGksICAgICAjIHBvaW50cyBm
b3Iga0xvLCBrTWksIGtIaQogICAgICBWTG8sIFZNaSwgVkhpOyAgICAgIyBzaWduIHZhcmlhdGlv
bnMgYXQgY0xvLCBjTWksIGNIaQoKICAgICMgc3RvcCBpZiAoYS4uYikgaXMgZGlzam9pbnQgdG8g
W21pbi4ubWF4XQogICAgaWYgbm90ICgKICAgICAgKCBtaW4gPSAiLWluZmluaXR5IiBvciBiID0g
ICJpbmZpbml0eSIgb3IgbWluIDwgYiApIGFuZAogICAgICAoIG1heCA9ICAiaW5maW5pdHkiIG9y
IGEgPSAiLWluZmluaXR5IiBvciBtYXggPiBhICkKICAgICkgdGhlbgogICAgICByZXR1cm47CiAg
ICBmaTsgICAgCgogICAgIyBzdG9wIGlmIChhLi5iKSBkb2VzIG5vdCBjb250YWluIGEgcm9vdCBh
bnltb3JlCiAgICBJbmZvQXBwcm94MigiKCIsIGEsICIuLiIsIGIsICIpIFxjIik7CiAgICBpZiBT
dHVybVNlcXVlbmNlTnJSZWFsUm9vdHMoYSxWYSwgYixWYikgPSAwIHRoZW4KICAgICAgcmV0dXJu
OwogICAgZmk7CgogICAgaWYgSXNSYXQoYSkgYW5kIElzUmF0KGIpIHRoZW4KCiAgICAgICMgKGEu
LmIpIGZpbml0ZTogc3ViZGl2aWRlIHVudGlsIGEgcm9vdCBpcyBpc29sYXRlZAogICAgICAjIGFu
ZCB0aGUgYm91bmRzIGEsIGIgYm90aCBsaWUgaW4gW21pbi4ubWF4XQogICAgICBpZiAKICAgICAg
ICBTdHVybVNlcXVlbmNlTnJSZWFsUm9vdHMoYSxWYSwgYixWYikgPSAxIGFuZAogICAgICAgICgg
bWluID0gIi1pbmZpbml0eSIgb3IgbWluIDw9IGEpIGFuZAogICAgICAgICggbWF4ID0gICJpbmZp
bml0eSIgb3IgbWF4ID49IGIpCiAgICAgIHRoZW4KICAgICAgICBBZGQocm9vdHMsIFthLCBiXSk7
CiAgICAgICAgcmV0dXJuOwogICAgICBmaTsKICAgICAgYyA6PSAoTnVtZXJhdG9yUmF0KGEpK051
bWVyYXRvclJhdChiKSkvKERlbm9taW5hdG9yUmF0KGEpK0Rlbm9taW5hdG9yUmF0KGIpKTsKCiAg
ICBlbGlmIGEgPSAiLWluZmluaXR5IiB0aGVuCgogICAgICAjICgtaW5maW5pdHkuLmIpOiBkZWNy
ZWFzZSBiIGJ5IG9uZSAKICAgICAgYyA6PSBiIC0gMTsKCiAgICBlbGlmIGIgPSAiaW5maW5pdHki
IHRoZW4KICAKICAgICAgIyAoYS4uaW5maW5pdHkpOiBpbmNyZWFzZSBhIGJ5IG9uZQogICAgICBj
IDo9IGEgKyAxOwoKICAgIGZpOwoKICAgICMgc3BlZWQgdXAgdGhlIHNlYXJjaCBieSBleHBvbmVu
dGlhbGx5IGluY3JlYXNpbmcgdGhlIHN0ZXBzaXplCiAgICAjIGlmIChhLi5jKSBvciAoYy4uYikg
ZG9lcyBub3QgY29udGFpbiBhIHJvb3QKICAgIFZjIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCBj
KTsKICAgIGlmIAogICAgICBTdHVybVNlcXVlbmNlTnJSZWFsUm9vdHMoYSxWYSwgYyxWYykgPSAw
IG9yIAogICAgICBTdHVybVNlcXVlbmNlTnJSZWFsUm9vdHMoYyxWYywgYixWYikgPSAwIAogICAg
dGhlbgogICAgICBpZiBhID0gIi1pbmZpbml0eSIgdGhlbgogICAgICAgIGFOIDo9IC0xOyAgICAg
ICAgICAKICAgICAgICBhRCA6PSAgMDsKICAgICAgZWxzZQogICAgICAgIGFOIDo9IE51bWVyYXRv
clJhdChhKTsgCiAgICAgICAgYUQgOj0gRGVub21pbmF0b3JSYXQoYSk7CiAgICAgIGZpOwogICAg
ICBpZiBiID0gImluZmluaXR5IiB0aGVuCiAgICAgICAgYk4gOj0gMTsgCiAgICAgICAgYkQgOj0g
MDsKICAgICAgZWxzZQogICAgICAgIGJOIDo9IE51bWVyYXRvclJhdChiKTsKICAgICAgICBiRCA6
PSBEZW5vbWluYXRvclJhdChiKTsKICAgICAgZmk7CiAgICAgIGlmIFN0dXJtU2VxdWVuY2VOclJl
YWxSb290cyhhLFZhLCBjLFZjKSA9IDAgdGhlbgogICAgICAgIHNwbGl0UG9pbnQgOj0gayAgLT4g
KGFOICsgaypiTikvKGFEICsgaypiRCk7CiAgICAgICAgdmFsaWQgICAgICA6PSBWYyAtPiBWYyA9
IFZhOwogICAgICBlbHNlCiAgICAgICAgc3BsaXRQb2ludCA6PSBrIC0+IChrKmFOICsgYk4pLyhr
KmFEICsgYkQpOwogICAgICAgIHZhbGlkICAgICAgOj0gVmMgLT4gVmMgPSBWYjsKICAgICAgZmk7
CgogICAgICAjIGZpbmQgdGhlIGxhcmdlc3QgdmFsaWQgayBieSBleHBvbmVudGlhbGx5IGluY3Jl
YXNpbmcgayB1cCB0bwogICAgICAjIGFuIHVwcGVyIGJvdW5kIGFuZCBiaW5hcnkgc2VhcmNoIGFm
dGVyd2FyZHMKCiAgICAgIGtMbyA6PSAxOwogICAgICBjTG8gOj0gYzsKICAgICAgVkxvIDo9IFZj
OwogICAgICBrSGkgOj0gMjsKICAgICAgY0hpIDo9IHNwbGl0UG9pbnQoMik7CiAgICAgIFZIaSA6
PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgY0hpKTsKICAgICAgd2hpbGUgdmFsaWQoVkhpKSBkbwog
ICAgICAgIGtMbyA6PSBrSGk7IAogICAgICAgIGNMbyA6PSBjSGk7IAogICAgICAgIFZMbyA6PSBW
SGk7CiAgICAgICAga0hpIDo9IDIqa0hpOwoJY0hpIDo9IHNwbGl0UG9pbnQoa0hpKTsKCVZIaSA6
PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgY0hpKTsKICAgICAgb2Q7CiAgICAgIHdoaWxlIGtIaSAt
IGtMbyA+IDEgZG8KICAgICAgICBrTWkgOj0gUXVvSW50KGtIaSArIGtMbywgMik7CiAgICAgICAg
Y01pIDo9IHNwbGl0UG9pbnQoa01pKTsKICAgICAgICBWTWkgOj0gU3R1cm1TZXF1ZW5jZVZhbHVl
KFMsIGNNaSk7CiAgICAgICAgaWYgdmFsaWQoVk1pKSB0aGVuCiAgICAgICAgICBrTG8gOj0ga01p
OwogICAgICAgICAgY0xvIDo9IGNNaTsKICAgICAgICAgIFZMbyA6PSBWTWk7CiAgICAgICAgZWxz
ZQogICAgICAgICAga0hpIDo9IGtNaTsKICAgICAgICAgIGNIaSA6PSBjTWk7CiAgICAgICAgICBW
SGkgOj0gVk1pOwogICAgICAgIGZpOyAKICAgICAgb2Q7CiAgICAgIGMgIDo9IGNMbzsKICAgICAg
VmMgOj0gVkxvOwogICAgZmk7CgogICAgIyBzcGxpdCAoYS4uYikgaW50byAoYS4uYykgdW5pb24g
e2N9IHVuaW9uIChjLi5iKQogICAgaXNvbGF0ZU9wZW5JbnRlcnZhbChhLFZhLCBjLFZjKTsKICAg
IGlzb2xhdGVTaW5nbGVQb2ludChjLFZjKTsKICAgIGlzb2xhdGVPcGVuSW50ZXJ2YWwoYyxWYywg
YixWYik7CiAgZW5kOwoKICAjIGRlY29kZSBhbmQgY2hlY2sgYXJnCiAgaWYgTGVuZ3RoKGFyZykg
PSAxIHRoZW4KICAgIFMgICA6PSBhcmdbMV07CiAgICBtaW4gOj0gIi1pbmZpbml0eSI7CiAgICBt
YXggOj0gICJpbmZpbml0eSI7CiAgZWxpZiBMZW5ndGgoYXJnKSA9IDMgdGhlbgogICAgUyAgIDo9
IGFyZ1sxXTsKICAgIG1pbiA6PSBhcmdbMl07CiAgICBtYXggOj0gYXJnWzNdOwogIGVsc2UKICAg
IEVycm9yKCJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCAxIG9yIDMgZXhwZWN0ZWQiKTsKICBm
aTsKICBpZiBub3QgKCBNeUlzUG9seW5vbWlhbChTKSBvciBJc0xpc3QoUykgYW5kIEZvckFsbChT
LCBNeUlzUG9seW5vbWlhbCkgKSB0aGVuCiAgICBFcnJvcigiPFM+IG11c3QgYmUgYSByYXRpb25h
bCBwb2x5bm9taWFsIG9yIGEgU3R1cm0gc2VxdWVuY2UiKTsKICBmaTsKICBpZiBub3QgKCAKICAg
ICggSXNSYXQobWluKSBvciBtaW4gaW4gWyItaW5maW5pdHkiLCAiaW5maW5pdHkiXSApIGFuZAog
ICAgKCBJc1JhdChtYXgpIG9yIG1heCBpbiBbIi1pbmZpbml0eSIsICJpbmZpbml0eSJdICkKICAp
IHRoZW4KICAgIEVycm9yKCI8bWluPiBhbmQgPG1heD4gbXVzdCBiZSByYXRpb25hbCwgXCJpbmZp
bml0eVwiLCBvciBcIi1pbmZpbml0eVwiIik7CiAgZmk7CiAgaWYgbm90IElzTGlzdChTKSB0aGVu
CiAgICBTIDo9IFN0dXJtU2VxdWVuY2UoUyk7CiAgZmk7CiAgSW5mb0FwcHJveDEoCiAgICAiI0kg
UmVhbFJvb3RJc29sYXRpb25TdGVybkJyb2NvdCggPHBvbHkuIG9mIGRlZ3JlZSAiLCAKICAgICBE
ZWdyZWUoU1sxXSksIAogICAgIj4gKVxuIgogICk7CgogICMgcHJlY29tcHV0ZSBzb21lIHN0YW5k
YXJkIHZhbHVlcwogIFZtaW5mIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCAiLWluZmluaXR5Iik7
IAogIFZtMSAgIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCAgICAgICAgICAtMSk7IAogIFYwICAg
IDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCAgICAgICAgICAgMCk7CiAgVnAxICAgOj0gU3R1cm1T
ZXF1ZW5jZVZhbHVlKFMsICAgICAgICAgICAxKTsgCiAgVnBpbmYgOj0gU3R1cm1TZXF1ZW5jZVZh
bHVlKFMsICAiaW5maW5pdHkiKTsgCgogIEluZm9BcHByb3gyKCIjSSAgICIpOwogIHJvb3RzIDo9
IFsgXTsKICBpc29sYXRlT3BlbkludGVydmFsKCItaW5maW5pdHkiLCBWbWluZiwgLTEsIFZtMSk7
CiAgaXNvbGF0ZVNpbmdsZVBvaW50KCAtMSwgVm0xKTsKICBpc29sYXRlT3BlbkludGVydmFsKC0x
LCBWbTEsIDAsIFYwKTsKICBpc29sYXRlU2luZ2xlUG9pbnQoICAwLCBWMCk7CiAgaXNvbGF0ZU9w
ZW5JbnRlcnZhbCggMCwgVjAsIDEsIFZwMSk7CiAgaXNvbGF0ZVNpbmdsZVBvaW50KCAgMSwgVnAx
KTsKICBpc29sYXRlT3BlbkludGVydmFsKCAxLCBWcDEsICJpbmZpbml0eSIsIFZwaW5mKTsKICBJ
bmZvQXBwcm94MigiXG4iKTsKCiAgcmV0dXJuIHJvb3RzOwplbmQ7CgoKIyBJdGVyYXRpdmUgYXBw
cm94aW1hdGlvbiBvZiByZWFscyAKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK
IyBBcHByb3hpbWF0aW9uSW50ZXJuYWwKIyAgIGZpbGxzIHRoZSBsaXN0IHBhdGggd2l0aCBpbmZv
cm1hdGlvbiBvbiB0aGUgYXBwcm94aW1hdGlvbiB1bnRpbAojICAgaXQgaXMgYWNjdXJhdGUgZW5v
dWdoIGFzIHNwZWNpZmllZCBieSBhYnNFcnJvci4gVGhlIGZ1bmN0aW9ucwojICAgbHdiKGEsIGIs
IGspLCB1cGIoYSwgYiwgaykgY29uc3RydWN0IHRoZSBrLXRoIGxvd2VyIGFuZCB1cHBlcgojICAg
Ym91bmQgaW4gKGEuLmIpLiBJbiBwYXJ0aWN1bGFyIGx3YihhLCBiLCAxKSA9IHVwYihhLCBiLCAx
KSBhbmQKIyAgICAgYSA9IGx3YihhLCBiLCAwKSA8IGx3YihhLCBiLCAxKSA8IC4uICA8IGIgYW5k
CiMgICAgIGEgPCAgLi4gPCB1cGIoYSwgYiwgMSkgPCB1cGIoYSwgYiwgMCkgPSBiLgojICAgVGhl
IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgc2lnbWEgZGlkIG5vdCByZXR1cm4gYSByYXRpb25h
bAojICAgYW5kIHRydWUgb3RoZXJ3aXNlLgoKQXBwcm94aW1hdGlvbkludGVybmFsIDo9IGZ1bmN0
aW9uICggc2lnbWEsIGFic0Vycm9yLCBwYXRoLCBsd2IsIHVwYiApCiAgbG9jYWwgCiAgICBhLCB4
LCBiLCAgICAgICAjIHBvaW50cwogICAga0xvLCBrTWksIGtIaSwgIyBpbnRlZ2VycyB0byBmaW5k
IHRyYW5zaXRpb24gcG9pbnQKICAgIHNMbywgc01pLCBzSGksICMgc2lnbWEgdmFsdWVzCiAgICBz
LCBpOyAgICAgICAgICAjIHNpZ21hIHZhbHVlLCBpbmRleCBpbnRvIHBhdGgKCiAgIyBJbml0aWFs
aXplIHBhdGhbMV0sIHBhdGhbMl0gdG8gY29udGFpbiBhIGZpbml0ZSBpbnRlcnZhbAogICMKICBp
ZiBMZW5ndGgocGF0aCkgPCAyIHRoZW4KICAgIHMgOj0gc2lnbWEoMCk7IAogICAgaWYgbm90IElz
UmF0KHMpIHRoZW4gcmV0dXJuIGZhbHNlOyBmaTsKICAgIGlmIHMgPSAwIHRoZW4KICAgICAgYSA6
PSAwOwogICAgICBiIDo9IDA7CiAgICBlbGlmIHMgPiAwIHRoZW4KICAgICAgYSA6PSAwOwogICAg
ICBiIDo9IDE7CiAgICAgIHMgOj0gc2lnbWEoYik7IAogICAgICBpZiBub3QgSXNSYXQocykgdGhl
biByZXR1cm4gZmFsc2U7IGZpOwogICAgICB3aGlsZSBzID4gMCBkbwogICAgICAgIGEgOj0gYjsK
ICAgICAgICBiIDo9IDIqYjsKICAgICAgICBzIDo9IHNpZ21hKGIpOyAKICAgICAgICBpZiBub3Qg
SXNSYXQocykgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAgICBvZDsKICAgICAgaWYgcyA9IDAg
dGhlbgogICAgICAgIGEgOj0gYjsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIGIgLSBhID4gMSBk
bwogICAgICAgICAgeCA6PSBRdW9JbnQoYSArIGIsIDIpOwogICAgICAgICAgcyA6PSBzaWdtYSh4
KTsgCiAgICAgICAgICBpZiBub3QgSXNSYXQocykgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAg
ICAgICAgaWYgcyA9IDAgdGhlbgogICAgICAgICAgICBhIDo9IHg7CiAgICAgICAgICAgIGIgOj0g
eDsKICAgICAgICAgIGVsaWYgcyA+IDAgdGhlbgogICAgICAgICAgICBhIDo9IHg7CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIGIgOj0geDsKICAgICAgICAgIGZpOwogICAgICAgIG9kOwogICAg
ICBmaTsKICAgIGVsc2UKICAgICAgYSA6PSAtMTsKICAgICAgYiA6PSAgMDsKICAgICAgcyA6PSBz
aWdtYShhKTsgCiAgICAgIGlmIG5vdCBJc1JhdChzKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAg
ICAgIHdoaWxlIHMgPCAwIGRvCiAgICAgICAgYiA6PSBhOwogICAgICAgIGEgOj0gMiphOwogICAg
ICAgIHMgOj0gc2lnbWEoYSk7IAogICAgICAgIGlmIG5vdCBJc1JhdChzKSB0aGVuIHJldHVybiBm
YWxzZTsgZmk7CiAgICAgIG9kOwogICAgICBpZiBzID0gMCB0aGVuCiAgICAgICAgYiA6PSBhOwog
ICAgICBlbHNlCiAgICAgICAgd2hpbGUgYiAtIGEgPiAxIGRvCiAgICAgICAgICB4IDo9IFF1b0lu
dChhICsgYiwgMik7CiAgICAgICAgICBzIDo9IHNpZ21hKHgpOyAKICAgICAgICAgIGlmIG5vdCBJ
c1JhdChzKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICAgICAgICBpZiBzID0gMCB0aGVuCiAg
ICAgICAgICAgIGEgOj0geDsKICAgICAgICAgICAgYiA6PSB4OwogICAgICAgICAgZWxpZiBzID4g
MCB0aGVuCiAgICAgICAgICAgIGEgOj0geDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYiA6
PSB4OwogICAgICAgICAgZmk7CiAgICAgICAgb2Q7CiAgICAgIGZpOwogICAgZmk7CiAgICBwYXRo
WzFdIDo9IGE7CiAgICBwYXRoWzJdIDo9IGI7CiAgZmk7CgogICMgRXh0ZW5kIHBhdGggdG8gY29u
dGFpbiBhIHN1ZmZpY2llbnRseSB0aWdodCBhcHByb3hpbWF0aW9uLgogICMgVGhlcmUgYXJlIHR3
byB0aWdodGVuaW5nIG9wZXJhdGlvbnMgZm9yIHggaW4gKGEuLmIpOgogICMgICBBKSBhIDo9IHgg
ICBhbmQgICBCKSBiIDo9IHguCiAgIyBUaGUgbGlzdCA8cGF0aD4gZW5jb2RlcyB0aGUgc2VxdWVu
Y2Ugb2YgaW50ZXJ2YWxzIHRpZ2h0ZW5pbmcKICAjIGFyb3VuZCBjIGZvciBzaWdtYShjKSA9IDAg
aW4gdGhlIGZvcm0KICAjICAgICAgW3BhdGhbMV0uLnBhdGhbMl1dIAogICMgICA+PSBbcGF0aFsz
XS4ucGF0aFsyXV0gCiAgIyAgID49IFtwYXRoWzNdLi5wYXRoWzRdXQogICMgICA+PSAuLgogICMg
VGhlIG1ldGhvZCB0byBleHRlbmQgdGhlIHBhdGggaXMgc3RyYWlnaHQgZm9yd2FyZCwgZXhjZXB0
IGZvcgogICMgYW4gYWRkaXRpb25hbCBpbXByb3ZlbWVudDogV2UgZG8gbm90IHNlYXJjaCBieSBz
dGVwcGluZyBzaW5nbGUKICAjIEEncyBhbmQgQidzIGJ1dCB3ZSByYXRoZXIgc2VhcmNoIGV4cG9u
ZW50aWFsbHkvYmluYXJ5IGZvciB0aGUKICAjIG5leHQgQS9CLWNoYW5nZS4KICAjCiAgaSA6PSBM
ZW5ndGgocGF0aCk7CiAgaWYgaSBtb2QgMiA9IDAgdGhlbgogICAgYSA6PSBwYXRoW2ktMV07CiAg
ICBiIDo9IHBhdGhbaV07CiAgZWxzZQogICAgYSA6PSBwYXRoW2ldOwogICAgYiA6PSBwYXRoW2kt
MV07CiAgZmk7CiAgd2hpbGUgbm90IGIgLSBhIDwgYWJzRXJyb3IgZG8KICAgIGlmIGkgbW9kIDIg
PSAwIHRoZW4KCiAgICAgICMgY29udGludWUgdG8gcmFpc2UgbG93ZXIgYm91bmQKICAgICAga0xv
IDo9IDE7CiAgICAgIHNMbyA6PSBzaWdtYShsd2IoYSwgYiwga0xvKSk7CiAgICAgIGlmIG5vdCBJ
c1JhdChzTG8pIHRoZW4gcmV0dXJuIGZhbHNlOyBmaTsKICAgICAga0hpIDo9IDI7CiAgICAgIHNI
aSA6PSBzaWdtYShsd2IoYSwgYiwga0hpKSk7CiAgICAgIGlmIG5vdCBJc1JhdChzSGkpIHRoZW4g
cmV0dXJuIGZhbHNlOyBmaTsKICAgICAgd2hpbGUgc0hpID4gMCBkbwogICAgICAgIGtMbyA6PSBr
SGk7CiAgICAgICAgc0xvIDo9IHNIaTsKICAgICAgICBrSGkgOj0gMiprSGk7CiAgICAgICAgc0hp
IDo9IHNpZ21hKGx3YihhLCBiLCBrSGkpKTsKICAgICAgICBpZiBub3QgSXNSYXQoc0hpKSB0aGVu
IHJldHVybiBmYWxzZTsgZmk7CiAgICAgIG9kOwogICAgICBpZiBzSGkgPSAwIHRoZW4KICAgICAg
ICBrTG8gOj0ga0hpOwogICAgICAgIHNMbyA6PSBzSGk7CiAgICAgIGVsc2UKICAgICAgICB3aGls
ZSBrSGkgLSBrTG8gPiAxIGRvCiAgICAgICAgICBrTWkgOj0gUXVvSW50KGtIaSArIGtMbywgMik7
CiAgICAgICAgICBzTWkgOj0gc2lnbWEobHdiKGEsIGIsIGtNaSkpOwogICAgICAgICAgaWYgbm90
IElzUmF0KHNNaSkgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAgICAgICAgaWYgc01pID0gMCB0
aGVuCiAgICAgICAgICAgIGtMbyA6PSBrTWk7CiAgICAgICAgICAgIHNMbyA6PSBzTWk7CiAgICAg
ICAgICAgIGtIaSA6PSBrTWk7CiAgICAgICAgICAgIHNIaSA6PSBzTWk7CiAgICAgICAgICBlbGlm
IHNNaSA+IDAgdGhlbgogICAgICAgICAgICBrTG8gOj0ga01pOwogICAgICAgICAgICBzTG8gOj0g
c01pOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBrSGkgOj0ga01pOwogICAgICAgICAgICBz
SGkgOj0gc01pOwogICAgICAgICAgZmk7CiAgICAgICAgb2Q7CiAgICAgIGZpOwogICAgICB4IDo9
IGx3YihhLCBiLCBrTG8pOwogICAgICBzIDo9IHNMbzsKCiAgICBlbHNlCgogICAgICAjIGNvbnRp
bnVlIHRvIGxvd2VyIHVwcGVyIGJvdW5kCiAgICAgIGtMbyA6PSAxOwogICAgICBzTG8gOj0gc2ln
bWEodXBiKGEsIGIsIGtMbykpOwogICAgICBpZiBub3QgSXNSYXQoc0xvKSB0aGVuIHJldHVybiBm
YWxzZTsgZmk7CiAgICAgIGtIaSA6PSAyOwogICAgICBzSGkgOj0gc2lnbWEodXBiKGEsIGIsIGtI
aSkpOwogICAgICBpZiBub3QgSXNSYXQoc0hpKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICAg
IHdoaWxlIHNIaSA8IDAgZG8KICAgICAgICBrTG8gOj0ga0hpOwogICAgICAgIHNMbyA6PSBzSGk7
CiAgICAgICAga0hpIDo9IDIqa0hpOwogICAgICAgIHNIaSA6PSBzaWdtYSh1cGIoYSwgYiwga0hp
KSk7CiAgICAgICAgaWYgbm90IElzUmF0KHNIaSkgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAg
ICBvZDsKICAgICAgaWYgc0hpID0gMCB0aGVuCiAgICAgICAga0xvIDo9IGtIaTsKICAgICAgICBz
TG8gOj0gc0hpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUga0hpIC0ga0xvID4gMSBkbwogICAg
ICAgICAga01pIDo9IFF1b0ludChrSGkgKyBrTG8sIDIpOwogICAgICAgICAgc01pIDo9IHNpZ21h
KHVwYihhLCBiLCBrTWkpKTsKICAgICAgICAgIGlmIG5vdCBJc1JhdChzTWkpIHRoZW4gcmV0dXJu
IGZhbHNlOyBmaTsKICAgICAgICAgIGlmIHNNaSA9IDAgdGhlbgogICAgICAgICAgICBrTG8gOj0g
a01pOwogICAgICAgICAgICBzTG8gOj0gc01pOwogICAgICAgICAgICBrSGkgOj0ga01pOwogICAg
ICAgICAgICBzSGkgOj0gc01pOwogICAgICAgICAgZWxpZiBzTWkgPCAwIHRoZW4KICAgICAgICAg
ICAga0xvIDo9IGtNaTsKICAgICAgICAgICAgc0xvIDo9IHNNaTsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAga0hpIDo9IGtNaTsKICAgICAgICAgICAgc0hpIDo9IHNNaTsKICAgICAgICAgIGZp
OwogICAgICAgIG9kOwogICAgICBmaTsKICAgICAgeCA6PSB1cGIoYSwgYiwga0xvKTsKICAgICAg
cyA6PSBzTG87CgogICAgZmk7CiAgICBpZiBzID0gMCB0aGVuCiAgICAgIGEgICAgICAgICA6PSB4
OwogICAgICBiICAgICAgICAgOj0geDsKICAgICAgcGF0aFtpXSAgIDo9IHg7CiAgICAgIHBhdGhb
aSsxXSA6PSB4OwogICAgICBpICAgICAgICAgOj0gaSArIDE7CiAgICBlbGlmIHMgPiAwIHRoZW4K
ICAgICAgYSA6PSB4OwogICAgICBpZiBpIG1vZCAyID0gMCB0aGVuCiAgICAgICAgaSA6PSBpICsg
MTsKICAgICAgZmk7CiAgICAgIHBhdGhbaV0gOj0geDsKICAgIGVsc2UKICAgICAgYiA6PSB4Owog
ICAgICBpZiBpIG1vZCAyIDw+IDAgdGhlbgogICAgICAgIGkgOj0gaSArIDE7CiAgICAgIGZpOwog
ICAgICBwYXRoW2ldIDo9IHg7CiAgICBmaTsKICBvZDsKICByZXR1cm4gdHJ1ZTsKZW5kOwoKCiNG
IEFwcHJveGltYXRpb25CaW5hcnkoICAgICAgPHNpZ21hPiwgPGFic0Vycm9yPiBbLCA8cGF0aD5d
ICkKI0YgQXBwcm94aW1hdGlvblN0ZXJuQnJvY290KCA8c2lnbWE+LCA8YWJzRXJyb3I+IFssIDxw
YXRoPl0gKQojRiAgIHJldHVybnMgYSBwYWlyIFthLCBiXSBzdWNoIHRoYXQgCiNGICAgICBhIDw9
IGMgPD0gYiAgIGFuZCAgIGIgLSBhIDwgYWJzRXJyb3IKI0YgICBmb3IgYSByYXRpb25hbCBlcnJv
ciBib3VuZCBhYnNFcnJvciA+IDAgYW5kIGEgcmVhbCBudW1iZXIgYwojRiAgIHdoaWNoIGlzIGRl
ZmluZWQgYnkgdGhlIGZ1bmN0aW9uIHNpZ21hOiBSYXRpb25hbHMgLT4gUmF0aW9uYWxzLiAKI0Yg
ICBUaGUgZnVuY3Rpb24gc2lnbWEgc2F0aXNmaWVzIAojRiAgICAgc2lnbiBzaWdtYSh4KSA9IHNp
Z24gKGMgLSB4KSBmb3IgYWxsIHJhdGlvbmFsIHguCiNGICAgSWYgc2lnbWEgZG9lcyBub3QgcmV0
dXJuIGEgUmF0aW9uYWwgdGhlbiB0aGUgZnVuY3Rpb24gaXMKI0YgICBhYm9ydGVkIGltbWVkaWF0
ZWx5IHJldHVybmluZyBmYWxzZS4gKFRoaXMgZmVhdHVyZSBhbGxvd3MgYSAKI0YgICBwYXJ0aWFs
bHkgZGVmaW5lZCBzaWdtYSB0byBiZSB1c2VkIHdpdGhvdXQgbWVzc2luZyB1cCBwYXRoLikKI0Yg
ICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgcGF0aCBpcyBhIGxpc3Qgd2hpY2ggaXMgbW9kaWZpZWQg
aW4gb3JkZXIKI0YgICB0byBjb250YWluIHRoZSBhcHByb3hpbWF0aW9ucyBjb21wdXRlZCBzbyBm
YXIuIChJbiBmYWN0LCBpdCBpcwojRiAgIHNvbWUga2luZCBvZiBydW4gbGVuZ3RoIGVuY29kaW5n
IGZvciB0aGUgcGF0aCBvZiBpbnRlcnZhbHMgCiNGICAgZW5jbG9zaW5nIHRoZSBudW1iZXIgYy4p
CiNGICAgICAgVGhlIHR3byB2YXJpYW50cyBvZiB0aGUgYXBwcm94aW1hdGlvbiBmdW5jdGlvbiBk
aWZmZXIgaW4gdGhlIAojRiAgIHdheSB0aGV5IGVudW1lcmF0ZSB0aGUgcmF0aW9uYWwgbnVtYmVy
cy4gQm90aCBzdGFydCBhdCAoay4uaysxKSBmb3IKI0YgICBpbnRlZ2VyIGsgYW5kIHNwbGl0IGFu
IGludGVydmFsIChhLi5iKSBpbnRvIChhLi5jKSwge2N9LCAoYy4uYikuCiNGICAgVGhlIGNob2lj
ZSBvZiB0aGUgaW5uZXIgcG9pbnQgaXMKI0YgICAgIEJpbmFyeSAgICAgICAgYyA9IChhICsgYikv
MiwgYW5kCiNGICAgICBTdGVybi1Ccm9jb3QgIGMgPSAoTihhKSArIE4oYikpLyhEKGEpICsgRChi
KSkgCiNGICAgd2hlcmUgTjogbnVtZXJhdG9yLCBEOiBkZW5vbWluYXRvci4gVGhlIG1ldGhvZHMg
cmV0dXJuIGJlc3QgYmluYXJ5CiNGICAgZnJhY3Rpb25zIChCaW5hcnkpIGFuZCBiZXN0IHJhdGlv
bmFsIGFwcHJveGltYXRpb25zIChTdGVybi1Ccm9jb3QpCiNGICAgcmVzcGVjdGl2ZWx5LgojRgoK
QXBwcm94aW1hdGlvbkJpbmFyeSA6PSBmdW5jdGlvbiAoIGFyZyApCiAgbG9jYWwgCiAgICBzaWdt
YSwgYWJzRXJyb3IsIHBhdGgsICAgIyBjb21wbGV0ZWQgYXJndW1lbnQgbGlzdAogICAgYSwgYiwg
eCwgYTAsIGIwLCBhbSwgYm0sICMgcG9pbnRzCiAgICBtLCBrLCAgICAgICAgICAgICAgICAgICAg
IyBpbnRlZ2VycyBkZW5vdGluZyBpbnRlcm1lZGlhdGUgcG9pbnRzCiAgICBsbywgbWksIGhpLCAg
ICAgICAgICAgICAgIyBpbmRpY2VzIHRvIGZpbmQgaSBpbiBwYXRoCiAgICBzLCBpLCBLOyAgICAg
ICAgICAgICAgICAgIyBzaWdtYSB2YWx1ZSwgaW5kZXggaW50byBwYXRoLCBpbnRlcm1lZGlhdGUK
CiAgIyBkZWNvZGUgYW5kIHR5cGUgY2hlY2sgYXJndW1lbnQgbGlzdCAKICBpZiBMZW5ndGgoYXJn
KSA9IDIgdGhlbgogICAgc2lnbWEgICAgOj0gYXJnWzFdOwogICAgYWJzRXJyb3IgOj0gYXJnWzJd
OwogICAgcGF0aCAgICAgOj0gWyBdOwogIGVsaWYgTGVuZ3RoKGFyZykgPSAzIHRoZW4KICAgIHNp
Z21hICAgIDo9IGFyZ1sxXTsKICAgIGFic0Vycm9yIDo9IGFyZ1syXTsKICAgIHBhdGggICAgIDo9
IGFyZ1szXTsKICBlbHNlCiAgICBFcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgMiBv
ciAzIGV4cGVjdGVkIik7CiAgZmk7CiAgaWYgbm90ICggCiAgICBJc0Z1bmN0aW9uKHNpZ21hKSBh
bmQgCiAgICBJc1JhdChhYnNFcnJvcikgYW5kIGFic0Vycm9yID4gMCBhbmQKICAgIElzTGlzdChw
YXRoKQogICkgdGhlbgogICAgRXJyb3IoIndyb25nIGFyZ3VtZW50cyA8c2lnbWE+LCA8YWJzRXJy
b3I+LCA8cGF0aD4iKTsKICBmaTsKCiAgIyBwYXRoWzFdIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlv
biBzdG9yZWQgZm9yIEFwcHJveGltYXRpb25CaW5hcnk7CiAgIyByZW5hbWUgcGF0aFsxXSBpbnRv
IHBhdGgKCiAgaWYgbm90IElzQm91bmQocGF0aFsxXSkgdGhlbgogICAgcGF0aFsxXSA6PSBbIF07
CiAgZmk7CiAgcGF0aCA6PSBwYXRoWzFdOwoKICAjIGZpbGwgcGF0aCBzdWZmaWNpZW50bHkKICBp
ZiAKICAgIEFwcHJveGltYXRpb25JbnRlcm5hbCgKICAgICAgc2lnbWEsIGFic0Vycm9yLCBwYXRo
LCAKICAgICAgZnVuY3Rpb24gKGEsIGIsIGspCglyZXR1cm4gKGEgKyAoMl5rIC0gMSkqYikvMl5r
OwogICAgICBlbmQsCiAgICAgIGZ1bmN0aW9uIChhLCBiLCBrKQoJcmV0dXJuICgoMl5rIC0gMSkq
YSArIGIpLzJeazsKICAgICAgZW5kCiAgICApID0gZmFsc2UKICB0aGVuCiAgICByZXR1cm4gZmFs
c2U7CiAgZmk7CgogICMgR2V0IHRoZSBlYXNpZXN0IGFwcHJveGltYXRpb24gYmV0dGVyIHRoYW4g
YWJzRXJyb3IgZnJvbSBwYXRoLgogICMgV2UgZmlyc3QgZmluZCB0aGUgbGVhc3QgaSB3aGVyZSB8
cGF0aFtpKzFdLXBhdGhbaV18IDwgYWJzRXJyb3IuCiAgIyBUaGVuIHdlIGV4cGFuZCB0aGUgaW50
ZXJ2YWwgd2hpbGUgaXQgaXMgbm90IHRvbyBsYXJnZS4KCiAgbG8gOj0gMTsKICBoaSA6PSBMZW5n
dGgocGF0aCktMTsKICB3aGlsZSBoaSAtIGxvID4gMSBkbwogICAgbWkgOj0gUXVvSW50KGhpICsg
bG8sIDIpOwogICAgaWYgQWJzSW50KHBhdGhbbWkrMV0gLSBwYXRoW21pXSkgPCBhYnNFcnJvciB0
aGVuCiAgICAgIGhpIDo9IG1pOwogICAgZWxzZQogICAgICBsbyA6PSBtaTsKICAgIGZpOwogIG9k
OwogIGkgOj0gaGk7CiAgaWYgaSA9IDEgdGhlbgoKICAgICMganVzdCB0YWtlIHRoZSBmaXJzdCBp
bnRlcnZhbAogICAgYSA6PSBwYXRoW2ldOwogICAgYiA6PSBwYXRoW2krMV07CgogIGVsaWYgaSBt
b2QgMiA9IDAgdGhlbgoKICAgICMgZGVjcmVhc2UgbG93ZXIgYm91bmQgb2YgKHBhdGhbaSsxXS4u
cGF0aFtpXSkKICAgICMgQ29uc2lkZXIgYV8wIDwgYV8xIDwgLi4gPCBhX20gPCBiIGZvciBzb21l
IG0gPiAwCiAgICAjIHdoZXJlIGFfayA6PSAyXi1rIGFfMCArICgxIC0gMl4taykgYi4KICAgICMg
VGhpcyBpbXBsaWVzCiAgICAjICAgbSAgICAgICA9IExvZygoYV8wIC0gYikvKGFfbSAtIGIpLCAy
KSBhbmQKICAgICMgICBiIC0gYV9rID0gKGIgLSBhXzApKjJeLWsgPCBhYnNFcnJvciA8PT0+IDJe
ayA+IChiIC0gYV8wKS9hYnNFcnJvci4KCiAgICBhMCA6PSBwYXRoW2ktMV07CiAgICBhbSA6PSBw
YXRoW2krMV07CiAgICBiICA6PSBwYXRoW2ldOwoKICAgIGlmIGFtID0gYiB0aGVuCiAgICAgIGEg
Oj0gYW07ICMgYSA9IGIKICAgIGVsc2UKICAgICAgbSAgOj0gTG9nSW50KChhMCAtIGIpLyhhbSAt
IGIpLCAyKTsKICAgICAgSyAgOj0gKGIgLSBhMCkvYWJzRXJyb3I7CiAgICAgIGlmIEsgPD0gMSB0
aGVuCglrIDo9IDA7CiAgICAgIGVsc2UKCWsgOj0gTG9nSW50KFF1b0ludChOdW1lcmF0b3JSYXQo
SyksIERlbm9taW5hdG9yUmF0KEspKSwgMik7Cgl3aGlsZSBub3QgMl5rID4gSyBkbwoJICBrIDo9
IGsgKyAxOwoJb2Q7CiAgICAgIGZpOwogICAgICBrIDo9IE1pbmltdW0oaywgbSk7CiAgICAgIGEg
Oj0gKGEwICsgKDJeayAtIDEpKmIpLzJeazsKICAgIGZpOwogCiAgZWxzZQoKICAgICMgaW5jcmVh
c2UgdXBwZXIgYm91bmQgb2YgKHBhdGhbaV0uLnBhdGhbaSsxXSkKICAgICMgQ29uc2lkZXIgYSA8
IGJfbSA8IC4uIDwgYl8xIDwgYl8wIGZvciBzb21lIG0gPiAwCiAgICAjIHdoZXJlIGJfayA6PSAo
MSAtIDJeLWspIGEgKyAyXi1rIGJfMC4KICAgICMgVGhpcyBpbXBsaWVzCiAgICAjICAgbSAgICAg
ICA9IExvZygoYSAtIGJfMCkvKGEgLSBiX20pLCAyKSBhbmQKICAgICMgICBiX2sgLSBhID0gKGEg
LSBiXzApKjJeLWsgPCBhYnNFcnJvciA8PT0+IDJeayA+IChhIC0gYl8wKS9hYnNFcnJvci4KCiAg
ICBhICA6PSBwYXRoW2ldOwogICAgYm0gOj0gcGF0aFtpKzFdOwogICAgYjAgOj0gcGF0aFtpLTFd
OwoKICAgIGlmIGEgPSBibSB0aGVuCiAgICAgIGIgOj0gYm07ICMgYSA9IGIKICAgIGVsc2UKICAg
ICAgbSAgOj0gTG9nSW50KChhIC0gYjApLyhhIC0gYm0pLCAyKTsKICAgICAgSyAgOj0gKGEgLSBi
MCkvYWJzRXJyb3I7CiAgICAgIGlmIEsgPD0gMSB0aGVuCglrIDo9IDA7CiAgICAgIGVsc2UKCWsg
Oj0gTG9nSW50KFF1b0ludChOdW1lcmF0b3JSYXQoSyksIERlbm9taW5hdG9yUmF0KEspKSwgMik7
Cgl3aGlsZSBub3QgMl5rID4gSyBkbwoJICBrIDo9IGsgKyAxOwoJb2Q7CiAgICAgIGZpOwogICAg
ICBrIDo9IE1pbmltdW0oaywgbSk7CiAgICAgIGIgOj0gKCgyXmsgLSAxKSphICsgYjApLzJeazsK
ICAgIGZpOwoKICBmaTsKICByZXR1cm4gW2EsIGJdOwplbmQ7CgoKQXBwcm94aW1hdGlvblN0ZXJu
QnJvY290IDo9IGZ1bmN0aW9uICggYXJnICkKICBsb2NhbCAKICAgIHNpZ21hLCBhYnNFcnJvciwg
cGF0aCwgICAjIGNvbXBsZXRlZCBhcmd1bWVudCBsaXN0CiAgICBhLCBiLCB4LCBhMCwgYjAsIGFt
LCBibSwgIyBwb2ludHMKICAgIG0sIGssICAgICAgICAgICAgICAgICAgICAjIGludGVnZXJzIGRl
bm90aW5nIGludGVybWVkaWF0ZSBwb2ludHMKICAgIGxvLCBtaSwgaGksICAgICAgICAgICAgICAj
IGluZGljZXMgdG8gZmluZCBpIGluIHBhdGgKICAgIHMsIGksICAgICAgICAgICAgICAgICAgICAj
IHNpZ21hIHZhbHVlLCBpbmRleCBpbnRvIHBhdGgsIGludGVybWVkaWF0ZQogICAgTiwgRDsgICAg
ICAgICAgICAgICAgICAgICMgTnVtZXJhdG9yLCBEZW5vbWluYXRvciBmb3IgYWJicmV2aWF0aW9u
CgogICMgZGVjb2RlIGFuZCB0eXBlIGNoZWNrIGFyZ3VtZW50IGxpc3QgCiAgaWYgTGVuZ3RoKGFy
ZykgPSAyIHRoZW4KICAgIHNpZ21hICAgIDo9IGFyZ1sxXTsKICAgIGFic0Vycm9yIDo9IGFyZ1sy
XTsKICAgIHBhdGggICAgIDo9IFsgXTsKICBlbGlmIExlbmd0aChhcmcpID0gMyB0aGVuCiAgICBz
aWdtYSAgICA6PSBhcmdbMV07CiAgICBhYnNFcnJvciA6PSBhcmdbMl07CiAgICBwYXRoICAgICA6
PSBhcmdbM107CiAgZWxzZQogICAgRXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIDIg
b3IgMyBleHBlY3RlZCIpOwogIGZpOwogIGlmIG5vdCAoIAogICAgSXNGdW5jdGlvbihzaWdtYSkg
YW5kIAogICAgSXNSYXQoYWJzRXJyb3IpIGFuZCBhYnNFcnJvciA+IDAgYW5kCiAgICBJc0xpc3Qo
cGF0aCkKICApIHRoZW4KICAgIEVycm9yKCJ3cm9uZyBhcmd1bWVudHMgPHNpZ21hPiwgPGFic0Vy
cm9yPiwgPHBhdGg+Iik7CiAgZmk7CgogICMgcGF0aFsyXSBjb250YWlucyB0aGUgaW5mb3JtYXRp
b24gc3RvcmVkIGZvciBBcHByb3hpbWF0aW9uU3Rlcm5Ccm9jb3Q7CiAgIyByZW5hbWUgcGF0aFsy
XSBpbnRvIHBhdGgKCiAgaWYgbm90IElzQm91bmQocGF0aFsyXSkgdGhlbgogICAgcGF0aFsyXSA6
PSBbIF07CiAgZmk7CiAgcGF0aCA6PSBwYXRoWzJdOwoKICAjIGZpbGwgcGF0aCBzdWZmaWNpZW50
bHkKICBpZgogICAgQXBwcm94aW1hdGlvbkludGVybmFsKAogICAgICBzaWdtYSwgYWJzRXJyb3Is
IHBhdGgsIAogICAgICBmdW5jdGlvbiAoYSwgYiwgaykKCXJldHVybiAKCSAgKCAgIE51bWVyYXRv
clJhdChhKSArIGsqICBOdW1lcmF0b3JSYXQoYikgKS8KCSAgKCBEZW5vbWluYXRvclJhdChhKSAr
IGsqRGVub21pbmF0b3JSYXQoYikgKTsKICAgICAgZW5kLAogICAgICBmdW5jdGlvbiAoYSwgYiwg
aykKCXJldHVybiAKCSAgKCBrKiAgIE51bWVyYXRvclJhdChhKSArICAgTnVtZXJhdG9yUmF0KGIp
ICkvCgkgICggaypEZW5vbWluYXRvclJhdChhKSArIERlbm9taW5hdG9yUmF0KGIpICk7CiAgICAg
IGVuZAogICAgKSA9IGZhbHNlCiAgdGhlbgogICAgcmV0dXJuIGZhbHNlOwogIGZpOwoKICAjIEdl
dCB0aGUgZWFzaWVzdCBhcHByb3hpbWF0aW9uIGJldHRlciB0aGFuIGFic0Vycm9yIGZyb20gcGF0
aC4KICAjIFdlIGZpcnN0IGZpbmQgdGhlIGxlYXN0IGkgd2hlcmUgfHBhdGhbaSsxXS1wYXRoW2ld
fCA8IGFic0Vycm9yLgogICMgVGhlbiB3ZSBleHBhbmQgdGhlIGludGVydmFsIHdoaWxlIGl0IGlz
IG5vdCB0b28gbGFyZ2UuCgogIE4gOj0gTnVtZXJhdG9yUmF0OwogIEQgOj0gRGVub21pbmF0b3JS
YXQ7CgogIGxvIDo9IDE7CiAgaGkgOj0gTGVuZ3RoKHBhdGgpLTE7CiAgd2hpbGUgaGkgLSBsbyA+
IDEgZG8KICAgIG1pIDo9IFF1b0ludChoaSArIGxvLCAyKTsKICAgIGlmIEFic0ludChwYXRoW21p
KzFdIC0gcGF0aFttaV0pIDwgYWJzRXJyb3IgdGhlbgogICAgICBoaSA6PSBtaTsKICAgIGVsc2UK
ICAgICAgbG8gOj0gbWk7CiAgICBmaTsKICBvZDsKICBpIDo9IGhpOwogIGlmIGkgPSAxIHRoZW4K
CiAgICAjIGp1c3QgdGFrZSB0aGUgZmlyc3QgaW50ZXJ2YWwKICAgIGEgOj0gcGF0aFtpXTsKICAg
IGIgOj0gcGF0aFtpKzFdOwoKICBlbGlmIGkgbW9kIDIgPSAwIHRoZW4KCiAgICAjIGRlY3JlYXNl
IGxvd2VyIGJvdW5kIG9mIChwYXRoW2krMV0uLnBhdGhbaV0pCiAgICAjIENvbnNpZGVyIGFfMCA8
IGFfMSA8IC4uIDwgYV9tIDwgYiBmb3Igc29tZSBtID4gMAogICAgIyB3aGVyZSBhX2sgOj0gKE4o
YV8wKSArIGsgTihiKSkvKEQoYV8wKSArIGsgRChiKSkuCiAgICAjIFRoaXMgaW1wbGllcwogICAg
IyAgIG0gPSBEKGFfMCkvRChiKSAqIChhX20gLSBhMCkvKGIgLSBhX20pCiAgICAjIGFuZAogICAg
IyAgIGIgLSBhX2sgPSAoYiAtIGEwKS8oMSArIGsgRChiKS9EKGFfMCkpIDwgYWJzRXJyb3IKICAg
ICMgICA8PT0+IGsgPiBEKGFfMCkvRChiKSAqICgoYiAtIGEwKS9hYnNFcnJvciAtIDEpLgogCiAg
ICBhMCA6PSBwYXRoW2ktMV07CiAgICBhbSA6PSBwYXRoW2krMV07CiAgICBiICA6PSBwYXRoW2ld
OwogICAgaWYgYW0gPSBiIHRoZW4KICAgICAgcmV0dXJuIFthbSwgYl07ICMgYSA9IGIKICAgIGVs
c2UKICAgICAgbSAgOj0gRChhMCkvRChiKSAqIChhbSAtIGEwKS8oYiAtIGFtKTsKICAgICAgayAg
Oj0gQ2VpbGluZ1JhdChEKGEwKS9EKGIpICogKChiIC0gYTApL2Fic0Vycm9yIC0gMSkpOwogICAg
ICBrICA6PSBNaW5pbXVtKE1heGltdW0oMCwgayksIG0pOwogICAgICBhICA6PSAoTihhMCkgKyBr
Kk4oYikpLyhEKGEwKSArIGsqRChiKSk7CiAgICBmaTsKIAogIGVsc2UKCiAgICAjIGluY3JlYXNl
IHVwcGVyIGJvdW5kIG9mIChwYXRoW2ldLi5wYXRoW2krMV0pCiAgICAjIENvbnNpZGVyIGEgPCBi
X20gPCAuLiA8IGJfMSA8IGJfMCBmb3Igc29tZSBtID4gMAogICAgIyB3aGVyZSBiX2sgOj0gKGsg
TihhKSArIE4oYl8wKSkvKGsgRChhKSArIEQoYl8wKSkuCiAgICAjIFRoaXMgaW1wbGllcwogICAg
IyAgIG0gPSBEKGJfMCkvRChhKSAqIChiXzAgLSBiX20pLyhiX20gLSBhKQogICAgIyBhbmQKICAg
ICMgICBiX2sgLSBhID0gKGIwIC0gYSkvKDEgKyBrIEQoYSkvRChiXzApKSA8IGFic0Vycm9yCiAg
ICAjICAgPD09PiBrID4gRChiXzApL0QoYSkgKiAoKGJfMCAtIGEpL2Fic0Vycm9yIC0gMSkuCiAK
ICAgIGEgIDo9IHBhdGhbaV07CiAgICBibSA6PSBwYXRoW2krMV07CiAgICBiMCA6PSBwYXRoW2kt
MV07CiAgICBpZiBhID0gYm0gdGhlbgogICAgICByZXR1cm4gW2EsIGJtXTsgIyBhID0gYgogICAg
ZWxzZQogICAgICBtICA6PSBEKGIwKS9EKGEpICogKGIwIC0gYm0pLyhibSAtIGEpOwogICAgICBr
ICA6PSBDZWlsaW5nUmF0KEQoYjApL0QoYSkgKiAoKGIwIC0gYSkvYWJzRXJyb3IgLSAxKSk7CiAg
ICAgIGsgIDo9IE1pbmltdW0oTWF4aW11bSgwLCBrKSwgbSk7CiAgICAgIGIgIDo9IChrKk4oYSkg
KyBOKGIwKSkvKGsqRChhKSArIEQoYjApKTsKICAgIGZpOwoKICBmaTsKICByZXR1cm4gW2EsIGJd
OwplbmQ7CgoKIyBBcHByb3hpbWF0aW9uIG9mIGN5Y2xvdG9taWNzCiMgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PQoKIyBBcHByb3hDb3NQaSggPHg+LCA8YWJzRXJyb3I+ICkKIyAgIHJldHVy
bnMgYSBwYWlyIFthLCBiXSBvZiByYXRpb25hbHMgc3VjaCB0aGF0CiMgICAgIGEgPD0gY29zKHBp
IHgpIDw9IGIgYW5kIGIgLSBhIDwgYWJzRXJyb3IKIyAgIGZvciByYXRpb25hbHMgeCBhbmQgYWJz
RXJyb3IgPiAwLiBUaGUgYXBwcm94aW1hdGlvbgojICAgaXMgcGVyZm9ybWVkIGJ5IEFwcHJveGlt
YXRpb25TdGVybkJyb2NvdCgpLgojCgppZiBub3QgSXNCb3VuZChBcHByb3hDb3NQaVRhYmxlKSB0
aGVuCiAgQXBwcm94Q29zUGlUYWJsZSA6PSBbIF07CmZpOwoKQXBwcm94Q29zUGkgOj0gZnVuY3Rp
b24gKCB4LCBhYnNFcnJvciApCiAgbG9jYWwgCiAgICBrLCBuLCAgICAgICAgICAgICAgIyBjb3Mo
cGkgeCkgPSBjb3MoMiBwaSBrL24pCiAgICBmLCBhYiwgc2lnbiwgcGF0aCwgIyBhcHByb3hpbWF0
aW9uIGRhdGEKICAgIGlrLCAgICAgICAgICAgICAgICAjIFBvc2l0aW9uKFByaW1lUmVzaWR1ZXMo
biksIGspCiAgICBTZiwgICAgICAgICAgICAgICAgIyBTdHVybSBzZXF1ZW5jZSBmb3IgZgogICAg
UmYsICAgICAgICAgICAgICAgICMgaXNvbGF0aW9uIGludGVydmFscyBbYSwgYl0gb2YgcmVhbCBy
b290cyBvZiBmCiAgICBhYnMsICAgICAgICAgICAgICAgIyBSZiBjb3BpZWQgYW5kIGFycmFuZ2Vk
IGFzIGZvciBQcmltZVJlc2lkdWVzCiAgICBzaWducywgICAgICAgICAgICAgIyB2YWx1ZSBvZiBm
IGF0IGEgZm9yIHRoZSBbYSwgYl0gaW4gYWJzCiAgICBwYXRoczsgICAgICAgICAgICAgIyB0aGUg
bGlzdHMgd2hpY2ggd2lsbCBjb250YWluIGFwcHJveGltYXRpb25zCgogICMgY2hlY2sgYXJndW1l
bnRzCiAgaWYgbm90ICggSXNSYXQoeCkgYW5kIElzUmF0KGFic0Vycm9yKSBhbmQgYWJzRXJyb3Ig
PiAwICkgdGhlbgogICAgRXJyb3IoIjx4PiBtdXN0IGJlIGEgcmF0aW9uYWwsIDxhYnNFcnJvcj4g
cG9zaXRpdmUgcmF0aW9uYWwiKTsKICBmaTsKCiAgIyBjb3MocGkgeCkgPSBjb3MoMiBwaSBrL24p
IHdoZXJlIDAgPD0gayA8IG4gYXJlIHJlbGF0aXZlbHkgcHJpbWUKICBrIDo9IE51bWVyYXRvclJh
dCh4LzIpIG1vZCBEZW5vbWluYXRvclJhdCh4LzIpOyAjIDAgPD0gayA8IG4KICBuIDo9IERlbm9t
aW5hdG9yUmF0KHgvMik7CiAKICAjIHByb3ZpZGUgQXBwcm94Q29zUGlUYWJsZVtuXSA9IFsgRiwg
YWJzLCBzaWducywgcGF0aHMgXSB3aGVyZSAKICAjICAgRiAgICAgICAgaXMgdGhlIGNvZWZmaWNp
ZW50IGxpc3Qgb2YgdGhlIG1pbmltYWwgcG9seW5vbWlhbCAKICAjICAgICAgICAgICAgb2YgdGhl
IGNvcygyIHBpIGsvbikKICAjICAgYWJzW2ldICAgPSBbYV9pLCBiX2ldIHN1Y2ggdGhhdCBhX2kg
PD0gY29zKDIgcGkgUl9pL24pIDw9IGJfaQogICMgICAgICAgICAgICBmb3IgdGhlIFIgPSBQcmlt
ZVJlc2lkdWVzKG4pCiAgIyAgIHNpZ25zW2ldID0gU2lnbkludChWYWx1ZShGLCBhX2kpKQogICMg
ICBwYXRoW2ldICBpcyBhIGxpc3QgcmVjb3JkaW5nIHRoZSBhcHByb3hpbWF0aW9uIGZvciBjb3Mo
MiBwaSBSX2kvbikKICBpZiBub3QgSXNCb3VuZChBcHByb3hDb3NQaVRhYmxlW25dKSB0aGVuCgog
ICAgSW5mb0FwcHJveDEoIiNJIGNvbXB1dGluZyBBcHByb3hDb3NQaVRhYmxlWyIsIG4sICJdXG4i
KTsKICAgIGlmIG4gPSAxIHRoZW4KICAgICAgQXBwcm94Q29zUGlUYWJsZVtuXSA6PSBbIFstMSwg
MV0sIFsgWyAxLCAxXSBdLCBbIDAgXSwgWyBbXSBdIF07CiAgICBlbGlmIG4gPSAyIHRoZW4KICAg
ICAgQXBwcm94Q29zUGlUYWJsZVtuXSA6PSBbIFsgMSwgMV0sIFsgWy0xLC0xXSBdLCBbIDAgXSwg
WyBbXSBdIF07CiAgICBlbHNlCiAgICAgIGYgICAgIDo9IE1pbnBvbFJlQ3ljKG4pOwogICAgICBT
ZiAgICA6PSBTdHVybVNlcXVlbmNlKGYpOwogICAgICBmICAgICA6PSBTZlsxXTsgIyAobm8gZGVu
b21pbmF0b3JzKQogICAgICBSZiAgICA6PSBSZWFsUm9vdElzb2xhdGlvblN0ZXJuQnJvY290KFNm
LCAtMSwgMSk7CiAgICAgIGFicyAgIDo9IENvbmNhdGVuYXRpb24oUmV2ZXJzZWQoUmYpLCBSZik7
CiAgICAgIHNpZ25zIDo9IExpc3QoYWJzLCBhYiAtPiBTaWduSW50KFZhbHVlKFNmWzFdLCBhYlsx
XSkpKTsKICAgICAgcGF0aHMgOj0gTGlzdChbMS4uTGVuZ3RoKFJmKV0sIGkgLT4gWyBdKTsKICAg
ICAgcGF0aHMgOj0gQ29uY2F0ZW5hdGlvbihSZXZlcnNlZChwYXRocyksIHBhdGhzKTsKICAgICAg
aWYgTGVuZ3RoKGFicykgPD4gUGhpKG4pIHRoZW4KICAgICAgICBFcnJvcigiaW50ZXJuYWw6IHxh
YnN8IDw+IFBoaShuKSIpOwogICAgICBmaTsKICAgICAgQXBwcm94Q29zUGlUYWJsZVtuXSA6PSAK
ICAgICAgICBbIGNvZWZzKGYpLAogICAgICAgICAgYWJzLAogICAgICAgICAgc2lnbnMsCiAgICAg
ICAgICBwYXRocwogICAgICAgIF07CiAgICBmaTsgICAgCiAgZmk7CgogICMgZ2V0IGFwcHJveGlt
YXRpb24gZGF0YSBmcm9tIEFwcHJveENvc1BpVGFibGVbbl0KICBpayAgIDo9IFBvc2l0aW9uKFBy
aW1lUmVzaWR1ZXMobiksIGspOwogIGYgICAgOj0gUG9seW5vbWlhbFJhdGlvbmFscyhBcHByb3hD
b3NQaVRhYmxlW25dWzFdKTsKICBhYiAgIDo9IEFwcHJveENvc1BpVGFibGVbbl1bMl1baWtdOwog
IHNpZ24gOj0gQXBwcm94Q29zUGlUYWJsZVtuXVszXVtpa107CiAgcGF0aCA6PSBBcHByb3hDb3NQ
aVRhYmxlW25dWzRdW2lrXTsKCiAgIyBjb21wdXRlIHRoZSBhcHByb3hpbWF0aW9uCiAgcmV0dXJu
CiAgICBBcHByb3hpbWF0aW9uU3Rlcm5Ccm9jb3QoCiAgICAgIGZ1bmN0aW9uICggeCApCiAgICAg
ICAgaWYgICB4IDwgYWJbMV0gdGhlbiByZXR1cm4gIDE7CiAgICAgICAgZWxpZiB4ID4gYWJbMl0g
dGhlbiByZXR1cm4gLTE7CiAgICAgICAgZWxpZiBzaWduID49IDAgdGhlbiByZXR1cm4gIFZhbHVl
KGYsIHgpOyAKICAgICAgICBlbHNlICAgICAgICAgICAgICAgIHJldHVybiAtVmFsdWUoZiwgeCk7
CiAgICAgICAgZmk7CiAgICAgIGVuZCwKICAgICAgYWJzRXJyb3IsCiAgICAgIHBhdGgKICAgICk7
CmVuZDsKCgojRiBBcHByb3hSZUN5Y1NpbXBsZSggICAgIDx6PiwgPGFic0Vycm9yPikKI0YgQXBw
cm94UmVDeWNCaW5hcnkoICAgICA8ej4sIDxhYnNFcnJvcj4pCiNGIEFwcHJveFJlQ3ljU3Rlcm5C
cm9jb3QoPHo+LCA8YWJzRXJyb3I+KQojRiAgIHJldHVybiBhIHBhaXIgW2EsIGJdIG9mIHJhdGlv
bmFscyBzdWNoIHRoYXQgCiNGICAgICBhIDw9IFJlKHopIDw9IGIgYW5kIGIgLSBhIDwgYWJzRXJy
b3IKI0YgICBmb3IgYSBjeWNsb3RvbWljIGVsZW1lbnQgeiBhbmQgYSBwb3NpdGl2ZSByYXRpb25h
bAojRiAgIGVycm9yIGJvdW5kIGFic0Vycm9yLiBUaGUgdGhyZWUgZnVuY3Rpb25zIGRpZmZlciBp
biAKI0YgICB0aGUgd2F5IHRoZXkgYXBwcm94aW1hdGUuCiNGICAgICBTaW1wbGUgICAgICA6IGJp
bmFyeSBmcmFjdGlvbnMsIG5vdCBuZWNlc3Nhcmx5IGdvb2Qgb25lcwojRiAgICAgQmluYXJ5ICAg
ICAgOiBiZXN0IGJpbmFyeSBmcmFjdGlvbnMgKG4vMl5rLCBrID0gbWluLikKI0YgICAgIFN0ZXJu
QnJvY290IDogYmVzdCByYXRpb25hbCBhcHByb3hpbWF0aW9uIChuL2QsIGQgPSBtaW4uKQojRgoK
QXBwcm94UmVDeWNTaW1wbGUgOj0gZnVuY3Rpb24gKCB6LCBhYnNFcnJvciApCiAgbG9jYWwKICAg
IHgsICAgICAgICAgICAgICMgdGhlIHJlYWwgcGFydCBvZiB6CiAgICBuLCAgICAgICAgICAgICAj
IGN5Y2xvdG9taWMgb3JkZXIgb2YgQ0YgY29udGFpbmluZyB4CiAgICBjLCAgICAgICAgICAgICAj
IGNvZWZmaWNpZW50IGxpc3Qgb2YgeAogICAgTiwgICAgICAgICAgICAgIyBudW1iZXIgb2Ygbm9u
LXplcm8gY29lZmZpY2llbnRzIGluIGMKICAgIHIsIFIsICAgICAgICAgICMgYmluYXJ5IHByZWNp
c2lvbiwgMl5yID4gUgogICAgYWIwLCBhYjEsIEFCMiwgIyBpbnRlcm1lZGlhdGUgYm91bmRzCiAg
ICBhYiwgICAgICAgICAgICAjIHRoZSByZXN1bHQKICAgIGssICAgICAgICAgICAgICMgYSBwcmlt
ZSByZXNpZHVlIGZvciBuCiAgICBlcnIsIGVycjE7ICAgICAjIGludGVybWVkaWF0ZSBlcnJvciBi
b3VuZHMKCiAgIyBjaGVjayBhcmd1bWVudHMKICBpZiBub3QgKCBJc0N5Yyh6KSBhbmQgSXNSYXQo
YWJzRXJyb3IpIGFuZCBhYnNFcnJvciA+IDAgKSB0aGVuCiAgICBFcnJvcigiPHo+IG11c3QgYmUg
Y3ljLCA8YWJzRXJyb3I+IHBvc2l0aXZlIHJhdGlvbmFsIik7CiAgZmk7CgogICMgY2F0Y2ggdGhl
IHJhdGlvbmFsIGNhc2UKICB4IDo9ICh6ICsgR2Fsb2lzQ3ljKHosIC0xKSkvMjsKICBpZiBJc1Jh
dCh4KSB0aGVuCiAgICByZXR1cm4gQXBwcm94aW1hdGlvbkJpbmFyeSh5IC0+IHggLSB5LCBhYnNF
cnJvcik7CiAgZmk7CgogICMgQ29uc2lkZXIgeCA9IFN1bShjX2sgY29zKDIgcGkgay9uKSA6IGsg
aW4gUHJpbWVSZXNpZHVlcyhuKSwgY19rIDw+IDApLgogICMgVGhlIG1ldGhvZCB0byBjb21wdXRl
IHRoZSBib3VuZHMgYSwgYiBpcwogICMKICAjIDEuIEZpbmQgYTBfayA8PSBjb3MoMiBwaSBrL24p
IDw9IGIwX2sgYnkgYSBTdGVybi1Ccm9jb3QgYXBwcm94aW1hdGlvbi4KICAjICAgIFRoaXMgcmVz
dWx0cyBpbiBzbWFsbCBudW1lcmF0b3JzIGFuZCBkZW5vbWluYXRvcnMgb2YgYTBfaywgYjBfay4K
ICAjCiAgIyAyLiBTZXQgYTFfayA6PSBjX2sgYTBfaywgYjFfayA6PSBjX2sgYjBfayBmb3IgY19r
ID4gMCBhbmQKICAjICAgICAgICBhMV9rIDo9IGNfayBiMF9rLCBiMV9rIDo9IGNfayBhMF9rIGZv
ciBjX2sgPCAwLgogICMgICAgSGVuY2UsIGExX2sgPD0gY19rIGNvcygyIHBpIGsvbikgPD0gYjFf
ay4KICAjICAgIFNpbmNlIHRoZSBudW1lcmF0b3JzIGFuZCBkZW5vbWluYXRvcnMgaW4gYTBfaywg
YjBfayBoYXZlIGJlZW4gY2hvc2VuCiAgIyAgICBtaW5pbWFsLCB0aGUgZ3Jvd3RoIG9mIG51bWJl
cnMgZm9yIGExX2ssIGIxX2sgaXMgcmVsYXRpdmVseSBzbWFsbC4KICAjIAogICMgMy4gU2V0IEEy
X2sgOj0gZmxvb3IoMl5yIGExX2spLCBBMl9rIDo9IGNlaWxpbmcoMl5yIGIxX2spLgogICMgICAg
SGVuY2UsIEEyX2sgMl4tciA8PSBhMV9rLCBCMl9rIDJeLXIgPj0gYjFfay4KICAjICAgIENsZWFy
bHksIEEyX2sgYW5kIEIyX2sgYXJlIGludGVnZXIuIAogICMKICAjIDQuIEZvcm0gYSA6PSBTdW0o
QTJfayA6IGspLzJeciwgYiA6PSBTdW0oQjJfayA6IGspLzJeci4KICAjICAgIEhlbmNlLCBhIDw9
IGNvcygyIHBpIGsvbikgPD0gYiBhcyBkZXNpcmVkLgogICMgICAgVGhlIG51bWJlcnMgZG8gbm90
IGdyb3cgZXhwb25lbnRpYWxseSBzaW5jZSBBMl8sIEIyX2sgYXJlIGludGVnZXIuCiAgIyAKICAj
IE5vdywgd2UgY29tcHV0ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIGluaXRpYWwgYXBwcm94aW1hdGlv
biBpbiBzdGVwIDEuIGluCiAgIyBvcmRlciB0byB5aWVsZCBiIC0gYSA8IGFic0Vycm9yLiBMZXQg
TiA6PSB8e2sgfCBjX2sgPD4gMH18LiBXZSBhc3N1bWUKICAjIHRoYXQgYWxsIHN1bW1hbmRzIGlu
dHJvZHVjZSBhYm91dCB0aGUgc2FtZSBlcnJvciBpbnRvIHRoZSBzdW0uIEhlbmNlLCBsZXQKICAj
ICAgQjJfayAtIEEyX2sgPCBhYnNFcnJvci9OKjJeci4KICAjIFRvIGNob29zZSByLCBjb25zaWRl
ciB0aGUgd29yc3QgY2FzZSBib3VuZAogICMgICBCMl9rIC0gQjJfayA8PSAyXnIgKGIxX2sgKyAx
KSAtIDJeciAoYTFfayAtIDEpID0gMl5yIChiMV9rIC0gYTFfaykgKyAyLgogICMgSGVuY2UsIGZv
ciBzb21lIDJeciA+IDIgTi9hYnNFcnJvciB3ZSBmaW5kIHRoZSBjaGFpbiBvZiBib3VuZHMKICAj
ICAgICAgIGIwX2sgLSBhMF9rIDwgKGFic0Vycm9yL04gLSAyXigxLXIpKS98Y19rfAogICMgICA9
PT4gYjFfayAtIGExX2sgPCBhYnNFcnJvci9OIC0gMl4oMS1yKQogICMgICA9PT4gQjJfayAtIEIy
X2sgPCBhYnNFcnJvci9OKjJecgogICMgICA9PT4gYiAgICAtIGEgICAgPCBhYnNFcnJvci4KCiAg
IyByZXByZXNlbnQgeCBhcyBTdW0oY19rIGNvcygyIHBpIGsvbikgOiBrKSBjb250YWluaW5nIE4g
c3VtbWFuZHMKICBuIDo9IE5vZkN5Yyh4KTsKICBjIDo9IENvZWZmc0N5Yyh4LCBuKTsKICBOIDo9
IE51bWJlcihjLCBjayAtPiBjayA8PiAwKTsKCiAgIyBjaG9vc2UgciA+IDAgc3VjaCB0aGF0IDJe
ciA+IDIgTi9hYnNFcnJvcgogIFIgOj0gMipOL2Fic0Vycm9yOwogIGlmIFIgPD0gMSB0aGVuCiAg
ICByIDo9IDE7CiAgZWxzZQogICAgciA6PSBMb2dJbnQoUXVvSW50KE51bWVyYXRvclJhdChSKSwg
RGVub21pbmF0b3JSYXQoUikpLCAyKTsKICAgIHdoaWxlIG5vdCAyXnIgPiBSIGRvCiAgICAgIHIg
Oj0gciArIDE7CiAgICBvZDsKICBmaTsKICAKICAjIGNvbXB1dGUgYSwgYgogIGFiIDo9IFswLCAw
XTsKICBmb3IgayBpbiBbMC4ubl0gZG8KICAgIGlmIElzQm91bmQoY1sxK2tdKSBhbmQgY1sxK2td
IDw+IDAgdGhlbgoKICAgICAgIyBsb3dlciB0aGUgZXJyb3IgYm91bmQgYnkgYXQgbW9zdCAxJSB0
byByZWR1Y2UgdGhlIG51bWJlcnMgaW52b2x2ZWQKICAgICAgZXJyIDo9IChhYnNFcnJvci9OIC0g
Mi8yXnIpL0Fic0ludChjWzEra10pOwogICAgICBpZiBlcnIgPj0gMSB0aGVuCiAgICAgICAgZXJy
MSA6PSBGbG9vclJhdChlcnIpOwogICAgICBlbHNlCiAgICAgICAgZXJyMSA6PSAxL0NlaWxpbmdS
YXQoMS9lcnIpOwogICAgICBmaTsKICAgICAgaWYgKGVyciAtIGVycjEpL2VyciA+IDEvMTAwIHRo
ZW4KICAgICAgICBlcnIxIDo9IGVycjsKICAgICAgZmk7CgogICAgICAjIGFwcHJveGltYXRlIGNv
cygyIHBpIGsvbikKICAgICAgYWIwIDo9IEFwcHJveENvc1BpKDIqay9uLCBlcnIxKTsKCiAgICAg
ICMgZm9ybSB0aGUgZGVyaXZlZCBib3VuZCBmb3IgdGhlIHN1bW1hbmQgawogICAgICBpZiBjWzEr
a10gPiAwIHRoZW4KICAgICAgICBhYjEgOj0gWyBjWzEra10qYWIwWzFdLCBjWzEra10qYWIwWzJd
IF07CiAgICAgIGVsc2UKICAgICAgICBhYjEgOj0gWyBjWzEra10qYWIwWzJdLCBjWzEra10qYWIw
WzFdIF07CiAgICAgIGZpOwogICAgICBBQjIgOj0gWyBGbG9vclJhdChhYjFbMV0qMl5yKSwgQ2Vp
bGluZ1JhdChhYjFbMl0qMl5yKSBdOwogICAgICBhYiAgOj0gWyBhYlsxXSArIEFCMlsxXSwgYWJb
Ml0gKyBBQjJbMl0gXTsgCiAgICBmaTsKICBvZDsKICBhYiA6PSBbIGFiWzFdLzJeciwgYWJbMl0v
Ml5yIF07CiAgcmV0dXJuIGFiOwplbmQ7CgoKQXBwcm94UmVDeWNCaW5hcnkgOj0gZnVuY3Rpb24g
KCB6LCBhYnNFcnJvciApCiAgbG9jYWwKICAgIHpSZSwgICAgICAgIyBSZSh6KQogICAgYWIsICAg
ICAgICAjIHRoZSByZXN1bHQKICAgIGFiMSwgICAgICAgIyBhIHRpZ2h0ZXIgaW50ZXJ2YWwgZW5j
bG9zaW5nIHgKICAgIGFic0Vycm9yMSwgIyBhIGxvd2VyIGVycm9yIGJvdW5kCiAgICBwYXRoLCAg
ICAgICMgcmVjb3JkcyBhYiBhcHByb3hpbWF0aW9uCiAgICBpOyAgICAgICAgICMgY291bnRlciBm
b3IgdGhlIGl0ZXJhdGlvbnMKCiAgIyBjaGVjayBhcmd1bWVudHMKICBpZiBub3QgKCBJc0N5Yyh6
KSBhbmQgSXNSYXQoYWJzRXJyb3IpIGFuZCBhYnNFcnJvciA+IDAgKSB0aGVuCiAgICBFcnJvcigi
PHo+IG11c3QgY3ljLCA8YWJzRXJyb3I+IHBvc2l0aXZlIHJhdGlvbmFsIik7CiAgZmk7CiAgCiAg
IyBjYXRjaCB0aGUgcmF0aW9uYWwgY2FzZQogIHpSZSA6PSAoeiArIEdhbG9pc0N5Yyh6LCAtMSkp
LzI7CiAgaWYgSXNSYXQoelJlKSB0aGVuCiAgICByZXR1cm4gQXBwcm94aW1hdGlvbkJpbmFyeSh4
IC0+IHpSZSAtIHgsIGFic0Vycm9yKTsKICBmaTsKCiAgIyBUaGUgbWV0aG9kIHdlIHVzZSB0byBm
aW5kIHRoZSBiZXN0IGJpbmFyeSBhcHByb3hpbWF0aW9uIAogICMgaXMgdG8gY29tcHV0ZSBhIG1v
cmUgYWNjdXJhdGUgYXBwcm94aW1hdGlvbiB3aXRoIEFwcHJveFJlQ3ljU2ltcGxlCiAgIyBhbmQg
dG8gcmVhcHByb3hpbWF0ZSBpdCBvcHRpbWFsIGJpbmFyeSBhZ2Fpbi4gVGhpcyBtZXRob2Qgc2Vl
bXMgdG8gYmUKICAjIHVuZWxlZ2FudCBhdCBmaXJzdCBzaWdodCBjb21wYXJlZCB0byBhcHByb3hp
bWF0aW5nIHRoZSByb290cwogICMgb2YgdGhlIG1pbmltYWwgcG9seW5vbWlhbC4gSG93ZXZlciwg
aXQgYXZvaWRzIGNvbnN0cnVjdGlvbiBvZgogICMgb2YgdGhlIG1pbmltYWwgcG9seW5vbWlhbCBh
dCBhbGwhCgogIGFic0Vycm9yMSA6PSBhYnNFcnJvci8xMDsKICBwYXRoICAgICAgOj0gWyBdOwog
IGZvciBpIGluIFsxLi4xMDBdIGRvCiAgICBhYjEgOj0gQXBwcm94UmVDeWNTaW1wbGUoelJlLCBh
YnNFcnJvcjEpOwogICAgYWIgIDo9CiAgICAgIEFwcHJveGltYXRpb25CaW5hcnkoCglmdW5jdGlv
biAoeCkKCSAgaWYgeCA8IGFiMVsxXSB0aGVuCgkgICAgcmV0dXJuIDE7CgkgIGVsaWYgeCA+IGFi
MVsyXSB0aGVuCgkgICAgcmV0dXJuIC0xOwoJICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgIyBhYm9ydHMgQXBwcm94aW1hdGlvbkJpbmFyeQoJICBmaTsKCWVuZCwKCWFic0Vycm9yLAog
ICAgICAgIHBhdGgKICAgICAgKTsKICAgIGlmIGFiIDw+IGZhbHNlIHRoZW4KICAgICAgcmV0dXJu
IGFiOwogICAgZmk7CiAgICBhYnNFcnJvcjEgOj0gYWJzRXJyb3IxLzI7CiAgb2Q7CiAgRXJyb3Io
ImludGVybmFsOiBjYW5ub3QgZmluZCBiZXN0IGJpbmFyeSBhcHByb3hpbWF0aW9uIik7CmVuZDsK
CkFwcHJveFJlQ3ljU3Rlcm5Ccm9jb3QgOj0gZnVuY3Rpb24gKCB6LCBhYnNFcnJvciApCiAgbG9j
YWwKICAgIHpSZSwgICAgICAgIyBSZSh6KQogICAgYWIsICAgICAgICAjIHRoZSByZXN1bHQKICAg
IGFiMSwgICAgICAgIyBhIHRpZ2h0ZXIgaW50ZXJ2YWwgZW5jbG9zaW5nIHgKICAgIGFic0Vycm9y
MSwgIyBhIGxvd2VyIGVycm9yIGJvdW5kCiAgICBwYXRoLCAgICAgICMgcmVjb3JkcyBhYiBhcHBy
b3hpbWF0aW9uCiAgICBpOyAgICAgICAgICMgY291bnRlciBmb3IgdGhlIGl0ZXJhdGlvbnMKCiAg
IyBjaGVjayBhcmd1bWVudHMKICBpZiBub3QgKCBJc0N5Yyh6KSBhbmQgSXNSYXQoYWJzRXJyb3Ip
IGFuZCBhYnNFcnJvciA+IDAgKSB0aGVuCiAgICBFcnJvcigiPHo+IG11c3QgY3ljLCA8YWJzRXJy
b3I+IHBvc2l0aXZlIHJhdGlvbmFsIik7CiAgZmk7CgogICMgY2F0Y2ggdGhlIHJhdGlvbmFsIGNh
c2UKICB6UmUgOj0gKHogKyBHYWxvaXNDeWMoeiwgLTEpKS8yOwogIGlmIElzUmF0KHpSZSkgdGhl
bgogICAgcmV0dXJuIEFwcHJveGltYXRpb25TdGVybkJyb2NvdCh4IC0+IHpSZSAtIHgsIGFic0Vy
cm9yKTsKICBmaTsKCiAgIyBUaGUgbWV0aG9kIGlzIHRoZSBzYW1lIGFzIGluIEFwcHJveFJlQ3lj
QmluYXJ5LgogIGFic0Vycm9yMSA6PSBhYnNFcnJvci8xMDsKICBwYXRoICAgICAgOj0gWyBdOwog
IGZvciBpIGluIFsxLi4xMDBdIGRvCiAgICBhYjEgOj0gQXBwcm94UmVDeWNTaW1wbGUoeiwgYWJz
RXJyb3IxKTsKICAgIGFiICA6PQogICAgICBBcHByb3hpbWF0aW9uU3Rlcm5Ccm9jb3QoCglmdW5j
dGlvbiAoIHggKQoJICBpZiB4IDwgYWIxWzFdIHRoZW4KCSAgICByZXR1cm4gMTsKCSAgZWxpZiB4
ID4gYWIxWzJdIHRoZW4KCSAgICByZXR1cm4gLTE7CiAgICAgICAgICBlbHNlCgkgICAgcmV0dXJu
IGZhbHNlOyAjIGFib3J0cyBBcHByb3hpbWF0aW9uU3Rlcm5Ccm9jb3QKCSAgZmk7CgllbmQsCglh
YnNFcnJvciwKICAgICAgICBwYXRoCiAgICAgICk7CiAgICBpZiBhYiA8PiBmYWxzZSB0aGVuCiAg
ICAgIHJldHVybiBhYjsKICAgIGZpOwogICAgYWJzRXJyb3IxIDo9IGFic0Vycm9yMS8yOwogIG9k
OwogIEVycm9yKCJpbnRlcm5hbDogY2Fubm90IGZpbmQgYmVzdCByYXRpb25hbCBhcHByb3hpbWF0
aW9uIik7CmVuZDsKCiNGIFNpZ25SZUN5YyggPHo+ICkKI0YgICB0aGUgc2lnbiBvZiBSZSh6KS4g
VGhlIHNpZ24gaXMgaW4gey0xLCAwLCAxfS4KI0YKClNpZ25SZUN5YyA6PSBmdW5jdGlvbiAoIHog
KQogIGxvY2FsIGFiLCBlcHM7CgogIGlmIG5vdCBJc0N5Yyh6KSB0aGVuCiAgICBFcnJvcigiPHo+
IG11c3QgYmUgYSBDeWMiKTsKICBmaTsKCiAgeiA6PSAoeiArIEdhbG9pc0N5Yyh6LCAtMSkpLzI7
CiAgaWYgSXNSYXQoeikgdGhlbgogICAgaWYgeiA8IDAgdGhlbiAKICAgICAgcmV0dXJuIC0xOyAK
ICAgIGVsaWYgeiA9IDAgdGhlbiAKICAgICAgcmV0dXJuIDA7IAogICAgZWxzZSAKICAgICAgcmV0
dXJuIDE7IAogICAgZmk7CgogIGZpOwoKICAjIG5vdyB0aGUgaGFyZCBwYXJ0CiAgZXBzIDo9IDJe
LTEwOwogIHJlcGVhdAogICAgYWIgIDo9IEFwcHJveFJlQ3ljU2ltcGxlKHosIGVwcyk7CiAgICBl
cHMgOj0gZXBzLzI7CiAgdW50aWwgKGFiWzFdID4gMCBhbmQgYWJbMl0gPiAwKSBvciAoYWJbMV0g
PCAwIGFuZCBhYlsyXSA8IDApOwogIGlmIGFiWzFdIDwgMCB0aGVuCiAgICByZXR1cm4gLTE7CiAg
ZWxzZQogICAgcmV0dXJuICAxOwogIGZpOwplbmQ7CgoKIyBEZWNpbWFsIGZyYWN0aW9uIG91dHB1
dAojID09PT09PT09PT09PT09PT09PT09PT09CgojRiBTdHJpbmdEZWNpbWFsUmF0KCA8eD4sIDxt
YW50aXNzYURpZ2l0cz4gKQojRiAgIHJldHVybnMgYSBzdHJpbmcgd2l0aCBhIGRlY2ltYWwgZXhw
YW5zaW9uIGluIHNjaWVudGlmaWMKI0YgICBmb3JtYXQgZm9yIHRoZSByYXRpb25hbCB4IHdpdGgg
bWFudGlzc2FEaWdpdHMgbWFueSBkaWdpdHMKI0YgICBhZnRlciB0aGUgZGVjaW1hbCBkb3QgKG5v
IHJvdW5kaW5nKS4gVGhlIHN5bnRheCBwcm9kdWNlZCBpcwojRiAgICAgWy1dPGRpZ2l0Pi48ZGln
aXRzPmVbLV08ZGlnaXRzPgojRgoKU3RyaW5nRGVjaW1hbFJhdCA6PSBmdW5jdGlvbiAoIHgsIG1h
bnRpc3NhRGlnaXRzICkKICBsb2NhbCAKICAgIG91dCwgICAgIyB0aGUgbGlzdCBvZiBkaWdpdHMK
ICAgIG0sIGUsICAgIyBtKjEwXmUgPSB8eHwKICAgIG1OLCBtRCwgIyBtTi9tRCA9IG0KICAgIGk7
ICAgICAgIyBpbmRleCBvZiB0aGUgZGlnaXQKCiAgaWYgbm90ICggSXNSYXQoeCkgYW5kIElzSW50
KG1hbnRpc3NhRGlnaXRzKSApIHRoZW4KICAgIEVycm9yKCI8eD4gbXVzdCBiZSBSYXRpb25hbCBh
bmQgPG1hbnRpc3NhRGlnaXRzPiBpbnRlZ2VyIik7CiAgZmk7CiAgaWYgeCA9IDAgdGhlbgogICAg
cmV0dXJuICIwLjAiOwogIGZpOwoKICAjIGhhbmRsZSBzaWduIHgKICBpZiB4ID49IDAgdGhlbgog
ICAgb3V0IDo9ICIiOwogIGVsc2UKICAgIHggICA6PSAteDsKICAgIG91dCA6PSAiLSI7CiAgZmk7
CgogICMgeCA9IG0qMTBeZSB3aGVyZSAxIDw9IG0gPCAxMAogIGlmIHggPSAwIHRoZW4KICAgIGUg
Oj0gMDsKICBlbGlmIHggPCAxIHRoZW4KICAgIGUgOj0gQ2VpbGluZ1JhdCgxLygxK0xvZ0ludChR
dW9JbnQoRGVub21pbmF0b3JSYXQoeCksIE51bWVyYXRvclJhdCh4KSksIDEwKSkpOwogIGVsaWYg
eCA9IDEgdGhlbgogICAgZSA6PSAwOwogIGVsc2UKICAgIGUgOj0gRmxvb3JSYXQoMStMb2dJbnQo
UXVvSW50KE51bWVyYXRvclJhdCh4KSwgRGVub21pbmF0b3JSYXQoeCkpLCAxMCkpOwogIGZpOyAg
CiAgbSA6PSB4LzEwXmU7CiAgd2hpbGUgbSA8IDEgZG8KICAgIG0gOj0gbSoxMDsKICAgIGUgOj0g
ZS0xOwogIG9kOwogIHdoaWxlIG0gPj0gMTAgZG8KICAgIG0gOj0gbS8xMDsKICAgIGUgOj0gZSsx
OwogIG9kOwoKICAjIGNvbnZlcnQgbWFudGlzc2EgbSA9IG1OL21ECiAgbU4gOj0gTnVtZXJhdG9y
UmF0KG0pOwogIG1EIDo9IERlbm9taW5hdG9yUmF0KG0pOwogIEFwcGVuZChvdXQsIFN0cmluZyhR
dW9JbnQobU4sIG1EKSkpOwogIG1OIDo9IG1OIG1vZCBtRDsgCiAgQXBwZW5kKG91dCwgIi4iKTsK
ICBmb3IgaSBpbiBbMS4uTWF4aW11bSgxLCBtYW50aXNzYURpZ2l0cyldIGRvCiAgICBtTiA6PSAx
MCptTjsKICAgIEFwcGVuZChvdXQsIFN0cmluZyhRdW9JbnQobU4sIG1EKSkpOwogICAgbU4gOj0g
bU4gbW9kIG1EOwogIG9kOwoKICAjIGNvbnZlcnQgZXhwb25lbnQKICBBcHBlbmQob3V0LCAiZSIp
OwogIEFwcGVuZChvdXQsIFN0cmluZyhlKSk7CiAgSXNTdHJpbmcob3V0KTsKICByZXR1cm4gb3V0
OyAgCmVuZDsK
--=_mixed 003AE914C1256D87_=
Content-Type: application/octet-stream; name="approx.g"
Content-Disposition: attachment; filename="approx.g"
Content-Transfer-Encoding: base64

IyBBcHByb3hpbWF0aW9uIG9mIGN5Y2xvdG9taWMgZmllbGQgZWxlbWVudHMKIyBTZWJhc3RpYW4g
RWduZXIsIE1heS0xOTk3LCBHQVAgdjMuNAojCiMgVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9u
cyB0byBjb21wdXRlIHJhdGlvbmFsIGFwcHJveGltYXRpb25zCiMgZm9yIGN5Y2xvdG9taWMgZmll
bGQgZWxlbWVudHMuIE1vcmUgcHJlY2lzZWx5LCBmaXggdGhlIGVtYmVkZGluZyAKIyBvZiBDeWNs
b3RvbWljRmllbGQobikgaW50byB0aGUgY29tcGxleCBudW1iZXJzLCBkZWZpbmVkIGJ5IAojICAg
RShuKSAtPiBleHAoMiBwaSBpL24pLiAKIyBUaGVuIGFuIGFwcHJveGltYXRpb24gb2YgdGhlICpy
ZWFsIHBhcnQqIG9mIHRoZSBjeWNsb3RvbWljIGZpZWxkIAojIGVsZW1lbnQgeiBpcyBhIHBhaXIg
W2EsIGJdIG9mIHJhdGlvbmFsIG51bWJlcnMgYW5kIGEgcG9zaXRpdmUgCiMgcmF0aW9uYWwgZXBz
aWxvbiBzdWNoIHRoYXQKIyAgIGEgPD0gUmUoeikgPD0gYiAgIGFuZCAgIGIgLSBhIDwgZXBzaWxv
bi4KIyAoUmVtZW1iZXIsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB6IGlzIHdyaXR0ZW4gR2Fs
b2lzQ3ljKHosIC0xKSwKIyB0aGUgcmVhbCBwYXJ0IGlzICh6ICsgR2Fsb2lzQ3ljKHosIC0xKSkv
MiBhbmQgc28gb24uKQojCiMgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgbm90IG1l
YW50IHRvIGludHJvZHVjZSBudW1lcmljYWwKIyBjb21wdXRhdGlvbiBpbnRvIEdBUC4gUmF0aGVy
IHRoZXkgc3VwcGx5IGEgd2F5IHRvIGZpbmQgYWNjdXJhdGUKIyByYXRpb25hbCBhcHByb3hpbWF0
aW9ucyBvZiBjeWNsb3RvbWljcywgcmVwcmVzZW50aW5nIHJlYWwgYW5kCiMgY29tcGxleCBudW1i
ZXJzLiBJbiBmYWN0LCB0aGVyZSBpcyBhbHNvIGEgc2ltcGxlIGZ1bmN0aW9uIHRvIHByaW50CiMg
YW4gYXBwcm94aW1hdGlvbiBpbiBkZWNpbWFsLWRvdCBub3RhdGlvbiwgYmVjYXVzZSBzb21ldGlt
ZXMgaXQgaXMKIyBkZXNpcmVhYmxlIHRvIGhhdmUgYW4gaWRlYSBvZiB0aGUgb3JkZXIgb2YgbWFn
bml0dWRlLgojIAojIElmIHlvdSB3YW50IGEgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9ucyBl
eHBvcnRlZCBmcm9tIHRoaXMgCiMgbW9kdWxlIGZpbHRlciBvdXQgYWxsIGxpbmVzIGNvbnRhaW5p
bmcgdGhlIHN0cmluZyBtYWRlIGZyb20gJyMnIAojIGFuZCAnRicgKGUuZy4gd2l0aCBhIFVOSVgg
Z3JlcCkuIFRoZSBtYWluIGZ1bmN0aW9ucyBhcmUKIwojICAgQXBwcm94UmVDeWNTaW1wbGUoY3lj
LCBlcHNpbG9uKQojICAgQXBwcm94UmVDeWNCaW5hcnkoY3ljLCBlcHNpbG9uKQojICAgQXBwcm94
UmVDeWNTdGVybkJyb2NvdChjeWMsIGVwc2lsb24pCiMgICAgIGNvbXB1dGUgYW4gYXBwcm94aW1h
dGlvbiBbYSwgYl0gc3VjaCB0aGF0IGEgPD0gUmUoY3ljKSA8PSBiCiMgICAgIGFuZCBiIC0gYSA8
IGVwc2lsb24uIFRoZSB0aHJlZSBmdW5jdGlvbnMgcmV0dXJuIGFwcHJveGltYXRpb25zCiMgICAg
IHByb2R1Y2VkIGZyb20gZGlmZmVyZW50IG1ldGhvZDogU2ltcGxlIHJldHVybnMgYSBhcHByb3hp
bWF0aW9uCiMgICAgIHdoaWNoIGlzIHF1aWNrIHRvIGZpbmQsIEJpbmFyeSByZXR1cm5zIGEgYmlu
YXJ5IGZyYWN0aW9uLCB0aGF0CiMgICAgIGlzIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyIG9m
IDIsIFN0ZXJuQnJvY290IHJldHVybnMgY29udGludWVkCiMgICAgIGZyYWN0aW9uIHJlc3VsdCwg
c28gdGhlIGRlbm9taW5hdG9yIGlzICdsZWFzdCcgaW4gYSBjZXJ0YWluIHNlbnNlLgojCiMgICBT
dHJpbmdEZWNpbWFsUmF0KHJhdCwgbWFudGlzc2FEaWdpdHMpCiMKIyBoaXN0b3J5CiMgICBTRSwg
IDEuMDcuOTYgaW5pdGlhbCB2ZXJzaW9uCiMgICBTRSwgIDMuMDcuOTYgYXBwcm94LiB2aWEgbWlu
aW1pYWwgcG9seW5vbWlhbAojICAgU0UsICA0LjA3Ljk2IGFwcHJveC4gd2l0aG91dCBtaW5wb2wK
IyAgIFNFLCAgOS4wNy45NiBuZXcgYXBwcm94LiBmdW5jdGlvbnMgaW50ZWdyYXRlZAojICAgU0Us
IDIyLjAzLjk3IGZpeGVkIGJ1ZyBhdCBTdHJpbmdEZWNpbWFsUmF0KDApCiMgICBTRSwgMTkuMDgu
MDMgYWRkZWQgU2lnblJlQ3ljKCkKIwojIHJlZmVyZW5jZQojICAgWzFdIENvbmNyZXRlIE1hdGhl
bWF0aWNzLCBjaC4gNC41ICgnU3Rlcm4tQnJvY290IHRyZWUnKQojICAgWzJdIEphY29ic29uOiBC
YXNpYyBBbGdlYnJhIEksIGNoLiA1LjMgKCdTdHVybSBzZXF1ZW5jZScpCiMgICBbM10gRGF2ZW5w
b3J0LCBTaXJldCwgVG91cm5pZXI6IENvbXB1dGVyIEFsZ2VicmEgKCdTdHVybSBzZXF1ZW5jZScp
CgppZiBub3QgSXNCb3VuZChJbmZvQXBwcm94MSkgdGhlbiBJbmZvQXBwcm94MSA6PSBQcmludDsg
IGZpOwppZiBub3QgSXNCb3VuZChJbmZvQXBwcm94MikgdGhlbiBJbmZvQXBwcm94MiA6PSBJZ25v
cmU7IGZpOwoKCiMgVW5pdmVyc2FsIHRvb2xzCiMgPT09PT09PT09PT09PT09CgojIEZsb29yUmF0
KCA8cmF0PiApCiMgQ2VpbGluZ1JhdCggPHJhdD4gKQojICAgY29tcHV0ZSB0aGUgbGFyZ2VzdCBp
bnRlZ2VyIGxlc3Mgb3IgZXF1YWwgeCAoRmxvb3JJbnQpCiMgICBhbmQgdGhlIHNtYWxsZXN0IGlu
dGVnZXIgZ3JlYXRlciBvciBlcXVhbCB4IChDZWlsaW5nSW50KS4KIwoKRmxvb3JSYXQgOj0gZnVu
Y3Rpb24gKCB4ICkKICBpZiBJc0ludCh4KSB0aGVuCiAgICByZXR1cm4geDsKICBlbGlmIHggPiAw
IHRoZW4KICAgIHJldHVybiBRdW9JbnQoTnVtZXJhdG9yKHgpLCBEZW5vbWluYXRvcih4KSk7CiAg
ZWxzZSAjIHggPCAwCiAgICByZXR1cm4gLVF1b0ludChOdW1lcmF0b3IoLXgpLCBEZW5vbWluYXRv
cigteCkpIC0gMTsKICBmaTsKZW5kOwoKQ2VpbGluZ1JhdCA6PSBmdW5jdGlvbiAoIHggKQogIHJl
dHVybiAtRmxvb3JSYXQoLXgpOwplbmQ7CgoKIyBJc29sYXRpb24gb2YgcmVhbCByb290cyBvZiBy
YXRpb25hbCBwb2x5bm9taWFscwojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CgojRiBTdHVybVNlcXVlbmNlKCA8Zj4gKQojRiAgIGNvbXB1dGVzIGEgU3R1
cm0gc2VxdWVuY2UgZm9yIHRoZSByYXRpb25hbCBwb2x5bm9taWFsIGYuCiNGCgpTdHVybVNlcXVl
bmNlIDo9IGZ1bmN0aW9uICggZiApCiAgbG9jYWwgUywgZywgaCwgaSwgY29udGVudFJlbW92ZWQ7
CgogICMgY29udGVudFJlbW92ZWQoIDxmPiApCiAgIyAgIGNsZWFycyBhbGwgZGVub21pbmF0b3Jz
IGFuZCByZW1vdmVzIHRoZSBwb3NpdGl2ZSBnY2Qgb2YKICAjICAgdGhlIHJlbWFpbmluZyBpbnRl
Z2VyIGNvZWZmaWNpZW50cy4gQ2FyZSBpcyB0YWtlIG5vdCB0bwogICMgICBhbHRlciB0aGUgc2ln
biBvZiB0aGUgbGVhZGluZyBjb2VmZmljaWVudC4KCiAgY29udGVudFJlbW92ZWQgOj0gZnVuY3Rp
b24gKCBmICkKICAgIGxvY2FsIEYsIGQsIGcsIGk7CgogICAgRiA6PSBTaGFsbG93Q29weShmLmNv
ZWZmaWNpZW50cyk7CgogICAgZCA6PSAxOwogICAgZm9yIGkgaW4gWzEuLkxlbmd0aChGKV0gZG8K
ICAgICAgaWYgSXNSYXQoRltpXSkgdGhlbgogICAgICAgIGQgOj0gTGNtSW50KGQsIERlbm9taW5h
dG9yKEZbaV0pKTsKICAgICAgZmk7CiAgICBvZDsKICAgIGlmIGQgPiAxIHRoZW4KICAgICAgZm9y
IGkgaW4gWzEuLkxlbmd0aChGKV0gZG8KICAgICAgICBGW2ldIDo9IGQqRltpXTsKICAgICAgb2Q7
CiAgICBmaTsKCiAgICBnIDo9IDA7CiAgICBpIDo9IDE7CiAgICB3aGlsZSBpIDw9IExlbmd0aChG
KSBhbmQgZyA8PiAxIGRvCiAgICAgIGlmIEZbaV0gPD4gMCB0aGVuCiAgICAgICAgaWYgZyA9IDAg
dGhlbgogICAgICAgICAgZyA6PSBBYnNJbnQoRltpXSk7IAogICAgICAgIGVsc2UgCiAgICAgICAg
ICBnIDo9IEdjZEludChnLCBBYnNJbnQoRltpXSkpOyAKICAgICAgICBmaTsKICAgICAgZmk7CiAg
ICAgIGkgOj0gaSArIDE7CiAgICBvZDsKICAgIGlmIGcgPSAwIHRoZW4KICAgICAgZyA6PSAxOwog
ICAgZmk7CgogICAgcmV0dXJuIGQvZyAqIGY7CiAgZW5kOwoKICAjIGhhbmRsZSB0cml2aWFsIGNh
c2VzIGFuZCBtYWtlIGYgYSByYXRpb25hbCBwb2x5bm9taWFsCiAgSW5mb0FwcHJveDEoIiNJIFN0
dXJtU2VxdWVuY2UoIDxwb2x5LiBvZiBkZWdyZWUgIiwgRGVncmVlKGYpLCAiPiApXG4iKTsKICBp
ZiBEZWdyZWUoZikgPSAtMSB0aGVuCiAgICByZXR1cm4gWyBdOwogIGZpOwogIGYgOj0gCiAgICAg
UG9seW5vbWlhbCgKICAgICAgIFJhdGlvbmFscywgCiAgICAgICBDb25jYXRlbmF0aW9uKExpc3Qo
WzEuLmYudmFsdWF0aW9uXSwgaSAtPiAwKSwgZi5jb2VmZmljaWVudHMpCiAgICAgKTsKCiAgIyBj
b21wdXRlIHRoZSBTdHVybSBzZXF1ZW5jZSBTIGZvciBmOyBhbGwgZGVub21pbmF0b3JzIGFuZCBn
Y2RzCiAgIyBvZiB0aGUgY29lZmZpY2llbnRzIGFyZSByZW1vdmVkIHNpbmNlIHdlIHdpbGwgZXZh
bHVhdGUgdGhlCiAgIyBzZXF1ZW5jZSBwb3NzaWJseSBhIGxhcmdlIG51bWJlciBvZiB0aW1lczsg
c3VicmVzdWx0YW50IG1ldGhvZHMKICAjIGRvIG5vdCBzYXZlIHRpbWUgaW4gdGhpcyBzaXR1YXRp
b24uCgogIFMgOj0gWyBjb250ZW50UmVtb3ZlZChmKSBdOwogIGcgOj0gY29udGVudFJlbW92ZWQo
RGVyaXZhdGl2ZShTWzFdKSk7CiAgd2hpbGUgRGVncmVlKGcpID4gMCBkbwogICAgQWRkKFMsIGcp
OwogICAgaCA6PSAtY29udGVudFJlbW92ZWQoRXVjbGlkZWFuUmVtYWluZGVyKGYsIGcpKTsKICAg
IGYgOj0gZzsKICAgIGcgOj0gaDsKICBvZDsKICBpZiBEZWdyZWUoZykgPD4gLTEgdGhlbgogICAg
QWRkKFMsIGcpOwogIGZpOwogICMgcmVtb3ZlIHRoZSBnY2Qgb2YgZiBhbmQgZicgZnJvbSBhbGwg
cG9seW5vbWlhbHMgaW4gUzsKICAjIHRoaXMgbm9ybWFsaXphdGlvbiBtYWtlcyBTWzFdIHNxdWFy
ZWZyZWUgYW5kIFNbTGVuZ3RoKFMpXSA9IDEuCgogIGcgOj0gU1tMZW5ndGgoUyldOwogIGZvciBp
IGluIFsxLi5MZW5ndGgoUyldIGRvCiAgICBTW2ldIDo9IGNvbnRlbnRSZW1vdmVkKEV1Y2xpZGVh
blF1b3RpZW50KFNbaV0sIGcpKTsKICBvZDsKICByZXR1cm4gUzsKZW5kOwoKCiMgU3R1cm1TZXF1
ZW5jZVZhbHVlKCA8Uz4sIDx4PiApCiMgICByZXR1cm5zIGFuIGludGVnZXIgd2hpY2ggY29udGFp
bnMgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uCiMgICBvZiBldmFsdWF0aW5nIHRoZSBTdHVybSBz
ZXF1ZW5jZSBTIGF0IHRoZSByYXRpb25hbCBwb2ludCB4LiAKIyAgIE5hbWVseSwgdGhlIHJlc3Vs
dCBpcyBWID0gMip2ICsgdyB3aGVyZSB2IGlzIHRoZSBudW1iZXIgb2YgCiMgICBzaWduIHZhcmlh
dGlvbnMgb2YgUyBhdCB4IGFuZCB3ID0gMS1hYnMoc2lnbih2YWx1ZShTWzFdLCB4KSkpLgojICAg
VGhlIHBvaW50IHggbWF5IGFsc28gYmUgImluZmluaXR5IiBvciAiLWluZmluaXR5Ii4KIwoKU3R1
cm1TZXF1ZW5jZVZhbHVlIDo9IGZ1bmN0aW9uICggUywgeCApCiAgbG9jYWwgViwgcywgc2ksIHNp
Z24sIGk7CgogIGlmIExlbmd0aChTKSA9IDAgdGhlbgogICAgcmV0dXJuIDA7CiAgZmk7CgogICMg
c2lnbihmKSA6PSBTaWduSW50KFZhbHVlKGYsIHgpKQogIGlmIHggPSAiLWluZmluaXR5IiB0aGVu
CiAgICBzaWduIDo9IGYgLT4gKC0xKV5EZWdyZWUoZikgKiBTaWduSW50KExlYWRpbmdDb2VmZmlj
aWVudChmKSk7CiAgZWxpZiBJc1JhdCh4KSB0aGVuCiAgICBzaWduIDo9IGYgLT4gU2lnbkludChW
YWx1ZShmLCB4KSk7CiAgZWxpZiB4ID0gImluZmluaXR5IiB0aGVuCiAgICBzaWduIDo9IGYgLT4g
U2lnbkludChMZWFkaW5nQ29lZmZpY2llbnQoZikpOwogIGZpOwoKICAjIGNvdW50IHNpZ24gdmFy
aWF0aW9ucyBkcm9wcGluZyB6ZXJvcywgYW5kIGdldCBzaWduKFNbMV0pCiAgcyA6PSBzaWduKFNb
MV0pOwogIFYgOj0gMSAtIEFic0ludChzKTsKICBmb3IgaSBpbiBbMi4uTGVuZ3RoKFMpXSBkbwog
ICAgc2kgOj0gc2lnbihTW2ldKTsKICAgIGlmIHNpIDw+IDAgdGhlbgogICAgICBpZiBzIDw+IDAg
YW5kIHNpIDw+IHMgdGhlbgogICAgICAgIFYgOj0gViArIDI7CiAgICAgIGZpOwogICAgICBzIDo9
IHNpOwogICAgZmk7CiAgb2Q7CiAgcmV0dXJuIFY7CmVuZDsKCgojIFN0dXJtU2VxdWVuY2VOclJl
YWxSb290cyggPGE+LCA8VmE+LCAgPGI+LCA8VmI+ICkKIyAgIHJldHVybnMgdGhlIG51bWJlciBv
ZiByZWFsIHJvb3RzIG9mIGEgcmF0aW9uYWwgcG9seW5vbWlhbCAKIyAgIGYgPD4gMCBpbiB0aGUg
Km9wZW4qIGludGVydmFsIHt4IHwgYSA8IHggPCBifSwgCiMgICBnaXZlbiB0aGUgdmFsdWVzIFZh
LCBWYiBvZiBhIFN0dXJtIHNlcXVlbmNlIFNfZiBhdCBhLCBiIAojICAgYXMgcmV0dXJuZWQgYnkg
U3R1cm1TZXF1ZW5jZVZhbHVlLiBUaGUgdmFsdWVzIGEsIGIgbWF5IGJlCiMgICByYXRpb25hbHMs
ICItaW5maW5pdHkiLCBvciAiaW5maW5pdHkiLgojCgpTdHVybVNlcXVlbmNlTnJSZWFsUm9vdHMg
Oj0gZnVuY3Rpb24gKCBhLCBWYSwgIGIsIFZiICkKICBpZiAKICAgIElzUmF0KGEpICAgICAgICBh
bmQgSXNSYXQoYikgYW5kIGEgPCBiIG9yCiAgICBhID0gIi1pbmZpbml0eSIgYW5kIElzUmF0KGIp
ICAgICAgICAgICBvcgogICAgSXNSYXQoYSkgICAgICAgIGFuZCBiID0gImluZmluaXR5IiAgICAg
b3IKICAgIGEgPSAiLWluZmluaXR5IiBhbmQgYiA9ICJpbmZpbml0eSIKICB0aGVuCiAgICByZXR1
cm4gUXVvSW50KFZhLCAyKSAtIChRdW9JbnQoVmIsIDIpKyhWYiBtb2QgMikpOwogIGVsc2UKICAg
IHJldHVybiAwOwogIGZpOwplbmQ7CgoKI0YgUmVhbFJvb3RJc29sYXRpb25CaW5hcnkoICAgICAg
PEY+IFssIDxtaW4+LCA8bWF4Pl0gKQojRiBSZWFsUm9vdElzb2xhdGlvblN0ZXJuQnJvY290KCA8
Rj4gWywgPG1pbj4sIDxtYXg+XSApCiNGICAgcmV0dXJuIHJhdGlvbmFsIGlzb2xhdGlvbiBpbnRl
cnZhbHMgZm9yIGFsbCByZWFsIHJvb3RzIG9mIHRoZQojRiAgIHJhdGlvbmFsIHBvbHlub21pYWwg
ZiA8PiAwIGluIHRoZSBjbG9zZWQgaW50ZXJ2YWwgW21pbi4ubWF4XS4KI0YgICBUaGUgYXJndW1l
bnQgRiBpcyBlaXRoZXIgdGhlIHBvbHlub21pYWwgZiBvciBhIFN0dXJtIHNlcXVlbmNlCiNGICAg
Zm9yIGYuIFRoZSBib3VuZHMgbWluLCBtYXggYXJlICItaW5maW5pdHkiLCAiaW5maW5pdHkiIG9y
IHJhdGlvbmFsLgojRiAgIFRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIHJhdGlvbmFsIHBhaXJzIFth
LCBiXSB3aGljaCByZXByZXNlbnQgdGhlIAojRiAgIGNsb3NlZCBzdWJpbnRlcnZhbCBbYS4uYl0g
b2YgW21pbi4ubWF4XSBzdWNoIHRoYXQgdGhlcmUgaXMgZXhhY3RseSAKI0YgICBvbmUgcmVhbCB4
IHNhdGlzZnlpbmcgYSA8PSB4IDw9IGIgYW5kIGYoeCkgPSAwLiBUaGUgdHdvIGZ1bmN0aW9ucyAK
I0YgICBkaWZmZXIgaW4gdGhlIHdheSB0aGV5IGdlbmVyYXRlIHRoZSByYXRpb25hbCBudW1iZXJz
IGEgYW5kIGIuCiNGCgpSZWFsUm9vdElzb2xhdGlvbkJpbmFyeSA6PSBmdW5jdGlvbiAoIGFyZyAp
CiAgbG9jYWwgCiAgICBTLCBtaW4sIG1heCwgICAgICAgICAgICAgICAgIyBjb21wbGV0ZWQgYXJn
dW1lbnQgbGlzdAogICAgcm9vdHMsICAgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiBpbnRl
cnZhbHMgW2EsIGJdIGZvciB0aGUgcm9vdHMKICAgIFZtaW5mLCBWbTEsIFYwLCBWcDEsIFZwaW5m
LCAjIHNpZ24gdmFyaWF0aW9ucyBhdCBzb21lIHBvaW50cwogICAgaXNvbGF0ZVNpbmdsZVBvaW50
LAogICAgaXNvbGF0ZU9wZW5JbnRlcnZhbDsKCiAgaXNvbGF0ZVNpbmdsZVBvaW50IDo9IGZ1bmN0
aW9uICggYSxWYSApCgogICAgIyBzdG9wIGlmIGEgaXMgbm90IGluIFttaW4uLm1heF0KICAgIGlm
IG5vdCAoCiAgICAgICggbWluID0gIi1pbmZpbml0eSIgb3IgbWluIDw9IGEgKSBhbmQKICAgICAg
KCBtYXggPSAgImluZmluaXR5IiBvciBtYXggPj0gYSApCiAgICApIHRoZW4KICAgICAgcmV0dXJu
OwogICAgZmk7CgogICAgIyBzaW1wbHkgdGVzdCBmKGEpID0gMAogICAgSW5mb0FwcHJveDIoIlsi
LCBhLCAiXSBcYyIpOwogICAgaWYgVmEgbW9kIDIgPSAxIHRoZW4KICAgICAgQWRkKHJvb3RzLCBb
YSwgYV0pOwogICAgZmk7CiAgZW5kOwoKICBpc29sYXRlT3BlbkludGVydmFsIDo9IGZ1bmN0aW9u
ICggYSxWYSwgYixWYiApCiAgICBsb2NhbCBjLCBWYzsKCiAgICAjIHN0b3AgaWYgKGEuLmIpIGlz
IGRpc2pvaW50IHRvIFttaW4uLm1heF0KICAgIGlmIG5vdCAoCiAgICAgICggbWluID0gIi1pbmZp
bml0eSIgb3IgYiA9ICAiaW5maW5pdHkiIG9yIG1pbiA8IGIgKSBhbmQKICAgICAgKCBtYXggPSAg
ImluZmluaXR5IiBvciBhID0gIi1pbmZpbml0eSIgb3IgbWF4ID4gYSApCiAgICApIHRoZW4KICAg
ICAgcmV0dXJuOwogICAgZmk7ICAgIAoKICAgICMgc3RvcCBpZiAoYS4uYikgZG9lcyBub3QgY29u
dGFpbiBhIHJvb3QgYW55bW9yZQogICAgSW5mb0FwcHJveDIoIigiLCBhLCAiLi4iLCBiLCAiKSBc
YyIpOwogICAgaWYgU3R1cm1TZXF1ZW5jZU5yUmVhbFJvb3RzKGEsVmEsIGIsVmIpID0gMCB0aGVu
CiAgICAgIHJldHVybjsKICAgIGZpOwoKICAgIGlmIElzUmF0KGEpIGFuZCBJc1JhdChiKSB0aGVu
CgogICAgICAjIChhLi5iKSBmaW5pdGU6IHN1YmRpdmlkZSBhdCAoYStiKS8yIHVudGlsIGEgcm9v
dCBpcyBpc29sYXRlZAogICAgICAjIGFuZCB0aGUgYm91bmRzIGEsIGIgYm90aCBsaWUgaW4gW21p
bi4ubWF4XQogICAgICBpZiAKICAgICAgICBTdHVybVNlcXVlbmNlTnJSZWFsUm9vdHMoYSxWYSwg
YixWYikgPSAxIGFuZAogICAgICAgICggbWluID0gIi1pbmZpbml0eSIgb3IgbWluIDw9IGEpIGFu
ZAogICAgICAgICggbWF4ID0gICJpbmZpbml0eSIgb3IgbWF4ID49IGIpCiAgICAgIHRoZW4KICAg
ICAgICBBZGQocm9vdHMsIFthLCBiXSk7CiAgICAgICAgcmV0dXJuOwogICAgICBmaTsKICAgICAg
YyA6PSAoYSArIGIpLzI7CgogICAgZWxpZiBhID0gIi1pbmZpbml0eSIgdGhlbgoKICAgICAgIyAo
LWluZmluaXR5Li5iKTogZGVjcmVhc2UgYiBleHBvbmVudGlhbGx5CiAgICAgIGMgOj0gMipiOwoK
ICAgIGVsaWYgYiA9ICJpbmZpbml0eSIgdGhlbgogIAogICAgICAjIChhLi5pbmZpbml0eSk6IGlu
Y3JlYXNlIGEgZXhwb25lbnRpYWxseQogICAgICBjIDo9IDIqYTsKCiAgICBmaTsKCiAgICAjIHNw
bGl0IChhLi5iKSBhcyAoYS4uYykgdW5pb24ge2N9IHVuaW9uIChjLi5iKSAKICAgIFZjIDo9IFN0
dXJtU2VxdWVuY2VWYWx1ZShTLCBjKTsKICAgIGlzb2xhdGVPcGVuSW50ZXJ2YWwoYSxWYSwgYyxW
Yyk7CiAgICBpc29sYXRlU2luZ2xlUG9pbnQoYyxWYyk7CiAgICBpc29sYXRlT3BlbkludGVydmFs
KGMsVmMsIGIsVmIpOwogIGVuZDsKCiAgIyBkZWNvZGUgYW5kIGNoZWNrIGFyZwogIGlmIExlbmd0
aChhcmcpID0gMSB0aGVuCiAgICBTICAgOj0gYXJnWzFdOwogICAgbWluIDo9ICItaW5maW5pdHki
OwogICAgbWF4IDo9ICAiaW5maW5pdHkiOwogIGVsaWYgTGVuZ3RoKGFyZykgPSAzIHRoZW4KICAg
IFMgICA6PSBhcmdbMV07CiAgICBtaW4gOj0gYXJnWzJdOwogICAgbWF4IDo9IGFyZ1szXTsKICBl
bHNlCiAgICBFcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgMSBvciAzIGV4cGVjdGVk
Iik7CiAgZmk7CiAgaWYgbm90ICggSXNQb2x5bm9taWFsKFMpIG9yIElzTGlzdChTKSBhbmQgRm9y
QWxsKFMsIElzUG9seW5vbWlhbCkgKSB0aGVuCiAgICBFcnJvcigiPFM+IG11c3QgYmUgYSByYXRp
b25hbCBwb2x5bm9taWFsIG9yIGEgU3R1cm0gc2VxdWVuY2UiKTsKICBmaTsKICBpZiBub3QgKCAK
ICAgICggSXNSYXQobWluKSBvciBtaW4gaW4gWyItaW5maW5pdHkiLCAiaW5maW5pdHkiXSApIGFu
ZAogICAgKCBJc1JhdChtYXgpIG9yIG1heCBpbiBbIi1pbmZpbml0eSIsICJpbmZpbml0eSJdICkK
ICApIHRoZW4KICAgIEVycm9yKCI8bWluPiBhbmQgPG1heD4gbXVzdCBiZSByYXRpb25hbCwgXCJp
bmZpbml0eVwiLCBvciBcIi1pbmZpbml0eVwiIik7CiAgZmk7CiAgaWYgbm90IElzTGlzdChTKSB0
aGVuICAgIAogICAgUyA6PSBTdHVybVNlcXVlbmNlKFMpOwogIGZpOwogIEluZm9BcHByb3gxKAog
ICAgIiNJIFJlYWxSb290SXNvbGF0aW9uQmluYXJ5KCA8cG9seS4gb2YgZGVncmVlICIsIAogICAg
IERlZ3JlZShTWzFdKSwgCiAgICAiPiApXG4iCiAgKTsKCiAgIyBzYW1wbGUgUyBhdCBhIG51bWJl
ciBvZiBzdGFuZGFyZCBwb2ludHMKICBWbWluZiA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgIi1p
bmZpbml0eSIpOyAKICBWbTEgICA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICAgICAgICAgLTEp
OyAKICBWMCAgICA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICAgICAgICAgIDApOwogIFZwMSAg
IDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCAgICAgICAgICAgMSk7IAogIFZwaW5mIDo9IFN0dXJt
U2VxdWVuY2VWYWx1ZShTLCAgImluZmluaXR5Iik7IAoKICBJbmZvQXBwcm94MigiI0kgICAiKTsK
ICByb290cyA6PSBbIF07CiAgaXNvbGF0ZU9wZW5JbnRlcnZhbCgiLWluZmluaXR5IiwgVm1pbmYs
IC0xLCBWbTEpOwogIGlzb2xhdGVTaW5nbGVQb2ludCggLTEsIFZtMSk7CiAgaXNvbGF0ZU9wZW5J
bnRlcnZhbCgtMSwgVm0xLCAwLCBWMCk7CiAgaXNvbGF0ZVNpbmdsZVBvaW50KCAgMCwgVjApOwog
IGlzb2xhdGVPcGVuSW50ZXJ2YWwoIDAsIFYwLCAxLCBWcDEpOwogIGlzb2xhdGVTaW5nbGVQb2lu
dCggIDEsIFZwMSk7CiAgaXNvbGF0ZU9wZW5JbnRlcnZhbCggMSwgVnAxLCAiaW5maW5pdHkiLCBW
cGluZik7CiAgSW5mb0FwcHJveDIoIlxuIik7CgogIHJldHVybiByb290czsKZW5kOwoKUmVhbFJv
b3RJc29sYXRpb25TdGVybkJyb2NvdCA6PSBmdW5jdGlvbiAoIGFyZyApCiAgbG9jYWwgCiAgICBT
LCBtaW4sIG1heCwgICAgICAgICAgICAgICAgIyBjb21wbGV0ZWQgYXJndW1lbnQgbGlzdAogICAg
cm9vdHMsICAgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiBpbnRlcnZhbHMgW2EsIGJdIGZv
ciB0aGUgcm9vdHMKICAgIFZtaW5mLCBWbTEsIFYwLCBWcDEsIFZwaW5mLCAjIHNpZ24gdmFyaWF0
aW9ucyBhdCBzb21lIHBvaW50cwogICAgaXNvbGF0ZVNpbmdsZVBvaW50LAogICAgaXNvbGF0ZU9w
ZW5JbnRlcnZhbDsKCiAgaXNvbGF0ZVNpbmdsZVBvaW50IDo9IGZ1bmN0aW9uICggYSxWYSApCiAg
ICBpZiBub3QgKAogICAgICAoIG1pbiA9ICItaW5maW5pdHkiIG9yIG1pbiA8PSBhICkgYW5kCiAg
ICAgICggbWF4ID0gICJpbmZpbml0eSIgb3IgbWF4ID49IGEgKQogICAgKSB0aGVuCiAgICAgIHJl
dHVybjsKICAgIGZpOwogICAgSW5mb0FwcHJveDIoIlsiLCBhLCAiXSBcYyIpOwogICAgaWYgVmEg
bW9kIDIgPSAxIHRoZW4KICAgICAgQWRkKHJvb3RzLCBbYSwgYV0pOwogICAgZmk7CiAgZW5kOwoK
ICBpc29sYXRlT3BlbkludGVydmFsIDo9IGZ1bmN0aW9uICggYSxWYSwgYixWYiApCiAgICBsb2Nh
bCAKICAgICAgYywgVmMsICAgICAgICAgICAgICMgdGhlIHNwbGl0dGluZyBwb2ludAogICAgICBh
TixhRCwgYk4sYkQsICAgICAgIyBOdW1lcmF0b3IsIERlbm9taW5hdG9yIG9mIGEsIGIKICAgICAg
c3BsaXRQb2ludCwgdmFsaWQsICMgZnVuY3Rpb25zIHRvIHNlYXJjaCBmYXN0ZXIKICAgICAga0xv
LCBrTWksIGtIaSwgICAgICMgcG9zaXRpdmUgaW50ZWdlciBpbmRpY2VzIHRvIHNlYXJjaCBmYXN0
ZXIKICAgICAgY0xvLCBjTWksIGNIaSwgICAgICMgcG9pbnRzIGZvciBrTG8sIGtNaSwga0hpCiAg
ICAgIFZMbywgVk1pLCBWSGk7ICAgICAjIHNpZ24gdmFyaWF0aW9ucyBhdCBjTG8sIGNNaSwgY0hp
CgogICAgIyBzdG9wIGlmIChhLi5iKSBpcyBkaXNqb2ludCB0byBbbWluLi5tYXhdCiAgICBpZiBu
b3QgKAogICAgICAoIG1pbiA9ICItaW5maW5pdHkiIG9yIGIgPSAgImluZmluaXR5IiBvciBtaW4g
PCBiICkgYW5kCiAgICAgICggbWF4ID0gICJpbmZpbml0eSIgb3IgYSA9ICItaW5maW5pdHkiIG9y
IG1heCA+IGEgKQogICAgKSB0aGVuCiAgICAgIHJldHVybjsKICAgIGZpOyAgICAKCiAgICAjIHN0
b3AgaWYgKGEuLmIpIGRvZXMgbm90IGNvbnRhaW4gYSByb290IGFueW1vcmUKICAgIEluZm9BcHBy
b3gyKCIoIiwgYSwgIi4uIiwgYiwgIikgXGMiKTsKICAgIGlmIFN0dXJtU2VxdWVuY2VOclJlYWxS
b290cyhhLFZhLCBiLFZiKSA9IDAgdGhlbgogICAgICByZXR1cm47CiAgICBmaTsKCiAgICBpZiBJ
c1JhdChhKSBhbmQgSXNSYXQoYikgdGhlbgoKICAgICAgIyAoYS4uYikgZmluaXRlOiBzdWJkaXZp
ZGUgdW50aWwgYSByb290IGlzIGlzb2xhdGVkCiAgICAgICMgYW5kIHRoZSBib3VuZHMgYSwgYiBi
b3RoIGxpZSBpbiBbbWluLi5tYXhdCiAgICAgIGlmIAogICAgICAgIFN0dXJtU2VxdWVuY2VOclJl
YWxSb290cyhhLFZhLCBiLFZiKSA9IDEgYW5kCiAgICAgICAgKCBtaW4gPSAiLWluZmluaXR5IiBv
ciBtaW4gPD0gYSkgYW5kCiAgICAgICAgKCBtYXggPSAgImluZmluaXR5IiBvciBtYXggPj0gYikK
ICAgICAgdGhlbgogICAgICAgIEFkZChyb290cywgW2EsIGJdKTsKICAgICAgICByZXR1cm47CiAg
ICAgIGZpOwogICAgICBjIDo9IChOdW1lcmF0b3IoYSkrTnVtZXJhdG9yKGIpKS8oRGVub21pbmF0
b3IoYSkrRGVub21pbmF0b3IoYikpOwoKICAgIGVsaWYgYSA9ICItaW5maW5pdHkiIHRoZW4KCiAg
ICAgICMgKC1pbmZpbml0eS4uYik6IGRlY3JlYXNlIGIgYnkgb25lIAogICAgICBjIDo9IGIgLSAx
OwoKICAgIGVsaWYgYiA9ICJpbmZpbml0eSIgdGhlbgogIAogICAgICAjIChhLi5pbmZpbml0eSk6
IGluY3JlYXNlIGEgYnkgb25lCiAgICAgIGMgOj0gYSArIDE7CgogICAgZmk7CgogICAgIyBzcGVl
ZCB1cCB0aGUgc2VhcmNoIGJ5IGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyB0aGUgc3RlcHNpemUK
ICAgICMgaWYgKGEuLmMpIG9yIChjLi5iKSBkb2VzIG5vdCBjb250YWluIGEgcm9vdAogICAgVmMg
Oj0gU3R1cm1TZXF1ZW5jZVZhbHVlKFMsIGMpOwogICAgaWYgCiAgICAgIFN0dXJtU2VxdWVuY2VO
clJlYWxSb290cyhhLFZhLCBjLFZjKSA9IDAgb3IgCiAgICAgIFN0dXJtU2VxdWVuY2VOclJlYWxS
b290cyhjLFZjLCBiLFZiKSA9IDAgCiAgICB0aGVuCiAgICAgIGlmIGEgPSAiLWluZmluaXR5IiB0
aGVuCiAgICAgICAgYU4gOj0gLTE7ICAgICAgICAgIAogICAgICAgIGFEIDo9ICAwOwogICAgICBl
bHNlCiAgICAgICAgYU4gOj0gTnVtZXJhdG9yKGEpOyAKICAgICAgICBhRCA6PSBEZW5vbWluYXRv
cihhKTsKICAgICAgZmk7CiAgICAgIGlmIGIgPSAiaW5maW5pdHkiIHRoZW4KICAgICAgICBiTiA6
PSAxOyAKICAgICAgICBiRCA6PSAwOwogICAgICBlbHNlCiAgICAgICAgYk4gOj0gTnVtZXJhdG9y
KGIpOwogICAgICAgIGJEIDo9IERlbm9taW5hdG9yKGIpOwogICAgICBmaTsKICAgICAgaWYgU3R1
cm1TZXF1ZW5jZU5yUmVhbFJvb3RzKGEsVmEsIGMsVmMpID0gMCB0aGVuCiAgICAgICAgc3BsaXRQ
b2ludCA6PSBrICAtPiAoYU4gKyBrKmJOKS8oYUQgKyBrKmJEKTsKICAgICAgICB2YWxpZCAgICAg
IDo9IFZjIC0+IFZjID0gVmE7CiAgICAgIGVsc2UKICAgICAgICBzcGxpdFBvaW50IDo9IGsgLT4g
KGsqYU4gKyBiTikvKGsqYUQgKyBiRCk7CiAgICAgICAgdmFsaWQgICAgICA6PSBWYyAtPiBWYyA9
IFZiOwogICAgICBmaTsKCiAgICAgICMgZmluZCB0aGUgbGFyZ2VzdCB2YWxpZCBrIGJ5IGV4cG9u
ZW50aWFsbHkgaW5jcmVhc2luZyBrIHVwIHRvCiAgICAgICMgYW4gdXBwZXIgYm91bmQgYW5kIGJp
bmFyeSBzZWFyY2ggYWZ0ZXJ3YXJkcwoKICAgICAga0xvIDo9IDE7CiAgICAgIGNMbyA6PSBjOwog
ICAgICBWTG8gOj0gVmM7CiAgICAgIGtIaSA6PSAyOwogICAgICBjSGkgOj0gc3BsaXRQb2ludCgy
KTsKICAgICAgVkhpIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCBjSGkpOwogICAgICB3aGlsZSB2
YWxpZChWSGkpIGRvCiAgICAgICAga0xvIDo9IGtIaTsgCiAgICAgICAgY0xvIDo9IGNIaTsgCiAg
ICAgICAgVkxvIDo9IFZIaTsKICAgICAgICBrSGkgOj0gMiprSGk7CgljSGkgOj0gc3BsaXRQb2lu
dChrSGkpOwoJVkhpIDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCBjSGkpOwogICAgICBvZDsKICAg
ICAgd2hpbGUga0hpIC0ga0xvID4gMSBkbwogICAgICAgIGtNaSA6PSBRdW9JbnQoa0hpICsga0xv
LCAyKTsKICAgICAgICBjTWkgOj0gc3BsaXRQb2ludChrTWkpOwogICAgICAgIFZNaSA6PSBTdHVy
bVNlcXVlbmNlVmFsdWUoUywgY01pKTsKICAgICAgICBpZiB2YWxpZChWTWkpIHRoZW4KICAgICAg
ICAgIGtMbyA6PSBrTWk7CiAgICAgICAgICBjTG8gOj0gY01pOwogICAgICAgICAgVkxvIDo9IFZN
aTsKICAgICAgICBlbHNlCiAgICAgICAgICBrSGkgOj0ga01pOwogICAgICAgICAgY0hpIDo9IGNN
aTsKICAgICAgICAgIFZIaSA6PSBWTWk7CiAgICAgICAgZmk7IAogICAgICBvZDsKICAgICAgYyAg
Oj0gY0xvOwogICAgICBWYyA6PSBWTG87CiAgICBmaTsKCiAgICAjIHNwbGl0IChhLi5iKSBpbnRv
IChhLi5jKSB1bmlvbiB7Y30gdW5pb24gKGMuLmIpCiAgICBpc29sYXRlT3BlbkludGVydmFsKGEs
VmEsIGMsVmMpOwogICAgaXNvbGF0ZVNpbmdsZVBvaW50KGMsVmMpOwogICAgaXNvbGF0ZU9wZW5J
bnRlcnZhbChjLFZjLCBiLFZiKTsKICBlbmQ7CgogICMgZGVjb2RlIGFuZCBjaGVjayBhcmcKICBp
ZiBMZW5ndGgoYXJnKSA9IDEgdGhlbgogICAgUyAgIDo9IGFyZ1sxXTsKICAgIG1pbiA6PSAiLWlu
ZmluaXR5IjsKICAgIG1heCA6PSAgImluZmluaXR5IjsKICBlbGlmIExlbmd0aChhcmcpID0gMyB0
aGVuCiAgICBTICAgOj0gYXJnWzFdOwogICAgbWluIDo9IGFyZ1syXTsKICAgIG1heCA6PSBhcmdb
M107CiAgZWxzZQogICAgRXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIDEgb3IgMyBl
eHBlY3RlZCIpOwogIGZpOwogIGlmIG5vdCAoIElzUG9seW5vbWlhbChTKSBvciBJc0xpc3QoUykg
YW5kIEZvckFsbChTLCBJc1BvbHlub21pYWwpICkgdGhlbgogICAgRXJyb3IoIjxTPiBtdXN0IGJl
IGEgcmF0aW9uYWwgcG9seW5vbWlhbCBvciBhIFN0dXJtIHNlcXVlbmNlIik7CiAgZmk7CiAgaWYg
bm90ICggCiAgICAoIElzUmF0KG1pbikgb3IgbWluIGluIFsiLWluZmluaXR5IiwgImluZmluaXR5
Il0gKSBhbmQKICAgICggSXNSYXQobWF4KSBvciBtYXggaW4gWyItaW5maW5pdHkiLCAiaW5maW5p
dHkiXSApCiAgKSB0aGVuCiAgICBFcnJvcigiPG1pbj4gYW5kIDxtYXg+IG11c3QgYmUgcmF0aW9u
YWwsIFwiaW5maW5pdHlcIiwgb3IgXCItaW5maW5pdHlcIiIpOwogIGZpOwogIGlmIG5vdCBJc0xp
c3QoUykgdGhlbgogICAgUyA6PSBTdHVybVNlcXVlbmNlKFMpOwogIGZpOwogIEluZm9BcHByb3gx
KAogICAgIiNJIFJlYWxSb290SXNvbGF0aW9uU3Rlcm5Ccm9jb3QoIDxwb2x5LiBvZiBkZWdyZWUg
IiwgCiAgICAgRGVncmVlKFNbMV0pLCAKICAgICI+IClcbiIKICApOwoKICAjIHByZWNvbXB1dGUg
c29tZSBzdGFuZGFyZCB2YWx1ZXMKICBWbWluZiA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgIi1p
bmZpbml0eSIpOyAKICBWbTEgICA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICAgICAgICAgLTEp
OyAKICBWMCAgICA6PSBTdHVybVNlcXVlbmNlVmFsdWUoUywgICAgICAgICAgIDApOwogIFZwMSAg
IDo9IFN0dXJtU2VxdWVuY2VWYWx1ZShTLCAgICAgICAgICAgMSk7IAogIFZwaW5mIDo9IFN0dXJt
U2VxdWVuY2VWYWx1ZShTLCAgImluZmluaXR5Iik7IAoKICBJbmZvQXBwcm94MigiI0kgICAiKTsK
ICByb290cyA6PSBbIF07CiAgaXNvbGF0ZU9wZW5JbnRlcnZhbCgiLWluZmluaXR5IiwgVm1pbmYs
IC0xLCBWbTEpOwogIGlzb2xhdGVTaW5nbGVQb2ludCggLTEsIFZtMSk7CiAgaXNvbGF0ZU9wZW5J
bnRlcnZhbCgtMSwgVm0xLCAwLCBWMCk7CiAgaXNvbGF0ZVNpbmdsZVBvaW50KCAgMCwgVjApOwog
IGlzb2xhdGVPcGVuSW50ZXJ2YWwoIDAsIFYwLCAxLCBWcDEpOwogIGlzb2xhdGVTaW5nbGVQb2lu
dCggIDEsIFZwMSk7CiAgaXNvbGF0ZU9wZW5JbnRlcnZhbCggMSwgVnAxLCAiaW5maW5pdHkiLCBW
cGluZik7CiAgSW5mb0FwcHJveDIoIlxuIik7CgogIHJldHVybiByb290czsKZW5kOwoKCiMgSXRl
cmF0aXZlIGFwcHJveGltYXRpb24gb2YgcmVhbHMgCiMgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KCiMgQXBwcm94aW1hdGlvbkludGVybmFsCiMgICBmaWxscyB0aGUgbGlzdCBwYXRo
IHdpdGggaW5mb3JtYXRpb24gb24gdGhlIGFwcHJveGltYXRpb24gdW50aWwKIyAgIGl0IGlzIGFj
Y3VyYXRlIGVub3VnaCBhcyBzcGVjaWZpZWQgYnkgYWJzRXJyb3IuIFRoZSBmdW5jdGlvbnMKIyAg
IGx3YihhLCBiLCBrKSwgdXBiKGEsIGIsIGspIGNvbnN0cnVjdCB0aGUgay10aCBsb3dlciBhbmQg
dXBwZXIKIyAgIGJvdW5kIGluIChhLi5iKS4gSW4gcGFydGljdWxhciBsd2IoYSwgYiwgMSkgPSB1
cGIoYSwgYiwgMSkgYW5kCiMgICAgIGEgPSBsd2IoYSwgYiwgMCkgPCBsd2IoYSwgYiwgMSkgPCAu
LiAgPCBiIGFuZAojICAgICBhIDwgIC4uIDwgdXBiKGEsIGIsIDEpIDwgdXBiKGEsIGIsIDApID0g
Yi4KIyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHNpZ21hIGRpZCBub3QgcmV0dXJu
IGEgcmF0aW9uYWwKIyAgIGFuZCB0cnVlIG90aGVyd2lzZS4KCkFwcHJveGltYXRpb25JbnRlcm5h
bCA6PSBmdW5jdGlvbiAoIHNpZ21hLCBhYnNFcnJvciwgcGF0aCwgbHdiLCB1cGIgKQogIGxvY2Fs
IAogICAgYSwgeCwgYiwgICAgICAgIyBwb2ludHMKICAgIGtMbywga01pLCBrSGksICMgaW50ZWdl
cnMgdG8gZmluZCB0cmFuc2l0aW9uIHBvaW50CiAgICBzTG8sIHNNaSwgc0hpLCAjIHNpZ21hIHZh
bHVlcwogICAgcywgaTsgICAgICAgICAgIyBzaWdtYSB2YWx1ZSwgaW5kZXggaW50byBwYXRoCgog
ICMgSW5pdGlhbGl6ZSBwYXRoWzFdLCBwYXRoWzJdIHRvIGNvbnRhaW4gYSBmaW5pdGUgaW50ZXJ2
YWwKICAjCiAgaWYgTGVuZ3RoKHBhdGgpIDwgMiB0aGVuCiAgICBzIDo9IHNpZ21hKDApOyAKICAg
IGlmIG5vdCBJc1JhdChzKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICBpZiBzID0gMCB0aGVu
CiAgICAgIGEgOj0gMDsKICAgICAgYiA6PSAwOwogICAgZWxpZiBzID4gMCB0aGVuCiAgICAgIGEg
Oj0gMDsKICAgICAgYiA6PSAxOwogICAgICBzIDo9IHNpZ21hKGIpOyAKICAgICAgaWYgbm90IElz
UmF0KHMpIHRoZW4gcmV0dXJuIGZhbHNlOyBmaTsKICAgICAgd2hpbGUgcyA+IDAgZG8KICAgICAg
ICBhIDo9IGI7CiAgICAgICAgYiA6PSAyKmI7CiAgICAgICAgcyA6PSBzaWdtYShiKTsgCiAgICAg
ICAgaWYgbm90IElzUmF0KHMpIHRoZW4gcmV0dXJuIGZhbHNlOyBmaTsKICAgICAgb2Q7CiAgICAg
IGlmIHMgPSAwIHRoZW4KICAgICAgICBhIDo9IGI7CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSBi
IC0gYSA+IDEgZG8KICAgICAgICAgIHggOj0gUXVvSW50KGEgKyBiLCAyKTsKICAgICAgICAgIHMg
Oj0gc2lnbWEoeCk7IAogICAgICAgICAgaWYgbm90IElzUmF0KHMpIHRoZW4gcmV0dXJuIGZhbHNl
OyBmaTsKICAgICAgICAgIGlmIHMgPSAwIHRoZW4KICAgICAgICAgICAgYSA6PSB4OwogICAgICAg
ICAgICBiIDo9IHg7CiAgICAgICAgICBlbGlmIHMgPiAwIHRoZW4KICAgICAgICAgICAgYSA6PSB4
OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBiIDo9IHg7CiAgICAgICAgICBmaTsKICAgICAg
ICBvZDsKICAgICAgZmk7CiAgICBlbHNlCiAgICAgIGEgOj0gLTE7CiAgICAgIGIgOj0gIDA7CiAg
ICAgIHMgOj0gc2lnbWEoYSk7IAogICAgICBpZiBub3QgSXNSYXQocykgdGhlbiByZXR1cm4gZmFs
c2U7IGZpOwogICAgICB3aGlsZSBzIDwgMCBkbwogICAgICAgIGIgOj0gYTsKICAgICAgICBhIDo9
IDIqYTsKICAgICAgICBzIDo9IHNpZ21hKGEpOyAKICAgICAgICBpZiBub3QgSXNSYXQocykgdGhl
biByZXR1cm4gZmFsc2U7IGZpOwogICAgICBvZDsKICAgICAgaWYgcyA9IDAgdGhlbgogICAgICAg
IGIgOj0gYTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIGIgLSBhID4gMSBkbwogICAgICAgICAg
eCA6PSBRdW9JbnQoYSArIGIsIDIpOwogICAgICAgICAgcyA6PSBzaWdtYSh4KTsgCiAgICAgICAg
ICBpZiBub3QgSXNSYXQocykgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAgICAgICAgaWYgcyA9
IDAgdGhlbgogICAgICAgICAgICBhIDo9IHg7CiAgICAgICAgICAgIGIgOj0geDsKICAgICAgICAg
IGVsaWYgcyA+IDAgdGhlbgogICAgICAgICAgICBhIDo9IHg7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIGIgOj0geDsKICAgICAgICAgIGZpOwogICAgICAgIG9kOwogICAgICBmaTsKICAgIGZp
OwogICAgcGF0aFsxXSA6PSBhOwogICAgcGF0aFsyXSA6PSBiOwogIGZpOwoKICAjIEV4dGVuZCBw
YXRoIHRvIGNvbnRhaW4gYSBzdWZmaWNpZW50bHkgdGlnaHQgYXBwcm94aW1hdGlvbi4KICAjIFRo
ZXJlIGFyZSB0d28gdGlnaHRlbmluZyBvcGVyYXRpb25zIGZvciB4IGluIChhLi5iKToKICAjICAg
QSkgYSA6PSB4ICAgYW5kICAgQikgYiA6PSB4LgogICMgVGhlIGxpc3QgPHBhdGg+IGVuY29kZXMg
dGhlIHNlcXVlbmNlIG9mIGludGVydmFscyB0aWdodGVuaW5nCiAgIyBhcm91bmQgYyBmb3Igc2ln
bWEoYykgPSAwIGluIHRoZSBmb3JtCiAgIyAgICAgIFtwYXRoWzFdLi5wYXRoWzJdXSAKICAjICAg
Pj0gW3BhdGhbM10uLnBhdGhbMl1dIAogICMgICA+PSBbcGF0aFszXS4ucGF0aFs0XV0KICAjICAg
Pj0gLi4KICAjIFRoZSBtZXRob2QgdG8gZXh0ZW5kIHRoZSBwYXRoIGlzIHN0cmFpZ2h0IGZvcndh
cmQsIGV4Y2VwdCBmb3IKICAjIGFuIGFkZGl0aW9uYWwgaW1wcm92ZW1lbnQ6IFdlIGRvIG5vdCBz
ZWFyY2ggYnkgc3RlcHBpbmcgc2luZ2xlCiAgIyBBJ3MgYW5kIEIncyBidXQgd2UgcmF0aGVyIHNl
YXJjaCBleHBvbmVudGlhbGx5L2JpbmFyeSBmb3IgdGhlCiAgIyBuZXh0IEEvQi1jaGFuZ2UuCiAg
IwogIGkgOj0gTGVuZ3RoKHBhdGgpOwogIGlmIGkgbW9kIDIgPSAwIHRoZW4KICAgIGEgOj0gcGF0
aFtpLTFdOwogICAgYiA6PSBwYXRoW2ldOwogIGVsc2UKICAgIGEgOj0gcGF0aFtpXTsKICAgIGIg
Oj0gcGF0aFtpLTFdOwogIGZpOwogIHdoaWxlIG5vdCBiIC0gYSA8IGFic0Vycm9yIGRvCiAgICBp
ZiBpIG1vZCAyID0gMCB0aGVuCgogICAgICAjIGNvbnRpbnVlIHRvIHJhaXNlIGxvd2VyIGJvdW5k
CiAgICAgIGtMbyA6PSAxOwogICAgICBzTG8gOj0gc2lnbWEobHdiKGEsIGIsIGtMbykpOwogICAg
ICBpZiBub3QgSXNSYXQoc0xvKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICAgIGtIaSA6PSAy
OwogICAgICBzSGkgOj0gc2lnbWEobHdiKGEsIGIsIGtIaSkpOwogICAgICBpZiBub3QgSXNSYXQo
c0hpKSB0aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICAgIHdoaWxlIHNIaSA+IDAgZG8KICAgICAg
ICBrTG8gOj0ga0hpOwogICAgICAgIHNMbyA6PSBzSGk7CiAgICAgICAga0hpIDo9IDIqa0hpOwog
ICAgICAgIHNIaSA6PSBzaWdtYShsd2IoYSwgYiwga0hpKSk7CiAgICAgICAgaWYgbm90IElzUmF0
KHNIaSkgdGhlbiByZXR1cm4gZmFsc2U7IGZpOwogICAgICBvZDsKICAgICAgaWYgc0hpID0gMCB0
aGVuCiAgICAgICAga0xvIDo9IGtIaTsKICAgICAgICBzTG8gOj0gc0hpOwogICAgICBlbHNlCiAg
ICAgICAgd2hpbGUga0hpIC0ga0xvID4gMSBkbwogICAgICAgICAga01pIDo9IFF1b0ludChrSGkg
KyBrTG8sIDIpOwogICAgICAgICAgc01pIDo9IHNpZ21hKGx3YihhLCBiLCBrTWkpKTsKICAgICAg
ICAgIGlmIG5vdCBJc1JhdChzTWkpIHRoZW4gcmV0dXJuIGZhbHNlOyBmaTsKICAgICAgICAgIGlm
IHNNaSA9IDAgdGhlbgogICAgICAgICAgICBrTG8gOj0ga01pOwogICAgICAgICAgICBzTG8gOj0g
c01pOwogICAgICAgICAgICBrSGkgOj0ga01pOwogICAgICAgICAgICBzSGkgOj0gc01pOwogICAg
ICAgICAgZWxpZiBzTWkgPiAwIHRoZW4KICAgICAgICAgICAga0xvIDo9IGtNaTsKICAgICAgICAg
ICAgc0xvIDo9IHNNaTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAga0hpIDo9IGtNaTsKICAg
ICAgICAgICAgc0hpIDo9IHNNaTsKICAgICAgICAgIGZpOwogICAgICAgIG9kOwogICAgICBmaTsK
ICAgICAgeCA6PSBsd2IoYSwgYiwga0xvKTsKICAgICAgcyA6PSBzTG87CgogICAgZWxzZQoKICAg
ICAgIyBjb250aW51ZSB0byBsb3dlciB1cHBlciBib3VuZAogICAgICBrTG8gOj0gMTsKICAgICAg
c0xvIDo9IHNpZ21hKHVwYihhLCBiLCBrTG8pKTsKICAgICAgaWYgbm90IElzUmF0KHNMbykgdGhl
biByZXR1cm4gZmFsc2U7IGZpOwogICAgICBrSGkgOj0gMjsKICAgICAgc0hpIDo9IHNpZ21hKHVw
YihhLCBiLCBrSGkpKTsKICAgICAgaWYgbm90IElzUmF0KHNIaSkgdGhlbiByZXR1cm4gZmFsc2U7
IGZpOwogICAgICB3aGlsZSBzSGkgPCAwIGRvCiAgICAgICAga0xvIDo9IGtIaTsKICAgICAgICBz
TG8gOj0gc0hpOwogICAgICAgIGtIaSA6PSAyKmtIaTsKICAgICAgICBzSGkgOj0gc2lnbWEodXBi
KGEsIGIsIGtIaSkpOwogICAgICAgIGlmIG5vdCBJc1JhdChzSGkpIHRoZW4gcmV0dXJuIGZhbHNl
OyBmaTsKICAgICAgb2Q7CiAgICAgIGlmIHNIaSA9IDAgdGhlbgogICAgICAgIGtMbyA6PSBrSGk7
CiAgICAgICAgc0xvIDo9IHNIaTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIGtIaSAtIGtMbyA+
IDEgZG8KICAgICAgICAgIGtNaSA6PSBRdW9JbnQoa0hpICsga0xvLCAyKTsKICAgICAgICAgIHNN
aSA6PSBzaWdtYSh1cGIoYSwgYiwga01pKSk7CiAgICAgICAgICBpZiBub3QgSXNSYXQoc01pKSB0
aGVuIHJldHVybiBmYWxzZTsgZmk7CiAgICAgICAgICBpZiBzTWkgPSAwIHRoZW4KICAgICAgICAg
ICAga0xvIDo9IGtNaTsKICAgICAgICAgICAgc0xvIDo9IHNNaTsKICAgICAgICAgICAga0hpIDo9
IGtNaTsKICAgICAgICAgICAgc0hpIDo9IHNNaTsKICAgICAgICAgIGVsaWYgc01pIDwgMCB0aGVu
CiAgICAgICAgICAgIGtMbyA6PSBrTWk7CiAgICAgICAgICAgIHNMbyA6PSBzTWk7CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIGtIaSA6PSBrTWk7CiAgICAgICAgICAgIHNIaSA6PSBzTWk7CiAg
ICAgICAgICBmaTsKICAgICAgICBvZDsKICAgICAgZmk7CiAgICAgIHggOj0gdXBiKGEsIGIsIGtM
byk7CiAgICAgIHMgOj0gc0xvOwoKICAgIGZpOwogICAgaWYgcyA9IDAgdGhlbgogICAgICBhICAg
ICAgICAgOj0geDsKICAgICAgYiAgICAgICAgIDo9IHg7CiAgICAgIHBhdGhbaV0gICA6PSB4Owog
ICAgICBwYXRoW2krMV0gOj0geDsKICAgICAgaSAgICAgICAgIDo9IGkgKyAxOwogICAgZWxpZiBz
ID4gMCB0aGVuCiAgICAgIGEgOj0geDsKICAgICAgaWYgaSBtb2QgMiA9IDAgdGhlbgogICAgICAg
IGkgOj0gaSArIDE7CiAgICAgIGZpOwogICAgICBwYXRoW2ldIDo9IHg7CiAgICBlbHNlCiAgICAg
IGIgOj0geDsKICAgICAgaWYgaSBtb2QgMiA8PiAwIHRoZW4KICAgICAgICBpIDo9IGkgKyAxOwog
ICAgICBmaTsKICAgICAgcGF0aFtpXSA6PSB4OwogICAgZmk7CiAgb2Q7CiAgcmV0dXJuIHRydWU7
CmVuZDsKCgojRiBBcHByb3hpbWF0aW9uQmluYXJ5KCAgICAgIDxzaWdtYT4sIDxhYnNFcnJvcj4g
WywgPHBhdGg+XSApCiNGIEFwcHJveGltYXRpb25TdGVybkJyb2NvdCggPHNpZ21hPiwgPGFic0Vy
cm9yPiBbLCA8cGF0aD5dICkKI0YgICByZXR1cm5zIGEgcGFpciBbYSwgYl0gc3VjaCB0aGF0IAoj
RiAgICAgYSA8PSBjIDw9IGIgICBhbmQgICBiIC0gYSA8IGFic0Vycm9yCiNGICAgZm9yIGEgcmF0
aW9uYWwgZXJyb3IgYm91bmQgYWJzRXJyb3IgPiAwIGFuZCBhIHJlYWwgbnVtYmVyIGMKI0YgICB3
aGljaCBpcyBkZWZpbmVkIGJ5IHRoZSBmdW5jdGlvbiBzaWdtYTogUmF0aW9uYWxzIC0+IFJhdGlv
bmFscy4gCiNGICAgVGhlIGZ1bmN0aW9uIHNpZ21hIHNhdGlzZmllcyAKI0YgICAgIHNpZ24gc2ln
bWEoeCkgPSBzaWduIChjIC0geCkgZm9yIGFsbCByYXRpb25hbCB4LgojRiAgIElmIHNpZ21hIGRv
ZXMgbm90IHJldHVybiBhIFJhdGlvbmFsIHRoZW4gdGhlIGZ1bmN0aW9uIGlzCiNGICAgYWJvcnRl
ZCBpbW1lZGlhdGVseSByZXR1cm5pbmcgZmFsc2UuIChUaGlzIGZlYXR1cmUgYWxsb3dzIGEgCiNG
ICAgcGFydGlhbGx5IGRlZmluZWQgc2lnbWEgdG8gYmUgdXNlZCB3aXRob3V0IG1lc3NpbmcgdXAg
cGF0aC4pCiNGICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHBhdGggaXMgYSBsaXN0IHdoaWNoIGlz
IG1vZGlmaWVkIGluIG9yZGVyCiNGICAgdG8gY29udGFpbiB0aGUgYXBwcm94aW1hdGlvbnMgY29t
cHV0ZWQgc28gZmFyLiAoSW4gZmFjdCwgaXQgaXMKI0YgICBzb21lIGtpbmQgb2YgcnVuIGxlbmd0
aCBlbmNvZGluZyBmb3IgdGhlIHBhdGggb2YgaW50ZXJ2YWxzIAojRiAgIGVuY2xvc2luZyB0aGUg
bnVtYmVyIGMuKQojRiAgICAgIFRoZSB0d28gdmFyaWFudHMgb2YgdGhlIGFwcHJveGltYXRpb24g
ZnVuY3Rpb24gZGlmZmVyIGluIHRoZSAKI0YgICB3YXkgdGhleSBlbnVtZXJhdGUgdGhlIHJhdGlv
bmFsIG51bWJlcnMuIEJvdGggc3RhcnQgYXQgKGsuLmsrMSkgZm9yCiNGICAgaW50ZWdlciBrIGFu
ZCBzcGxpdCBhbiBpbnRlcnZhbCAoYS4uYikgaW50byAoYS4uYyksIHtjfSwgKGMuLmIpLgojRiAg
IFRoZSBjaG9pY2Ugb2YgdGhlIGlubmVyIHBvaW50IGlzCiNGICAgICBCaW5hcnkgICAgICAgIGMg
PSAoYSArIGIpLzIsIGFuZAojRiAgICAgU3Rlcm4tQnJvY290ICBjID0gKE4oYSkgKyBOKGIpKS8o
RChhKSArIEQoYikpIAojRiAgIHdoZXJlIE46IG51bWVyYXRvciwgRDogZGVub21pbmF0b3IuIFRo
ZSBtZXRob2RzIHJldHVybiBiZXN0IGJpbmFyeQojRiAgIGZyYWN0aW9ucyAoQmluYXJ5KSBhbmQg
YmVzdCByYXRpb25hbCBhcHByb3hpbWF0aW9ucyAoU3Rlcm4tQnJvY290KQojRiAgIHJlc3BlY3Rp
dmVseS4KI0YKCkFwcHJveGltYXRpb25CaW5hcnkgOj0gZnVuY3Rpb24gKCBhcmcgKQogIGxvY2Fs
IAogICAgc2lnbWEsIGFic0Vycm9yLCBwYXRoLCAgICMgY29tcGxldGVkIGFyZ3VtZW50IGxpc3QK
ICAgIGEsIGIsIHgsIGEwLCBiMCwgYW0sIGJtLCAjIHBvaW50cwogICAgbSwgaywgICAgICAgICAg
ICAgICAgICAgICMgaW50ZWdlcnMgZGVub3RpbmcgaW50ZXJtZWRpYXRlIHBvaW50cwogICAgbG8s
IG1pLCBoaSwgICAgICAgICAgICAgICMgaW5kaWNlcyB0byBmaW5kIGkgaW4gcGF0aAogICAgcywg
aSwgSzsgICAgICAgICAgICAgICAgICMgc2lnbWEgdmFsdWUsIGluZGV4IGludG8gcGF0aCwgaW50
ZXJtZWRpYXRlCgogICMgZGVjb2RlIGFuZCB0eXBlIGNoZWNrIGFyZ3VtZW50IGxpc3QgCiAgaWYg
TGVuZ3RoKGFyZykgPSAyIHRoZW4KICAgIHNpZ21hICAgIDo9IGFyZ1sxXTsKICAgIGFic0Vycm9y
IDo9IGFyZ1syXTsKICAgIHBhdGggICAgIDo9IFsgXTsKICBlbGlmIExlbmd0aChhcmcpID0gMyB0
aGVuCiAgICBzaWdtYSAgICA6PSBhcmdbMV07CiAgICBhYnNFcnJvciA6PSBhcmdbMl07CiAgICBw
YXRoICAgICA6PSBhcmdbM107CiAgZWxzZQogICAgRXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1
bWVudHMsIDIgb3IgMyBleHBlY3RlZCIpOwogIGZpOwogIGlmIG5vdCAoIAogICAgSXNGdW5jKHNp
Z21hKSBhbmQgCiAgICBJc1JhdChhYnNFcnJvcikgYW5kIGFic0Vycm9yID4gMCBhbmQKICAgIElz
TGlzdChwYXRoKQogICkgdGhlbgogICAgRXJyb3IoIndyb25nIGFyZ3VtZW50cyA8c2lnbWE+LCA8
YWJzRXJyb3I+LCA8cGF0aD4iKTsKICBmaTsKCiAgIyBwYXRoWzFdIGNvbnRhaW5zIHRoZSBpbmZv
cm1hdGlvbiBzdG9yZWQgZm9yIEFwcHJveGltYXRpb25CaW5hcnk7CiAgIyByZW5hbWUgcGF0aFsx
XSBpbnRvIHBhdGgKCiAgaWYgbm90IElzQm91bmQocGF0aFsxXSkgdGhlbgogICAgcGF0aFsxXSA6
PSBbIF07CiAgZmk7CiAgcGF0aCA6PSBwYXRoWzFdOwoKICAjIGZpbGwgcGF0aCBzdWZmaWNpZW50
bHkKICBpZiAKICAgIEFwcHJveGltYXRpb25JbnRlcm5hbCgKICAgICAgc2lnbWEsIGFic0Vycm9y
LCBwYXRoLCAKICAgICAgZnVuY3Rpb24gKGEsIGIsIGspCglyZXR1cm4gKGEgKyAoMl5rIC0gMSkq
YikvMl5rOwogICAgICBlbmQsCiAgICAgIGZ1bmN0aW9uIChhLCBiLCBrKQoJcmV0dXJuICgoMl5r
IC0gMSkqYSArIGIpLzJeazsKICAgICAgZW5kCiAgICApID0gZmFsc2UKICB0aGVuCiAgICByZXR1
cm4gZmFsc2U7CiAgZmk7CgogICMgR2V0IHRoZSBlYXNpZXN0IGFwcHJveGltYXRpb24gYmV0dGVy
IHRoYW4gYWJzRXJyb3IgZnJvbSBwYXRoLgogICMgV2UgZmlyc3QgZmluZCB0aGUgbGVhc3QgaSB3
aGVyZSB8cGF0aFtpKzFdLXBhdGhbaV18IDwgYWJzRXJyb3IuCiAgIyBUaGVuIHdlIGV4cGFuZCB0
aGUgaW50ZXJ2YWwgd2hpbGUgaXQgaXMgbm90IHRvbyBsYXJnZS4KCiAgbG8gOj0gMTsKICBoaSA6
PSBMZW5ndGgocGF0aCktMTsKICB3aGlsZSBoaSAtIGxvID4gMSBkbwogICAgbWkgOj0gUXVvSW50
KGhpICsgbG8sIDIpOwogICAgaWYgQWJzSW50KHBhdGhbbWkrMV0gLSBwYXRoW21pXSkgPCBhYnNF
cnJvciB0aGVuCiAgICAgIGhpIDo9IG1pOwogICAgZWxzZQogICAgICBsbyA6PSBtaTsKICAgIGZp
OwogIG9kOwogIGkgOj0gaGk7CiAgaWYgaSA9IDEgdGhlbgoKICAgICMganVzdCB0YWtlIHRoZSBm
aXJzdCBpbnRlcnZhbAogICAgYSA6PSBwYXRoW2ldOwogICAgYiA6PSBwYXRoW2krMV07CgogIGVs
aWYgaSBtb2QgMiA9IDAgdGhlbgoKICAgICMgZGVjcmVhc2UgbG93ZXIgYm91bmQgb2YgKHBhdGhb
aSsxXS4ucGF0aFtpXSkKICAgICMgQ29uc2lkZXIgYV8wIDwgYV8xIDwgLi4gPCBhX20gPCBiIGZv
ciBzb21lIG0gPiAwCiAgICAjIHdoZXJlIGFfayA6PSAyXi1rIGFfMCArICgxIC0gMl4taykgYi4K
ICAgICMgVGhpcyBpbXBsaWVzCiAgICAjICAgbSAgICAgICA9IExvZygoYV8wIC0gYikvKGFfbSAt
IGIpLCAyKSBhbmQKICAgICMgICBiIC0gYV9rID0gKGIgLSBhXzApKjJeLWsgPCBhYnNFcnJvciA8
PT0+IDJeayA+IChiIC0gYV8wKS9hYnNFcnJvci4KCiAgICBhMCA6PSBwYXRoW2ktMV07CiAgICBh
bSA6PSBwYXRoW2krMV07CiAgICBiICA6PSBwYXRoW2ldOwoKICAgIGlmIGFtID0gYiB0aGVuCiAg
ICAgIGEgOj0gYW07ICMgYSA9IGIKICAgIGVsc2UKICAgICAgbSAgOj0gTG9nSW50KChhMCAtIGIp
LyhhbSAtIGIpLCAyKTsKICAgICAgSyAgOj0gKGIgLSBhMCkvYWJzRXJyb3I7CiAgICAgIGlmIEsg
PD0gMSB0aGVuCglrIDo9IDA7CiAgICAgIGVsc2UKCWsgOj0gTG9nSW50KFF1b0ludChOdW1lcmF0
b3IoSyksIERlbm9taW5hdG9yKEspKSwgMik7Cgl3aGlsZSBub3QgMl5rID4gSyBkbwoJICBrIDo9
IGsgKyAxOwoJb2Q7CiAgICAgIGZpOwogICAgICBrIDo9IE1pbmltdW0oaywgbSk7CiAgICAgIGEg
Oj0gKGEwICsgKDJeayAtIDEpKmIpLzJeazsKICAgIGZpOwogCiAgZWxzZQoKICAgICMgaW5jcmVh
c2UgdXBwZXIgYm91bmQgb2YgKHBhdGhbaV0uLnBhdGhbaSsxXSkKICAgICMgQ29uc2lkZXIgYSA8
IGJfbSA8IC4uIDwgYl8xIDwgYl8wIGZvciBzb21lIG0gPiAwCiAgICAjIHdoZXJlIGJfayA6PSAo
MSAtIDJeLWspIGEgKyAyXi1rIGJfMC4KICAgICMgVGhpcyBpbXBsaWVzCiAgICAjICAgbSAgICAg
ICA9IExvZygoYSAtIGJfMCkvKGEgLSBiX20pLCAyKSBhbmQKICAgICMgICBiX2sgLSBhID0gKGEg
LSBiXzApKjJeLWsgPCBhYnNFcnJvciA8PT0+IDJeayA+IChhIC0gYl8wKS9hYnNFcnJvci4KCiAg
ICBhICA6PSBwYXRoW2ldOwogICAgYm0gOj0gcGF0aFtpKzFdOwogICAgYjAgOj0gcGF0aFtpLTFd
OwoKICAgIGlmIGEgPSBibSB0aGVuCiAgICAgIGIgOj0gYm07ICMgYSA9IGIKICAgIGVsc2UKICAg
ICAgbSAgOj0gTG9nSW50KChhIC0gYjApLyhhIC0gYm0pLCAyKTsKICAgICAgSyAgOj0gKGEgLSBi
MCkvYWJzRXJyb3I7CiAgICAgIGlmIEsgPD0gMSB0aGVuCglrIDo9IDA7CiAgICAgIGVsc2UKCWsg
Oj0gTG9nSW50KFF1b0ludChOdW1lcmF0b3IoSyksIERlbm9taW5hdG9yKEspKSwgMik7Cgl3aGls
ZSBub3QgMl5rID4gSyBkbwoJICBrIDo9IGsgKyAxOwoJb2Q7CiAgICAgIGZpOwogICAgICBrIDo9
IE1pbmltdW0oaywgbSk7CiAgICAgIGIgOj0gKCgyXmsgLSAxKSphICsgYjApLzJeazsKICAgIGZp
OwoKICBmaTsKICByZXR1cm4gW2EsIGJdOwplbmQ7CgoKQXBwcm94aW1hdGlvblN0ZXJuQnJvY290
IDo9IGZ1bmN0aW9uICggYXJnICkKICBsb2NhbCAKICAgIHNpZ21hLCBhYnNFcnJvciwgcGF0aCwg
ICAjIGNvbXBsZXRlZCBhcmd1bWVudCBsaXN0CiAgICBhLCBiLCB4LCBhMCwgYjAsIGFtLCBibSwg
IyBwb2ludHMKICAgIG0sIGssICAgICAgICAgICAgICAgICAgICAjIGludGVnZXJzIGRlbm90aW5n
IGludGVybWVkaWF0ZSBwb2ludHMKICAgIGxvLCBtaSwgaGksICAgICAgICAgICAgICAjIGluZGlj
ZXMgdG8gZmluZCBpIGluIHBhdGgKICAgIHMsIGksICAgICAgICAgICAgICAgICAgICAjIHNpZ21h
IHZhbHVlLCBpbmRleCBpbnRvIHBhdGgsIGludGVybWVkaWF0ZQogICAgTiwgRDsgICAgICAgICAg
ICAgICAgICAgICMgTnVtZXJhdG9yLCBEZW5vbWluYXRvciBmb3IgYWJicmV2aWF0aW9uCgogICMg
ZGVjb2RlIGFuZCB0eXBlIGNoZWNrIGFyZ3VtZW50IGxpc3QgCiAgaWYgTGVuZ3RoKGFyZykgPSAy
IHRoZW4KICAgIHNpZ21hICAgIDo9IGFyZ1sxXTsKICAgIGFic0Vycm9yIDo9IGFyZ1syXTsKICAg
IHBhdGggICAgIDo9IFsgXTsKICBlbGlmIExlbmd0aChhcmcpID0gMyB0aGVuCiAgICBzaWdtYSAg
ICA6PSBhcmdbMV07CiAgICBhYnNFcnJvciA6PSBhcmdbMl07CiAgICBwYXRoICAgICA6PSBhcmdb
M107CiAgZWxzZQogICAgRXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIDIgb3IgMyBl
eHBlY3RlZCIpOwogIGZpOwogIGlmIG5vdCAoIAogICAgSXNGdW5jKHNpZ21hKSBhbmQgCiAgICBJ
c1JhdChhYnNFcnJvcikgYW5kIGFic0Vycm9yID4gMCBhbmQKICAgIElzTGlzdChwYXRoKQogICkg
dGhlbgogICAgRXJyb3IoIndyb25nIGFyZ3VtZW50cyA8c2lnbWE+LCA8YWJzRXJyb3I+LCA8cGF0
aD4iKTsKICBmaTsKCiAgIyBwYXRoWzJdIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBzdG9yZWQg
Zm9yIEFwcHJveGltYXRpb25TdGVybkJyb2NvdDsKICAjIHJlbmFtZSBwYXRoWzJdIGludG8gcGF0
aAoKICBpZiBub3QgSXNCb3VuZChwYXRoWzJdKSB0aGVuCiAgICBwYXRoWzJdIDo9IFsgXTsKICBm
aTsKICBwYXRoIDo9IHBhdGhbMl07CgogICMgZmlsbCBwYXRoIHN1ZmZpY2llbnRseQogIGlmCiAg
ICBBcHByb3hpbWF0aW9uSW50ZXJuYWwoCiAgICAgIHNpZ21hLCBhYnNFcnJvciwgcGF0aCwgCiAg
ICAgIGZ1bmN0aW9uIChhLCBiLCBrKQoJcmV0dXJuIAoJICAoICAgTnVtZXJhdG9yKGEpICsgayog
IE51bWVyYXRvcihiKSApLwoJICAoIERlbm9taW5hdG9yKGEpICsgaypEZW5vbWluYXRvcihiKSAp
OwogICAgICBlbmQsCiAgICAgIGZ1bmN0aW9uIChhLCBiLCBrKQoJcmV0dXJuIAoJICAoIGsqICAg
TnVtZXJhdG9yKGEpICsgICBOdW1lcmF0b3IoYikgKS8KCSAgKCBrKkRlbm9taW5hdG9yKGEpICsg
RGVub21pbmF0b3IoYikgKTsKICAgICAgZW5kCiAgICApID0gZmFsc2UKICB0aGVuCiAgICByZXR1
cm4gZmFsc2U7CiAgZmk7CgogICMgR2V0IHRoZSBlYXNpZXN0IGFwcHJveGltYXRpb24gYmV0dGVy
IHRoYW4gYWJzRXJyb3IgZnJvbSBwYXRoLgogICMgV2UgZmlyc3QgZmluZCB0aGUgbGVhc3QgaSB3
aGVyZSB8cGF0aFtpKzFdLXBhdGhbaV18IDwgYWJzRXJyb3IuCiAgIyBUaGVuIHdlIGV4cGFuZCB0
aGUgaW50ZXJ2YWwgd2hpbGUgaXQgaXMgbm90IHRvbyBsYXJnZS4KCiAgTiA6PSBOdW1lcmF0b3I7
CiAgRCA6PSBEZW5vbWluYXRvcjsKCiAgbG8gOj0gMTsKICBoaSA6PSBMZW5ndGgocGF0aCktMTsK
ICB3aGlsZSBoaSAtIGxvID4gMSBkbwogICAgbWkgOj0gUXVvSW50KGhpICsgbG8sIDIpOwogICAg
aWYgQWJzSW50KHBhdGhbbWkrMV0gLSBwYXRoW21pXSkgPCBhYnNFcnJvciB0aGVuCiAgICAgIGhp
IDo9IG1pOwogICAgZWxzZQogICAgICBsbyA6PSBtaTsKICAgIGZpOwogIG9kOwogIGkgOj0gaGk7
CiAgaWYgaSA9IDEgdGhlbgoKICAgICMganVzdCB0YWtlIHRoZSBmaXJzdCBpbnRlcnZhbAogICAg
YSA6PSBwYXRoW2ldOwogICAgYiA6PSBwYXRoW2krMV07CgogIGVsaWYgaSBtb2QgMiA9IDAgdGhl
bgoKICAgICMgZGVjcmVhc2UgbG93ZXIgYm91bmQgb2YgKHBhdGhbaSsxXS4ucGF0aFtpXSkKICAg
ICMgQ29uc2lkZXIgYV8wIDwgYV8xIDwgLi4gPCBhX20gPCBiIGZvciBzb21lIG0gPiAwCiAgICAj
IHdoZXJlIGFfayA6PSAoTihhXzApICsgayBOKGIpKS8oRChhXzApICsgayBEKGIpKS4KICAgICMg
VGhpcyBpbXBsaWVzCiAgICAjICAgbSA9IEQoYV8wKS9EKGIpICogKGFfbSAtIGEwKS8oYiAtIGFf
bSkKICAgICMgYW5kCiAgICAjICAgYiAtIGFfayA9IChiIC0gYTApLygxICsgayBEKGIpL0QoYV8w
KSkgPCBhYnNFcnJvcgogICAgIyAgIDw9PT4gayA+IEQoYV8wKS9EKGIpICogKChiIC0gYTApL2Fi
c0Vycm9yIC0gMSkuCiAKICAgIGEwIDo9IHBhdGhbaS0xXTsKICAgIGFtIDo9IHBhdGhbaSsxXTsK
ICAgIGIgIDo9IHBhdGhbaV07CiAgICBpZiBhbSA9IGIgdGhlbgogICAgICByZXR1cm4gW2FtLCBi
XTsgIyBhID0gYgogICAgZWxzZQogICAgICBtICA6PSBEKGEwKS9EKGIpICogKGFtIC0gYTApLyhi
IC0gYW0pOwogICAgICBrICA6PSBDZWlsaW5nUmF0KEQoYTApL0QoYikgKiAoKGIgLSBhMCkvYWJz
RXJyb3IgLSAxKSk7CiAgICAgIGsgIDo9IE1pbmltdW0oTWF4aW11bSgwLCBrKSwgbSk7CiAgICAg
IGEgIDo9IChOKGEwKSArIGsqTihiKSkvKEQoYTApICsgaypEKGIpKTsKICAgIGZpOwogCiAgZWxz
ZQoKICAgICMgaW5jcmVhc2UgdXBwZXIgYm91bmQgb2YgKHBhdGhbaV0uLnBhdGhbaSsxXSkKICAg
ICMgQ29uc2lkZXIgYSA8IGJfbSA8IC4uIDwgYl8xIDwgYl8wIGZvciBzb21lIG0gPiAwCiAgICAj
IHdoZXJlIGJfayA6PSAoayBOKGEpICsgTihiXzApKS8oayBEKGEpICsgRChiXzApKS4KICAgICMg
VGhpcyBpbXBsaWVzCiAgICAjICAgbSA9IEQoYl8wKS9EKGEpICogKGJfMCAtIGJfbSkvKGJfbSAt
IGEpCiAgICAjIGFuZAogICAgIyAgIGJfayAtIGEgPSAoYjAgLSBhKS8oMSArIGsgRChhKS9EKGJf
MCkpIDwgYWJzRXJyb3IKICAgICMgICA8PT0+IGsgPiBEKGJfMCkvRChhKSAqICgoYl8wIC0gYSkv
YWJzRXJyb3IgLSAxKS4KIAogICAgYSAgOj0gcGF0aFtpXTsKICAgIGJtIDo9IHBhdGhbaSsxXTsK
ICAgIGIwIDo9IHBhdGhbaS0xXTsKICAgIGlmIGEgPSBibSB0aGVuCiAgICAgIHJldHVybiBbYSwg
Ym1dOyAjIGEgPSBiCiAgICBlbHNlCiAgICAgIG0gIDo9IEQoYjApL0QoYSkgKiAoYjAgLSBibSkv
KGJtIC0gYSk7CiAgICAgIGsgIDo9IENlaWxpbmdSYXQoRChiMCkvRChhKSAqICgoYjAgLSBhKS9h
YnNFcnJvciAtIDEpKTsKICAgICAgayAgOj0gTWluaW11bShNYXhpbXVtKDAsIGspLCBtKTsKICAg
ICAgYiAgOj0gKGsqTihhKSArIE4oYjApKS8oaypEKGEpICsgRChiMCkpOwogICAgZmk7CgogIGZp
OwogIHJldHVybiBbYSwgYl07CmVuZDsKCgojIEFwcHJveGltYXRpb24gb2YgY3ljbG90b21pY3MK
IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIEFwcHJveENvc1BpKCA8eD4sIDxhYnNF
cnJvcj4gKQojICAgcmV0dXJucyBhIHBhaXIgW2EsIGJdIG9mIHJhdGlvbmFscyBzdWNoIHRoYXQK
IyAgICAgYSA8PSBjb3MocGkgeCkgPD0gYiBhbmQgYiAtIGEgPCBhYnNFcnJvcgojICAgZm9yIHJh
dGlvbmFscyB4IGFuZCBhYnNFcnJvciA+IDAuIFRoZSBhcHByb3hpbWF0aW9uCiMgICBpcyBwZXJm
b3JtZWQgYnkgQXBwcm94aW1hdGlvblN0ZXJuQnJvY290KCkuCiMKCmlmIG5vdCBJc0JvdW5kKEFw
cHJveENvc1BpVGFibGUpIHRoZW4KICBBcHByb3hDb3NQaVRhYmxlIDo9IFsgXTsKZmk7CgpBcHBy
b3hDb3NQaSA6PSBmdW5jdGlvbiAoIHgsIGFic0Vycm9yICkKICBsb2NhbCAKICAgIGssIG4sICAg
ICAgICAgICAgICAjIGNvcyhwaSB4KSA9IGNvcygyIHBpIGsvbikKICAgIGYsIGFiLCBzaWduLCBw
YXRoLCAjIGFwcHJveGltYXRpb24gZGF0YQogICAgaWssICAgICAgICAgICAgICAgICMgUG9zaXRp
b24oUHJpbWVSZXNpZHVlcyhuKSwgaykKICAgIFNmLCAgICAgICAgICAgICAgICAjIFN0dXJtIHNl
cXVlbmNlIGZvciBmCiAgICBSZiwgICAgICAgICAgICAgICAgIyBpc29sYXRpb24gaW50ZXJ2YWxz
IFthLCBiXSBvZiByZWFsIHJvb3RzIG9mIGYKICAgIGFicywgICAgICAgICAgICAgICAjIFJmIGNv
cGllZCBhbmQgYXJyYW5nZWQgYXMgZm9yIFByaW1lUmVzaWR1ZXMKICAgIHNpZ25zLCAgICAgICAg
ICAgICAjIHZhbHVlIG9mIGYgYXQgYSBmb3IgdGhlIFthLCBiXSBpbiBhYnMKICAgIHBhdGhzOyAg
ICAgICAgICAgICAjIHRoZSBsaXN0cyB3aGljaCB3aWxsIGNvbnRhaW4gYXBwcm94aW1hdGlvbnMK
CiAgIyBjaGVjayBhcmd1bWVudHMKICBpZiBub3QgKCBJc1JhdCh4KSBhbmQgSXNSYXQoYWJzRXJy
b3IpIGFuZCBhYnNFcnJvciA+IDAgKSB0aGVuCiAgICBFcnJvcigiPHg+IG11c3QgYmUgYSByYXRp
b25hbCwgPGFic0Vycm9yPiBwb3NpdGl2ZSByYXRpb25hbCIpOwogIGZpOwoKICAjIGNvcyhwaSB4
KSA9IGNvcygyIHBpIGsvbikgd2hlcmUgMCA8PSBrIDwgbiBhcmUgcmVsYXRpdmVseSBwcmltZQog
IGsgOj0gTnVtZXJhdG9yKHgvMikgbW9kIERlbm9taW5hdG9yKHgvMik7ICMgMCA8PSBrIDwgbgog
IG4gOj0gRGVub21pbmF0b3IoeC8yKTsKIAogICMgcHJvdmlkZSBBcHByb3hDb3NQaVRhYmxlW25d
ID0gWyBGLCBhYnMsIHNpZ25zLCBwYXRocyBdIHdoZXJlIAogICMgICBGICAgICAgICBpcyB0aGUg
Y29lZmZpY2llbnQgbGlzdCBvZiB0aGUgbWluaW1hbCBwb2x5bm9taWFsIAogICMgICAgICAgICAg
ICBvZiB0aGUgY29zKDIgcGkgay9uKQogICMgICBhYnNbaV0gICA9IFthX2ksIGJfaV0gc3VjaCB0
aGF0IGFfaSA8PSBjb3MoMiBwaSBSX2kvbikgPD0gYl9pCiAgIyAgICAgICAgICAgIGZvciB0aGUg
UiA9IFByaW1lUmVzaWR1ZXMobikKICAjICAgc2lnbnNbaV0gPSBTaWduSW50KFZhbHVlKEYsIGFf
aSkpCiAgIyAgIHBhdGhbaV0gIGlzIGEgbGlzdCByZWNvcmRpbmcgdGhlIGFwcHJveGltYXRpb24g
Zm9yIGNvcygyIHBpIFJfaS9uKQogIGlmIG5vdCBJc0JvdW5kKEFwcHJveENvc1BpVGFibGVbbl0p
IHRoZW4KCiAgICBJbmZvQXBwcm94MSgiI0kgY29tcHV0aW5nIEFwcHJveENvc1BpVGFibGVbIiwg
biwgIl1cbiIpOwogICAgaWYgbiA9IDEgdGhlbgogICAgICBBcHByb3hDb3NQaVRhYmxlW25dIDo9
IFsgWy0xLCAxXSwgWyBbIDEsIDFdIF0sIFsgMCBdLCBbIFtdIF0gXTsKICAgIGVsaWYgbiA9IDIg
dGhlbgogICAgICBBcHByb3hDb3NQaVRhYmxlW25dIDo9IFsgWyAxLCAxXSwgWyBbLTEsLTFdIF0s
IFsgMCBdLCBbIFtdIF0gXTsKICAgIGVsc2UKICAgICAgZiAgICAgOj0gUG9seW5vbWlhbChSYXRp
b25hbHMsIE1pblBvbCgoRShuKSArIEUobileLTEpLzIpKTsKICAgICAgU2YgICAgOj0gU3R1cm1T
ZXF1ZW5jZShmKTsKICAgICAgZiAgICAgOj0gU2ZbMV07ICMgKG5vIGRlbm9taW5hdG9ycykKICAg
ICAgUmYgICAgOj0gUmVhbFJvb3RJc29sYXRpb25TdGVybkJyb2NvdChTZiwgLTEsIDEpOwogICAg
ICBhYnMgICA6PSBDb25jYXRlbmF0aW9uKFJldmVyc2VkKFJmKSwgUmYpOwogICAgICBzaWducyA6
PSBMaXN0KGFicywgYWIgLT4gU2lnbkludChWYWx1ZShTZlsxXSwgYWJbMV0pKSk7CiAgICAgIHBh
dGhzIDo9IExpc3QoWzEuLkxlbmd0aChSZildLCBpIC0+IFsgXSk7CiAgICAgIHBhdGhzIDo9IENv
bmNhdGVuYXRpb24oUmV2ZXJzZWQocGF0aHMpLCBwYXRocyk7CiAgICAgIGlmIExlbmd0aChhYnMp
IDw+IFBoaShuKSB0aGVuCiAgICAgICAgRXJyb3IoImludGVybmFsOiB8YWJzfCA8PiBQaGkobiki
KTsKICAgICAgZmk7CiAgICAgIEFwcHJveENvc1BpVGFibGVbbl0gOj0gCiAgICAgICAgWyBDb25j
YXRlbmF0aW9uKExpc3QoWzEuLmYudmFsdWF0aW9uXSwgaSAtPiAwKSwgZi5jb2VmZmljaWVudHMp
LAogICAgICAgICAgYWJzLAogICAgICAgICAgc2lnbnMsCiAgICAgICAgICBwYXRocwogICAgICAg
IF07CiAgICBmaTsgICAgCiAgZmk7CgogICMgZ2V0IGFwcHJveGltYXRpb24gZGF0YSBmcm9tIEFw
cHJveENvc1BpVGFibGVbbl0KICBpayAgIDo9IFBvc2l0aW9uKFByaW1lUmVzaWR1ZXMobiksIGsp
OwogIGYgICAgOj0gUG9seW5vbWlhbChSYXRpb25hbHMsIEFwcHJveENvc1BpVGFibGVbbl1bMV0p
OwogIGFiICAgOj0gQXBwcm94Q29zUGlUYWJsZVtuXVsyXVtpa107CiAgc2lnbiA6PSBBcHByb3hD
b3NQaVRhYmxlW25dWzNdW2lrXTsKICBwYXRoIDo9IEFwcHJveENvc1BpVGFibGVbbl1bNF1baWtd
OwoKICAjIGNvbXB1dGUgdGhlIGFwcHJveGltYXRpb24KICByZXR1cm4KICAgIEFwcHJveGltYXRp
b25TdGVybkJyb2NvdCgKICAgICAgZnVuY3Rpb24gKCB4ICkKICAgICAgICBpZiAgIHggPCBhYlsx
XSB0aGVuIHJldHVybiAgMTsKICAgICAgICBlbGlmIHggPiBhYlsyXSB0aGVuIHJldHVybiAtMTsK
ICAgICAgICBlbGlmIHNpZ24gPj0gMCB0aGVuIHJldHVybiAgVmFsdWUoZiwgeCk7IAogICAgICAg
IGVsc2UgICAgICAgICAgICAgICAgcmV0dXJuIC1WYWx1ZShmLCB4KTsKICAgICAgICBmaTsKICAg
ICAgZW5kLAogICAgICBhYnNFcnJvciwKICAgICAgcGF0aAogICAgKTsKZW5kOwoKCiNGIEFwcHJv
eFJlQ3ljU2ltcGxlKCAgICAgPHo+LCA8YWJzRXJyb3I+KQojRiBBcHByb3hSZUN5Y0JpbmFyeSgg
ICAgIDx6PiwgPGFic0Vycm9yPikKI0YgQXBwcm94UmVDeWNTdGVybkJyb2NvdCg8ej4sIDxhYnNF
cnJvcj4pCiNGICAgcmV0dXJuIGEgcGFpciBbYSwgYl0gb2YgcmF0aW9uYWxzIHN1Y2ggdGhhdCAK
I0YgICAgIGEgPD0gUmUoeikgPD0gYiBhbmQgYiAtIGEgPCBhYnNFcnJvcgojRiAgIGZvciBhIGN5
Y2xvdG9taWMgZWxlbWVudCB6IGFuZCBhIHBvc2l0aXZlIHJhdGlvbmFsCiNGICAgZXJyb3IgYm91
bmQgYWJzRXJyb3IuIFRoZSB0aHJlZSBmdW5jdGlvbnMgZGlmZmVyIGluIAojRiAgIHRoZSB3YXkg
dGhleSBhcHByb3hpbWF0ZS4KI0YgICAgIFNpbXBsZSAgICAgIDogYmluYXJ5IGZyYWN0aW9ucywg
bm90IG5lY2Vzc2FybHkgZ29vZCBvbmVzCiNGICAgICBCaW5hcnkgICAgICA6IGJlc3QgYmluYXJ5
IGZyYWN0aW9ucyAobi8yXmssIGsgPSBtaW4uKQojRiAgICAgU3Rlcm5Ccm9jb3QgOiBiZXN0IHJh
dGlvbmFsIGFwcHJveGltYXRpb24gKG4vZCwgZCA9IG1pbi4pCiNGCgpBcHByb3hSZUN5Y1NpbXBs
ZSA6PSBmdW5jdGlvbiAoIHosIGFic0Vycm9yICkKICBsb2NhbAogICAgeCwgICAgICAgICAgICAg
IyB0aGUgcmVhbCBwYXJ0IG9mIHoKICAgIG4sICAgICAgICAgICAgICMgY3ljbG90b21pYyBvcmRl
ciBvZiBDRiBjb250YWluaW5nIHgKICAgIGMsICAgICAgICAgICAgICMgY29lZmZpY2llbnQgbGlz
dCBvZiB4CiAgICBOLCAgICAgICAgICAgICAjIG51bWJlciBvZiBub24temVybyBjb2VmZmljaWVu
dHMgaW4gYwogICAgciwgUiwgICAgICAgICAgIyBiaW5hcnkgcHJlY2lzaW9uLCAyXnIgPiBSCiAg
ICBhYjAsIGFiMSwgQUIyLCAjIGludGVybWVkaWF0ZSBib3VuZHMKICAgIGFiLCAgICAgICAgICAg
ICMgdGhlIHJlc3VsdAogICAgaywgICAgICAgICAgICAgIyBhIHByaW1lIHJlc2lkdWUgZm9yIG4K
ICAgIGVyciwgZXJyMTsgICAgICMgaW50ZXJtZWRpYXRlIGVycm9yIGJvdW5kcwoKICAjIGNoZWNr
IGFyZ3VtZW50cwogIGlmIG5vdCAoIElzQ3ljKHopIGFuZCBJc1JhdChhYnNFcnJvcikgYW5kIGFi
c0Vycm9yID4gMCApIHRoZW4KICAgIEVycm9yKCI8ej4gbXVzdCBiZSBjeWMsIDxhYnNFcnJvcj4g
cG9zaXRpdmUgcmF0aW9uYWwiKTsKICBmaTsKCiAgIyBjYXRjaCB0aGUgcmF0aW9uYWwgY2FzZQog
IHggOj0gKHogKyBHYWxvaXNDeWMoeiwgLTEpKS8yOwogIGlmIElzUmF0KHgpIHRoZW4KICAgIHJl
dHVybiBBcHByb3hpbWF0aW9uQmluYXJ5KHkgLT4geCAtIHksIGFic0Vycm9yKTsKICBmaTsKCiAg
IyBDb25zaWRlciB4ID0gU3VtKGNfayBjb3MoMiBwaSBrL24pIDogayBpbiBQcmltZVJlc2lkdWVz
KG4pLCBjX2sgPD4gMCkuCiAgIyBUaGUgbWV0aG9kIHRvIGNvbXB1dGUgdGhlIGJvdW5kcyBhLCBi
IGlzCiAgIwogICMgMS4gRmluZCBhMF9rIDw9IGNvcygyIHBpIGsvbikgPD0gYjBfayBieSBhIFN0
ZXJuLUJyb2NvdCBhcHByb3hpbWF0aW9uLgogICMgICAgVGhpcyByZXN1bHRzIGluIHNtYWxsIG51
bWVyYXRvcnMgYW5kIGRlbm9taW5hdG9ycyBvZiBhMF9rLCBiMF9rLgogICMKICAjIDIuIFNldCBh
MV9rIDo9IGNfayBhMF9rLCBiMV9rIDo9IGNfayBiMF9rIGZvciBjX2sgPiAwIGFuZAogICMgICAg
ICAgIGExX2sgOj0gY19rIGIwX2ssIGIxX2sgOj0gY19rIGEwX2sgZm9yIGNfayA8IDAuCiAgIyAg
ICBIZW5jZSwgYTFfayA8PSBjX2sgY29zKDIgcGkgay9uKSA8PSBiMV9rLgogICMgICAgU2luY2Ug
dGhlIG51bWVyYXRvcnMgYW5kIGRlbm9taW5hdG9ycyBpbiBhMF9rLCBiMF9rIGhhdmUgYmVlbiBj
aG9zZW4KICAjICAgIG1pbmltYWwsIHRoZSBncm93dGggb2YgbnVtYmVycyBmb3IgYTFfaywgYjFf
ayBpcyByZWxhdGl2ZWx5IHNtYWxsLgogICMgCiAgIyAzLiBTZXQgQTJfayA6PSBmbG9vcigyXnIg
YTFfayksIEEyX2sgOj0gY2VpbGluZygyXnIgYjFfaykuCiAgIyAgICBIZW5jZSwgQTJfayAyXi1y
IDw9IGExX2ssIEIyX2sgMl4tciA+PSBiMV9rLgogICMgICAgQ2xlYXJseSwgQTJfayBhbmQgQjJf
ayBhcmUgaW50ZWdlci4gCiAgIwogICMgNC4gRm9ybSBhIDo9IFN1bShBMl9rIDogaykvMl5yLCBi
IDo9IFN1bShCMl9rIDogaykvMl5yLgogICMgICAgSGVuY2UsIGEgPD0gY29zKDIgcGkgay9uKSA8
PSBiIGFzIGRlc2lyZWQuCiAgIyAgICBUaGUgbnVtYmVycyBkbyBub3QgZ3JvdyBleHBvbmVudGlh
bGx5IHNpbmNlIEEyXywgQjJfayBhcmUgaW50ZWdlci4KICAjIAogICMgTm93LCB3ZSBjb21wdXRl
IHRoZSBhY2N1cmFjeSBvZiB0aGUgaW5pdGlhbCBhcHByb3hpbWF0aW9uIGluIHN0ZXAgMS4gaW4K
ICAjIG9yZGVyIHRvIHlpZWxkIGIgLSBhIDwgYWJzRXJyb3IuIExldCBOIDo9IHx7ayB8IGNfayA8
PiAwfXwuIFdlIGFzc3VtZQogICMgdGhhdCBhbGwgc3VtbWFuZHMgaW50cm9kdWNlIGFib3V0IHRo
ZSBzYW1lIGVycm9yIGludG8gdGhlIHN1bS4gSGVuY2UsIGxldAogICMgICBCMl9rIC0gQTJfayA8
IGFic0Vycm9yL04qMl5yLgogICMgVG8gY2hvb3NlIHIsIGNvbnNpZGVyIHRoZSB3b3JzdCBjYXNl
IGJvdW5kCiAgIyAgIEIyX2sgLSBCMl9rIDw9IDJeciAoYjFfayArIDEpIC0gMl5yIChhMV9rIC0g
MSkgPSAyXnIgKGIxX2sgLSBhMV9rKSArIDIuCiAgIyBIZW5jZSwgZm9yIHNvbWUgMl5yID4gMiBO
L2Fic0Vycm9yIHdlIGZpbmQgdGhlIGNoYWluIG9mIGJvdW5kcwogICMgICAgICAgYjBfayAtIGEw
X2sgPCAoYWJzRXJyb3IvTiAtIDJeKDEtcikpL3xjX2t8CiAgIyAgID09PiBiMV9rIC0gYTFfayA8
IGFic0Vycm9yL04gLSAyXigxLXIpCiAgIyAgID09PiBCMl9rIC0gQjJfayA8IGFic0Vycm9yL04q
Ml5yCiAgIyAgID09PiBiICAgIC0gYSAgICA8IGFic0Vycm9yLgoKICAjIHJlcHJlc2VudCB4IGFz
IFN1bShjX2sgY29zKDIgcGkgay9uKSA6IGspIGNvbnRhaW5pbmcgTiBzdW1tYW5kcwogIG4gOj0g
Tm9mQ3ljKHgpOwogIGMgOj0gQ29lZmZzQ3ljKHgsIG4pOwogIE4gOj0gTnVtYmVyKGMsIGNrIC0+
IGNrIDw+IDApOwoKICAjIGNob29zZSByID4gMCBzdWNoIHRoYXQgMl5yID4gMiBOL2Fic0Vycm9y
CiAgUiA6PSAyKk4vYWJzRXJyb3I7CiAgaWYgUiA8PSAxIHRoZW4KICAgIHIgOj0gMTsKICBlbHNl
CiAgICByIDo9IExvZ0ludChRdW9JbnQoTnVtZXJhdG9yKFIpLCBEZW5vbWluYXRvcihSKSksIDIp
OwogICAgd2hpbGUgbm90IDJeciA+IFIgZG8KICAgICAgciA6PSByICsgMTsKICAgIG9kOwogIGZp
OwogIAogICMgY29tcHV0ZSBhLCBiCiAgYWIgOj0gWzAsIDBdOwogIGZvciBrIGluIFswLi5uXSBk
bwogICAgaWYgSXNCb3VuZChjWzEra10pIGFuZCBjWzEra10gPD4gMCB0aGVuCgogICAgICAjIGxv
d2VyIHRoZSBlcnJvciBib3VuZCBieSBhdCBtb3N0IDElIHRvIHJlZHVjZSB0aGUgbnVtYmVycyBp
bnZvbHZlZAogICAgICBlcnIgOj0gKGFic0Vycm9yL04gLSAyLzJecikvQWJzSW50KGNbMStrXSk7
CiAgICAgIGlmIGVyciA+PSAxIHRoZW4KICAgICAgICBlcnIxIDo9IEZsb29yUmF0KGVycik7CiAg
ICAgIGVsc2UKICAgICAgICBlcnIxIDo9IDEvQ2VpbGluZ1JhdCgxL2Vycik7CiAgICAgIGZpOwog
ICAgICBpZiAoZXJyIC0gZXJyMSkvZXJyID4gMS8xMDAgdGhlbgogICAgICAgIGVycjEgOj0gZXJy
OwogICAgICBmaTsKCiAgICAgICMgYXBwcm94aW1hdGUgY29zKDIgcGkgay9uKQogICAgICBhYjAg
Oj0gQXBwcm94Q29zUGkoMiprL24sIGVycjEpOwoKICAgICAgIyBmb3JtIHRoZSBkZXJpdmVkIGJv
dW5kIGZvciB0aGUgc3VtbWFuZCBrCiAgICAgIGlmIGNbMStrXSA+IDAgdGhlbgogICAgICAgIGFi
MSA6PSBbIGNbMStrXSphYjBbMV0sIGNbMStrXSphYjBbMl0gXTsKICAgICAgZWxzZQogICAgICAg
IGFiMSA6PSBbIGNbMStrXSphYjBbMl0sIGNbMStrXSphYjBbMV0gXTsKICAgICAgZmk7CiAgICAg
IEFCMiA6PSBbIEZsb29yUmF0KGFiMVsxXSoyXnIpLCBDZWlsaW5nUmF0KGFiMVsyXSoyXnIpIF07
CiAgICAgIGFiICA6PSBbIGFiWzFdICsgQUIyWzFdLCBhYlsyXSArIEFCMlsyXSBdOyAKICAgIGZp
OwogIG9kOwogIGFiIDo9IFsgYWJbMV0vMl5yLCBhYlsyXS8yXnIgXTsKICByZXR1cm4gYWI7CmVu
ZDsKCgpBcHByb3hSZUN5Y0JpbmFyeSA6PSBmdW5jdGlvbiAoIHosIGFic0Vycm9yICkKICBsb2Nh
bAogICAgelJlLCAgICAgICAjIFJlKHopCiAgICBhYiwgICAgICAgICMgdGhlIHJlc3VsdAogICAg
YWIxLCAgICAgICAjIGEgdGlnaHRlciBpbnRlcnZhbCBlbmNsb3NpbmcgeAogICAgYWJzRXJyb3Ix
LCAjIGEgbG93ZXIgZXJyb3IgYm91bmQKICAgIHBhdGgsICAgICAgIyByZWNvcmRzIGFiIGFwcHJv
eGltYXRpb24KICAgIGk7ICAgICAgICAgIyBjb3VudGVyIGZvciB0aGUgaXRlcmF0aW9ucwoKICAj
IGNoZWNrIGFyZ3VtZW50cwogIGlmIG5vdCAoIElzQ3ljKHopIGFuZCBJc1JhdChhYnNFcnJvcikg
YW5kIGFic0Vycm9yID4gMCApIHRoZW4KICAgIEVycm9yKCI8ej4gbXVzdCBjeWMsIDxhYnNFcnJv
cj4gcG9zaXRpdmUgcmF0aW9uYWwiKTsKICBmaTsKICAKICAjIGNhdGNoIHRoZSByYXRpb25hbCBj
YXNlCiAgelJlIDo9ICh6ICsgR2Fsb2lzQ3ljKHosIC0xKSkvMjsKICBpZiBJc1JhdCh6UmUpIHRo
ZW4KICAgIHJldHVybiBBcHByb3hpbWF0aW9uQmluYXJ5KHggLT4gelJlIC0geCwgYWJzRXJyb3Ip
OwogIGZpOwoKICAjIFRoZSBtZXRob2Qgd2UgdXNlIHRvIGZpbmQgdGhlIGJlc3QgYmluYXJ5IGFw
cHJveGltYXRpb24gCiAgIyBpcyB0byBjb21wdXRlIGEgbW9yZSBhY2N1cmF0ZSBhcHByb3hpbWF0
aW9uIHdpdGggQXBwcm94UmVDeWNTaW1wbGUKICAjIGFuZCB0byByZWFwcHJveGltYXRlIGl0IG9w
dGltYWwgYmluYXJ5IGFnYWluLiBUaGlzIG1ldGhvZCBzZWVtcyB0byBiZQogICMgdW5lbGVnYW50
IGF0IGZpcnN0IHNpZ2h0IGNvbXBhcmVkIHRvIGFwcHJveGltYXRpbmcgdGhlIHJvb3RzCiAgIyBv
ZiB0aGUgbWluaW1hbCBwb2x5bm9taWFsLiBIb3dldmVyLCBpdCBhdm9pZHMgY29uc3RydWN0aW9u
IG9mCiAgIyBvZiB0aGUgbWluaW1hbCBwb2x5bm9taWFsIGF0IGFsbCEKCiAgYWJzRXJyb3IxIDo9
IGFic0Vycm9yLzEwOwogIHBhdGggICAgICA6PSBbIF07CiAgZm9yIGkgaW4gWzEuLjEwMF0gZG8K
ICAgIGFiMSA6PSBBcHByb3hSZUN5Y1NpbXBsZSh6UmUsIGFic0Vycm9yMSk7CiAgICBhYiAgOj0K
ICAgICAgQXBwcm94aW1hdGlvbkJpbmFyeSgKCWZ1bmN0aW9uICh4KQoJICBpZiB4IDwgYWIxWzFd
IHRoZW4KCSAgICByZXR1cm4gMTsKCSAgZWxpZiB4ID4gYWIxWzJdIHRoZW4KCSAgICByZXR1cm4g
LTE7CgkgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAjIGFib3J0cyBBcHByb3hpbWF0
aW9uQmluYXJ5CgkgIGZpOwoJZW5kLAoJYWJzRXJyb3IsCiAgICAgICAgcGF0aAogICAgICApOwog
ICAgaWYgYWIgPD4gZmFsc2UgdGhlbgogICAgICByZXR1cm4gYWI7CiAgICBmaTsKICAgIGFic0Vy
cm9yMSA6PSBhYnNFcnJvcjEvMjsKICBvZDsKICBFcnJvcigiaW50ZXJuYWw6IGNhbm5vdCBmaW5k
IGJlc3QgYmluYXJ5IGFwcHJveGltYXRpb24iKTsKZW5kOwoKQXBwcm94UmVDeWNTdGVybkJyb2Nv
dCA6PSBmdW5jdGlvbiAoIHosIGFic0Vycm9yICkKICBsb2NhbAogICAgelJlLCAgICAgICAjIFJl
KHopCiAgICBhYiwgICAgICAgICMgdGhlIHJlc3VsdAogICAgYWIxLCAgICAgICAjIGEgdGlnaHRl
ciBpbnRlcnZhbCBlbmNsb3NpbmcgeAogICAgYWJzRXJyb3IxLCAjIGEgbG93ZXIgZXJyb3IgYm91
bmQKICAgIHBhdGgsICAgICAgIyByZWNvcmRzIGFiIGFwcHJveGltYXRpb24KICAgIGk7ICAgICAg
ICAgIyBjb3VudGVyIGZvciB0aGUgaXRlcmF0aW9ucwoKICAjIGNoZWNrIGFyZ3VtZW50cwogIGlm
IG5vdCAoIElzQ3ljKHopIGFuZCBJc1JhdChhYnNFcnJvcikgYW5kIGFic0Vycm9yID4gMCApIHRo
ZW4KICAgIEVycm9yKCI8ej4gbXVzdCBjeWMsIDxhYnNFcnJvcj4gcG9zaXRpdmUgcmF0aW9uYWwi
KTsKICBmaTsKCiAgIyBjYXRjaCB0aGUgcmF0aW9uYWwgY2FzZQogIHpSZSA6PSAoeiArIEdhbG9p
c0N5Yyh6LCAtMSkpLzI7CiAgaWYgSXNSYXQoelJlKSB0aGVuCiAgICByZXR1cm4gQXBwcm94aW1h
dGlvblN0ZXJuQnJvY290KHggLT4gelJlIC0geCwgYWJzRXJyb3IpOwogIGZpOwoKICAjIFRoZSBt
ZXRob2QgaXMgdGhlIHNhbWUgYXMgaW4gQXBwcm94UmVDeWNCaW5hcnkuCiAgYWJzRXJyb3IxIDo9
IGFic0Vycm9yLzEwOwogIHBhdGggICAgICA6PSBbIF07CiAgZm9yIGkgaW4gWzEuLjEwMF0gZG8K
ICAgIGFiMSA6PSBBcHByb3hSZUN5Y1NpbXBsZSh6LCBhYnNFcnJvcjEpOwogICAgYWIgIDo9CiAg
ICAgIEFwcHJveGltYXRpb25TdGVybkJyb2NvdCgKCWZ1bmN0aW9uICggeCApCgkgIGlmIHggPCBh
YjFbMV0gdGhlbgoJICAgIHJldHVybiAxOwoJICBlbGlmIHggPiBhYjFbMl0gdGhlbgoJICAgIHJl
dHVybiAtMTsKICAgICAgICAgIGVsc2UKCSAgICByZXR1cm4gZmFsc2U7ICMgYWJvcnRzIEFwcHJv
eGltYXRpb25TdGVybkJyb2NvdAoJICBmaTsKCWVuZCwKCWFic0Vycm9yLAogICAgICAgIHBhdGgK
ICAgICAgKTsKICAgIGlmIGFiIDw+IGZhbHNlIHRoZW4KICAgICAgcmV0dXJuIGFiOwogICAgZmk7
CiAgICBhYnNFcnJvcjEgOj0gYWJzRXJyb3IxLzI7CiAgb2Q7CiAgRXJyb3IoImludGVybmFsOiBj
YW5ub3QgZmluZCBiZXN0IHJhdGlvbmFsIGFwcHJveGltYXRpb24iKTsKZW5kOwoKI0YgU2lnblJl
Q3ljKCA8ej4gKQojRiAgIHRoZSBzaWduIG9mIFJlKHopLiBUaGUgc2lnbiBpcyBpbiB7LTEsIDAs
IDF9LgojRgoKU2lnblJlQ3ljIDo9IGZ1bmN0aW9uICggeiApCiAgbG9jYWwgYWIsIGVwczsKCiAg
aWYgbm90IElzQ3ljKHopIHRoZW4KICAgIEVycm9yKCI8ej4gbXVzdCBiZSBhIEN5YyIpOwogIGZp
OwoKICB6IDo9ICh6ICsgR2Fsb2lzQ3ljKHosIC0xKSkvMjsKICBpZiBJc1JhdCh6KSB0aGVuCiAg
ICBpZiB6IDwgMCB0aGVuIAogICAgICByZXR1cm4gLTE7IAogICAgZWxpZiB6ID0gMCB0aGVuIAog
ICAgICByZXR1cm4gMDsgCiAgICBlbHNlIAogICAgICByZXR1cm4gMTsgCiAgICBmaTsKCiAgZmk7
CgogICMgbm93IHRoZSBoYXJkIHBhcnQKICBlcHMgOj0gMl4tMTA7CiAgcmVwZWF0CiAgICBhYiAg
Oj0gQXBwcm94UmVDeWNTaW1wbGUoeiwgZXBzKTsKICAgIGVwcyA6PSBlcHMvMjsKICB1bnRpbCAo
YWJbMV0gPiAwIGFuZCBhYlsyXSA+IDApIG9yIChhYlsxXSA8IDAgYW5kIGFiWzJdIDwgMCk7CiAg
aWYgYWJbMV0gPCAwIHRoZW4KICAgIHJldHVybiAtMTsKICBlbHNlCiAgICByZXR1cm4gIDE7CiAg
Zmk7CmVuZDsKCgojIERlY2ltYWwgZnJhY3Rpb24gb3V0cHV0CiMgPT09PT09PT09PT09PT09PT09
PT09PT0KCiNGIFN0cmluZ0RlY2ltYWxSYXQoIDx4PiwgPG1hbnRpc3NhRGlnaXRzPiApCiNGICAg
cmV0dXJucyBhIHN0cmluZyB3aXRoIGEgZGVjaW1hbCBleHBhbnNpb24gaW4gc2NpZW50aWZpYwoj
RiAgIGZvcm1hdCBmb3IgdGhlIHJhdGlvbmFsIHggd2l0aCBtYW50aXNzYURpZ2l0cyBtYW55IGRp
Z2l0cwojRiAgIGFmdGVyIHRoZSBkZWNpbWFsIGRvdCAobm8gcm91bmRpbmcpLiBUaGUgc3ludGF4
IHByb2R1Y2VkIGlzCiNGICAgICBbLV08ZGlnaXQ+LjxkaWdpdHM+ZVstXTxkaWdpdHM+CiNGCgpT
dHJpbmdEZWNpbWFsUmF0IDo9IGZ1bmN0aW9uICggeCwgbWFudGlzc2FEaWdpdHMgKQogIGxvY2Fs
IAogICAgb3V0LCAgICAjIHRoZSBsaXN0IG9mIGRpZ2l0cwogICAgbSwgZSwgICAjIG0qMTBeZSA9
IHx4fAogICAgbU4sIG1ELCAjIG1OL21EID0gbQogICAgaTsgICAgICAjIGluZGV4IG9mIHRoZSBk
aWdpdAoKICBpZiBub3QgKCBJc1JhdCh4KSBhbmQgSXNJbnQobWFudGlzc2FEaWdpdHMpICkgdGhl
bgogICAgRXJyb3IoIjx4PiBtdXN0IGJlIFJhdGlvbmFsIGFuZCA8bWFudGlzc2FEaWdpdHM+IGlu
dGVnZXIiKTsKICBmaTsKICBpZiB4ID0gMCB0aGVuCiAgICByZXR1cm4gIjAuMCI7CiAgZmk7Cgog
ICMgaGFuZGxlIHNpZ24geAogIGlmIHggPj0gMCB0aGVuCiAgICBvdXQgOj0gIiI7CiAgZWxzZQog
ICAgeCAgIDo9IC14OwogICAgb3V0IDo9ICItIjsKICBmaTsKCiAgIyB4ID0gbSoxMF5lIHdoZXJl
IDEgPD0gbSA8IDEwCiAgaWYgeCA9IDAgdGhlbgogICAgZSA6PSAwOwogIGVsaWYgeCA8IDEgdGhl
bgogICAgZSA6PSBDZWlsaW5nUmF0KDEvKDErTG9nSW50KFF1b0ludChEZW5vbWluYXRvcih4KSwg
TnVtZXJhdG9yKHgpKSwgMTApKSk7CiAgZWxpZiB4ID0gMSB0aGVuCiAgICBlIDo9IDA7CiAgZWxz
ZQogICAgZSA6PSBGbG9vclJhdCgxK0xvZ0ludChRdW9JbnQoTnVtZXJhdG9yKHgpLCBEZW5vbWlu
YXRvcih4KSksIDEwKSk7CiAgZmk7ICAKICBtIDo9IHgvMTBeZTsKICB3aGlsZSBtIDwgMSBkbwog
ICAgbSA6PSBtKjEwOwogICAgZSA6PSBlLTE7CiAgb2Q7CiAgd2hpbGUgbSA+PSAxMCBkbwogICAg
bSA6PSBtLzEwOwogICAgZSA6PSBlKzE7CiAgb2Q7CgogICMgY29udmVydCBtYW50aXNzYSBtID0g
bU4vbUQKICBtTiA6PSBOdW1lcmF0b3IobSk7CiAgbUQgOj0gRGVub21pbmF0b3IobSk7CiAgQXBw
ZW5kKG91dCwgU3RyaW5nKFF1b0ludChtTiwgbUQpKSk7CiAgbU4gOj0gbU4gbW9kIG1EOyAKICBB
cHBlbmQob3V0LCAiLiIpOwogIGZvciBpIGluIFsxLi5NYXhpbXVtKDEsIG1hbnRpc3NhRGlnaXRz
KV0gZG8KICAgIG1OIDo9IDEwKm1OOwogICAgQXBwZW5kKG91dCwgU3RyaW5nKFF1b0ludChtTiwg
bUQpKSk7CiAgICBtTiA6PSBtTiBtb2QgbUQ7CiAgb2Q7CgogICMgY29udmVydCBleHBvbmVudAog
IEFwcGVuZChvdXQsICJlIik7CiAgQXBwZW5kKG91dCwgU3RyaW5nKGUpKTsKICBJc1N0cmluZyhv
dXQpOwogIHJldHVybiBvdXQ7ICAKZW5kOwo=
--=_mixed 003AE914C1256D87_=--

Miles-Receive-Header: reply


> < [top]