<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>21281</bug_id>
          
          <creation_ts>2008-10-01 12:34:17 -0700</creation_ts>
          <short_desc>Some parser cleanup</short_desc>
          <delta_ts>2008-10-02 07:54:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93576</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 12:34:17 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93577</commentid>
    <comment_count>1</comment_count>
      <attachid>23985</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 12:34:49 -0700</bug_when>
    <thetext>Created attachment 23985
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93578</commentid>
    <comment_count>2</comment_count>
      <attachid>23985</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-01 12:47:34 -0700</bug_when>
    <thetext>Comment on attachment 23985
patch

So i read through this.  It looked fine.  If all you need is a rubber-stamp, here&apos;s my stamp.  If you need a more thorough review...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93591</commentid>
    <comment_count>3</comment_count>
      <attachid>23985</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 13:26:07 -0700</bug_when>
    <thetext>Comment on attachment 23985
patch

The change here is really great; I love the improvement in both clarity and structure.

I&apos;m not a fond of the word &quot;Range&quot; in SourceRange. It makes it sound like the class is used to keep track of various arbitrary ranges in an overall piece of source code, but it doesn&apos;t seem to me that&apos;s what it&apos;s for at all. SourceProvider doesn&apos;t know anything about line numbers, yet SourceRange does; that&apos;s actually one of the biggest differences between the two.

Maybe the name SourceCode would be better than SourceRange. Even though the class is capable of representing different ranges within a single source provider, I don&apos;t think it needs to be named after this capability.

Lexer::setCode is one of the functions that makes me think this could be a good idea.

+ int asId() { return reinterpret_cast&lt;intptr_t&gt;(this); }

Why do IDs need to be integers? This code above is really weak, for example an int is smaller than an intptr_t in 64-bit, so this code chops off high bits.

+ void setCode(const SourceRange*);

Why a pointer rather than a reference? I&apos;m sure there&apos;s a good reason.

You can hand off the storage from one Vector to another by using swap. Not sure if that&apos;s relevant.

Why is ScopeNode::m_sourceRange protected rather than private?

+ OwnPtr&lt;Identifier&gt; m_parameters;

I think this needs to be an OwnArrayPtr.

I think you should consider some syntactic sugar to make it easier to create a SourceRange directly from without explicitly having to create the appropriate type of source provider. To me, the lines of code that construct SourceRange objects seem kind of long and it seems to come up over and over again.

review- because of the OwnPtr and chopping off high bits of 64-bit pointers issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93654</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 20:08:08 -0700</bug_when>
    <thetext>&gt; The change here is really great; I love the improvement in both clarity and
&gt; structure.

Thank you! :)

&gt; I&apos;m not a fond of the word &quot;Range&quot; in SourceRange. It makes it sound like the
&gt; class is used to keep track of various arbitrary ranges in an overall piece of
&gt; source code, but it doesn&apos;t seem to me that&apos;s what it&apos;s for at all.
&gt; SourceProvider doesn&apos;t know anything about line numbers, yet SourceRange does;
&gt; that&apos;s actually one of the biggest differences between the two.
&gt; 
&gt; Maybe the name SourceCode would be better than SourceRange. Even though the
&gt; class is capable of representing different ranges within a single source
&gt; provider, I don&apos;t think it needs to be named after this capability.
&gt; 
&gt; Lexer::setCode is one of the functions that makes me think this could be a good
&gt; idea.

Renamed to SourceCode.

&gt; + int asId() { return reinterpret_cast&lt;intptr_t&gt;(this); }
&gt; 
&gt; Why do IDs need to be integers? This code above is really weak, for example an
&gt; int is smaller than an intptr_t in 64-bit, so this code chops off high bits.

Fixed for everything except WebScriptDebugDelegate, for which I&apos;ve filed a bug report with Apple&apos;s DashCode team.

&gt; + void setCode(const SourceRange*);
&gt; 
&gt; Why a pointer rather than a reference? I&apos;m sure there&apos;s a good reason.

Changed to a reference. I was using a pointer because the class ultimately wanted to store a pointer, but I changed my mind when I realized that SourceRange was a reference everywhere else.

&gt; You can hand off the storage from one Vector to another by using swap. Not sure
&gt; if that&apos;s relevant.

Ha! I was looking for that, but got confused by my assumption that it would be named adopt. Anyway, releaseBuffer() is a little better because it saves a little space in FunctionBodyNode not to have a Vector.

&gt; Why is ScopeNode::m_sourceRange protected rather than private?

Made private.

&gt; + OwnPtr&lt;Identifier&gt; m_parameters;
&gt; 
&gt; I think this needs to be an OwnArrayPtr.

Changed to manually call fastFree. OwnArrayPtr is no good because it&apos;s not allocated by new[].

&gt; I think you should consider some syntactic sugar to make it easier to create a
&gt; SourceRange directly from without explicitly having to create the appropriate
&gt; type of source provider. To me, the lines of code that construct SourceRange
&gt; objects seem kind of long and it seems to come up over and over again.

Added a makeSource function in JSC and WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93655</commentid>
    <comment_count>5</comment_count>
      <attachid>24003</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 20:08:25 -0700</bug_when>
    <thetext>Created attachment 24003
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93667</commentid>
    <comment_count>6</comment_count>
      <attachid>24003</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-01 22:28:08 -0700</bug_when>
    <thetext>Comment on attachment 24003
patch

In the ChangeLog, you say wtf:: instead of WTF::.

You use both sourceID and sourceId in your patch. I know the latter is because the original code had it, but you should probably pick one and stick with it. Since sourceID is our coding style, that seems like a good choice.

I will say r=me, but due to Darin&apos;s earlier review, I would like to see this looked over by him after it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93680</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 23:45:02 -0700</bug_when>
    <thetext>Committed revision 37184.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93729</commentid>
    <comment_count>8</comment_count>
      <attachid>24003</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-02 07:54:54 -0700</bug_when>
    <thetext>Comment on attachment 24003
patch

+    if (m_parameters)
+        fastFree(m_parameters);

fastFree already checks for 0, so that&apos;s not needed. But also, this doesn&apos;t seem to destroy the Identifier objects in m_parameters.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23985</attachid>
            <date>2008-10-01 12:34:49 -0700</date>
            <delta_ts>2008-10-01 20:08:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-parser.txt</filename>
            <type>text/plain</type>
            <size>89308</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQzIEBACisyMDA4LTEwLTAxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcmVsaW1pbmFyeSBzdGVwIHRvd2FyZCBkeW5h
bWljIHJlY29tcGlsYXRpb246IFN0YW5kYXJkaXplZCBhbmQKKyAgICAgICAgc2ltcGxpZmllZCB0
aGUgcGFyc2luZyBpbnRlcmZhY2UuCisgICAgICAgIAorICAgICAgICBUaGUgbWFpbiBnb2FsIGlu
IHRoaXMgcGF0Y2ggaXMgdG8gbWFrZSBpdCBlYXN5IHRvIGFzayBmb3IgYSBkdXBsaWNhdGUKKyAg
ICAgICAgY29tcGlsYXRpb24sIGFuZCBnZXQgYmFjayBhIGR1cGxpY2F0ZSByZXN1bHQgLS0gc2Ft
ZSBzb3VyY2UgVVJMLCBzYW1lCisgICAgICAgIGRlYnVnZ2VyIC8gcHJvZmlsZXIgSUQsIHNhbWUg
dG9TdHJpbmcgYmVoYXZpb3IsIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYXNpYyB1bml0
IG9mIGNvbXBpbGF0aW9uIGFuZCBldmFsdWF0aW9uIGlzIG5vdyBTb3VyY2VSYW5nZSwgd2hpY2gK
KyAgICAgICAgZW5jb21wYXNzZXMgYSBTb3VyY2VQcm92aWRlciwgYSByYW5nZSBpbiB0aGF0IHBy
b3ZpZGVyLCBhbmQgYSBzdGFydGluZworICAgICAgICBsaW5lIG51bWJlci4KKworICAgICAgICBB
IFNvdXJjZVByb3ZpZGVyIG5vdyBlbmNvbXBhc3NlcyBhIHNvdXJjZSBVUkwsIGFuZCAqaXMqIGEg
c291cmNlIElELAorICAgICAgICBzaW5jZSBhIHBvaW50ZXIgaXMgYSB1bmlxdWUgaWRlbnRpZmll
ci4KKworICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlw
dCk6CisgICAgICAgIChKU0NoZWNrU2NyaXB0U3ludGF4KTogUHJvdmlkZSBhIFNvdXJjZVJhbmdl
IHRvIHRoZSBJbnRlcnByZXRlciwgc2luY2UKKyAgICAgICAgb3RoZXIgQVBJcyBhcmUgbm8gbG9u
Z2VyIHN1cHBvcnRlZC4KKyAgICAgICAgCisgICAgICAgICogVk0vQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmdldCk6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0
aGUgSW50ZXJwcmV0ZXIsIHNpbmNlCisgICAgICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBz
dXBwb3J0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogQVNTRVJUIHNv
bWV0aGluZyB0aGF0IHVzZWQgdG8gYmUgQVNTRVJUZWQKKyAgICAgICAgYnkgb3VyIGNhbGxlciAt
LSB0aGlzIGlzIGEgYmV0dGVyIGJvdHRsZW5lY2suCisKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6IFVw
ZGF0ZWQgZm9yIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSdzIHBhcmFt
ZXRlcnMgYXJlIG5vIGxvbmdlciBhIHd0Zjo6VmVjdG9yLgorCisgICAgICAgICoga2pzL0FyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRzKTogZGl0dG8KKwor
ICAgICAgICAqIGtqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyQ2FsbEZyYW1lOjpldmFsdWF0ZSk6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgUGFy
c2VyLAorICAgICAgICBzaW5jZSBvdGhlciBBUElzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgor
CisgICAgICAgICoga2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RGdW5jdGlvbik6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgUGFyc2VyLCBz
aW5jZQorICAgICAgICBvdGhlciBBUElzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLiBBZG9wdCBG
dW5jdGlvbkJvZHlOb2RlJ3MgbmV3CisgICAgICAgICJmaW5pc2hQYXJzaW5nIiBBUEkuCisKKyAg
ICAgICAgKiBranMvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246Omxl
bmd0aEdldHRlcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldFBhcmFtZXRlck5hbWUp
OiBVcGRhdGVkIGZvciB0aGUgZmFjdCB0aGF0CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUncyBw
YXJhbWV0ZXJzIGFyZSBubyBsb25nZXIgYSB3dGY6OlZlY3Rvci4KKworICAgICAgICAqIGtqcy9K
U0Z1bmN0aW9uLmg6IE5peGVkIHNvbWUgY3J1ZnQuCisKKyAgICAgICAgKiBranMvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6IFByb3Zp
ZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgUGFyc2VyLCBzaW5jZQorICAgICAgICBvdGhlciBBUElz
IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLiAKKworICAgICAgICAqIGtqcy9QYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNlKTogUmVxdWlyZSBhIFNvdXJjZVJhbmdlIGFyZ3Vt
ZW50LCBpbnN0ZWFkIG9mIGEgYnVuY2gKKyAgICAgICAgb2YgYnJva2VuIG91dCBwYXJhbWV0ZXJz
LiBTdG9wIHRyYWNraW5nIHNvdXJjZUlkIGFzIGFuIGludGVnZXIsIHNpbmNlIHdlCisgICAgICAg
IHVzZSB0aGUgU291cmNlUHJvdmlkZXIgcG9pbnRlciBmb3IgdGhpcyBub3cuIERvbid0IGNsYW1w
IHRoZQorICAgICAgICBzdGFydGluZ0xpbmVOdW1iZXIsIHNpbmNlIFNvdXJjZVJhbmdlIGRvZXMg
dGhhdCBub3cuCisKKyAgICAgICAgKiBranMvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNl
cjo6cGFyc2UpOiBTdGFuZGFyZGl6ZWQgdGhlIHBhcnNpbmcgaW50ZXJmYWNlIHRvIHJlcXVpcmUg
YQorICAgICAgICBTb3VyY2VSYW5nZS4gQWRkZWQgYSBjb252ZW5pZW5jZSBpbnRlcmZhY2UgZm9y
IGEgZGVmYXVsdCBTb3VyY2VSYW5nZSB0aGF0CisgICAgICAgIHJlcGVyZXNlbnRzIHRoZSB3aG9s
ZSBTb3VyY2VQcm92aWRlciwgc3RhcnRpbmcgYXQgbGluZSAxLCBzaW5jZSB0aGF0J3MKKyAgICAg
ICAgc28gY29tbW9uLgorCisgICAgICAgICoga2pzL1NoZWxsLmNwcDoKKyAgICAgICAgKGZ1bmN0
aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChwcmV0dHlQcmludFNj
cmlwdCk6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6CisgICAgICAgIChydW5JbnRlcmFjdGl2
ZSk6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgSW50ZXJwcmV0ZXIsIHNpbmNlCisgICAg
ICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAgKiBranMv
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6OlNvdXJjZVBy
b3ZpZGVyKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6OnVybCk6CisgICAgICAgIChK
U0M6OlNvdXJjZVByb3ZpZGVyOjphc0lkKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcik6IEFkZGVkIG5ldworICAgICAgICByZXNwb25zaWJpbGl0aWVz
IGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAqIGtqcy9Tb3VyY2VSYW5nZS5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VSYW5nZTo6U291cmNlUmFuZ2UpOgorICAgICAgICAoSlNDOjpTb3VyY2VS
YW5nZTo6dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpTb3VyY2VSYW5nZTo6cHJvdmlkZXIpOgor
ICAgICAgICAoSlNDOjpTb3VyY2VSYW5nZTo6Zmlyc3RMaW5lKToKKyAgICAgICAgKEpTQzo6U291
cmNlUmFuZ2U6OmRhdGEpOgorICAgICAgICAoSlNDOjpTb3VyY2VSYW5nZTo6bGVuZ3RoKTogQWRk
ZWQgbmV3IHJlc3BvbnNpYmlsaXRpZXMgZGVzY3JpYmVkIGFib3ZlLgorCisgICAgICAgICoga2pz
L2RlYnVnZ2VyLmg6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgY2xpZW50LCBzaW5jZSBv
dGhlciBBUElzCisgICAgICAgIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgorCisgICAgICAgICog
a2pzL2dyYW1tYXIueTogUHJvdmlkZSBzdGFydGluZ0xpbmVOdW1iZXIgd2hlbiBjcmVhdGluZyBh
IFNvdXJjZVJhbmdlLgorCisgICAgICAgICoga2pzL2ludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIuaDogUmVxdWlyZSBhIFNv
dXJjZVJhbmdlIGluc3RlYWQgb2YgYnJva2VuIG91dCBhcmd1bWVudHMuCisKKyAgICAgICAgKiBr
anMvbGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpMZXhlcjo6c2V0Q29kZSk6CisgICAgICAgICog
a2pzL2xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpzb3VyY2VSYW5nZSk6IEZvbGQgdG9n
ZXRoZXIgdGhlIFNvdXJjZVByb3ZpZGVyIGFuZCBsaW5lIG51bWJlcgorICAgICAgICBpbnRvIGEg
U291cmNlUmFuZ2UuIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBMZXhlciB3b3VsZCBhY2NpZGVudGFs
bHkga2VlcAorICAgICAgICBhbGl2ZSB0aGUgbGFzdCBTb3VyY2VQcm92aWRlciBmb3JldmVyLgor
CisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpTY29w
ZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAgICAg
ICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OkV2
YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmdlbmVyYXRlQ29kZSk6CisgICAgICAg
IChKU0M6OkV2YWxOb2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2Rl
OjpGdW5jdGlvbkJvZHlOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6Zmlu
aXNoUGFyc2luZyk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmdlbmVyYXRlQ29kZSk6CisgICAgICAgIChK
U0M6OlByb2dyYW1Ob2RlOjpnZW5lcmF0ZUNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJv
ZHlOb2RlOjpwYXJhbVN0cmluZyk6CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAgIChK
U0M6OlNjb3BlTm9kZTo6KToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJZCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6Oik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Qm9keU5vZGU6OnBhcmFtZXRlckNvdW50KToKKyAgICAgICAgKEpTQzo6RnVuY0V4cHJOb2RlOjop
OgorICAgICAgICAoSlNDOjpGdW5jRGVjbE5vZGU6Oik6IFN0b3JlIGEgU291cmNlUmFuZ2UgaW4g
YWxsIFNjb3BlTm9kZXMsIHNpbmNlCisgICAgICAgIFNvdXJjZVJhbmdlIGlzIG5vdyByZXNwb25z
aWJsZSBmb3IgdHJhY2tpbmcgVVJMLCBJRCwgZXRjLiBTdHJlYW1saW5lZAorICAgICAgICBzb21l
IGFkIGhvYyBGdW5jdGlvbkJvZHlOb2RlIGZpeHVwcyBpbnRvIGEgImZpbmlzaFBhcnNpbmciIGZ1
bmN0aW9uLCB0bworICAgICAgICBoZWxwIG1ha2UgY2xlYXIgd2hhdCB5b3UgbmVlZCB0byBkbyBp
biBvcmRlciB0byBmaW5pc2ggcGFyc2luZyBhCisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUuCisK
KyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ojo6cmVsZWFzZUJ1ZmZlcik6
IERvbid0IEFTU0VSVCB0aGF0IHJlbGVhc2VCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZAorICAgICAg
ICB3aGVuIGJ1ZmZlciBpcyBub3QgMCwgc2luY2UgRnVuY3Rpb25Cb2R5Tm9kZSBpcyBtb3JlIHRo
YW4gaGFwcHkKKyAgICAgICAgdG8gZ2V0IGJhY2sgYSAwIGJ1ZmZlciwgYW5kIG90aGVyIGZ1bmN0
aW9ucyBsaWtlIFJlZlB0cjo6cmVsZWFzZSgpIGFsbG93CisgICAgICAgIGZvciAwLCB0b28uCisK
IDIwMDgtMDktMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC05OCwxNyArOTgsMTYgQEAgX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1
YWxFUEtOU183VVN0cmluZwogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNf
OUVycm9yVHlwZUUKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJv
clR5cGVFUEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JU
eXBlRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzExSW50ZXJwcmV0ZXIxMWNoZWNrU3ludGF4RVBO
U185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFaVM1XworX19aTjNKU0MxMUludGVycHJldGVyMTFj
aGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzExU291cmNlUmFuZ2VFCiBfX1pOM0pTQzEx
SW50ZXJwcmV0ZXIyMXNob3VsZFByaW50RXhjZXB0aW9uc0V2CiBfX1pOM0pTQzExSW50ZXJwcmV0
ZXIyNHNldFNob3VsZFByaW50RXhjZXB0aW9uc0ViCi1fX1pOM0pTQzExSW50ZXJwcmV0ZXI4ZXZh
bHVhdGVFUE5TXzlFeGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFpbkVSS05TXzdVU3RyaW5nRWlOM1dU
RjEwUGFzc1JlZlB0cklOU18xNFNvdXJjZVByb3ZpZGVyRUVFUE5TXzdKU1ZhbHVlRQotX19aTjNK
U0MxMUludGVycHJldGVyOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVJOU18xMFNjb3BlQ2hhaW5F
UktOU183VVN0cmluZ0VpUzdfUE5TXzdKU1ZhbHVlRQorX19aTjNKU0MxMUludGVycHJldGVyOGV2
YWx1YXRlRVBOU185RXhlY1N0YXRlRVJOU18xMFNjb3BlQ2hhaW5FUktOU18xMVNvdXJjZVJhbmdl
RVBOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTFKU0ltbWVkaWF0ZTEybm9uSW5saW5lTmFORXYKIF9f
Wk4zSlNDMTFKU0ltbWVkaWF0ZTh0b09iamVjdEVQS05TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvU3RyaW5nRVBLTlNfN0pTVmFsdWVFCiBfX1pOM0pT
QzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRVBLTlNfN0pTVmFsdWVFUE5TXzlFeGVjU3RhdGVFCiBf
X1pOM0pTQzExUHJvZmlsZU5vZGU0c29ydEVQRmJSS04zV1RGNlJlZlB0cklTMF9FRVM1X0UKLV9f
Wk4zSlNDMTFQcm9ncmFtTm9kZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNvdXJj
ZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklOU18xMElkZW50aWZpZXJFakVMbTE2RUVF
UE5TNl9JTlM1XzZSZWZQdHJJTlNfMTJGdW5jRGVjbE5vZGVFRUVMbTE2RUVFUE5TXzE0U291cmNl
UHJvdmlkZXJFYmJiaQorX19aTjNKU0MxMVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0dsb2Jh
bERhdGFFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySU5TXzEwSWRl
bnRpZmllckVqRUxtMTZFRUVQTlM2X0lOUzVfNlJlZlB0cklOU18xMkZ1bmNEZWNsTm9kZUVFRUxt
MTZFRUVSS05TXzExU291cmNlUmFuZ2VFYmJiaQogX19aTjNKU0MxMVByb3BlcnR5TWFwM3B1dEVS
S05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFamJQTlNfOEpTT2JqZWN0RVJOU18xNVB1dFBy
b3BlcnR5U2xvdEVSUFM1XwogX19aTjNKU0MxMVByb3BlcnR5TWFwOWdldE9mZnNldEVSS05TXzEw
SWRlbnRpZmllckVSagogX19aTjNKU0MxMVByb3BlcnR5TWFwRDFFdgpAQCAtMjAwLDcgKzE5OSw3
IEBAIF9fWk4zSlNDNkpTTG9jazRsb2NrRWIKIF9fWk4zSlNDNkpTTG9jazZ1bmxvY2tFYgogX19a
TjNKU0M2SlNMb2NrOWxvY2tDb3VudEV2CiBfX1pOM0pTQzZKU0xvY2tDMUVQTlNfOUV4ZWNTdGF0
ZUUKLV9fWk4zSlNDNlBhcnNlcjVwYXJzZUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRWlO
M1dURjEwUGFzc1JlZlB0cklOU18xNFNvdXJjZVByb3ZpZGVyRUVFUGlTQV9QUzNfCitfX1pOM0pT
QzZQYXJzZXI1cGFyc2VFUE5TXzlFeGVjU3RhdGVFUGlQTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzZz
dHJ0b2RFUEtjUFBjCiBfX1pOM0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRVBOU183SlNWYWx1ZUUK
IF9fWk4zSlNDN0NTdHJpbmdEMUV2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24g
MzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJjb21wbGV0
aW9uLmgiCiAjaW5jbHVkZSAiT3BhcXVlSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTb3VyY2VSYW5n
ZS5oIgogI2luY2x1ZGUgPGtqcy9FeGVjU3RhdGUuaD4KICNpbmNsdWRlIDxranMvSW5pdGlhbGl6
ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPGtqcy9pbnRlcnByZXRlci5oPgpAQCAtNDksNyArNTAs
OCBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAKICAgICAvLyBJ
bnRlcnByZXRlcjo6ZXZhbHVhdGUgc2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYg
aXQgaXMgTlVMTAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSW50ZXJwcmV0
ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmds
b2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlVVJMLT51c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJl
ciwgc2NyaXB0LT51c3RyaW5nKCksIGpzVGhpc09iamVjdCk7CisgICAgU291cmNlUmFuZ2Ugc291
cmNlUmFuZ2UoVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2NyaXB0LT51c3RyaW5nKCks
IHNvdXJjZVVSTC0+dXN0cmluZygpKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDb21wbGV0
aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VSYW5nZSwg
anNUaGlzT2JqZWN0KTsKIAogICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93
KSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCkBAIC03MCw3ICs3Miw4IEBAIGJvb2wgSlNDaGVj
a1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3QKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVh
cC0+cmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIENvbXBs
ZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpjaGVja1N5bnRheChleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgc291cmNlVVJMLT51c3RyaW5nKCksIHN0YXJ0
aW5nTGluZU51bWJlciwgc2NyaXB0LT51c3RyaW5nKCkpOworICAgIFNvdXJjZVJhbmdlIHNvdXJj
ZVJhbmdlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNjcmlwdC0+dXN0cmluZygpLCBz
b3VyY2VVUkwtPnVzdHJpbmcoKSksIHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgQ29tcGxldGlv
biBjb21wbGV0aW9uID0gSW50ZXJwcmV0ZXI6OmNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBzb3VyY2VSYW5nZSk7CiAgICAgaWYgKGNvbXBsZXRp
b24uY29tcGxUeXBlKCkgPT0gVGhyb3cpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihjb21wbGV0aW9uLnZhbHVlKCkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Vk0vQ29kZUJsb2NrLmgJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxNiArMTU1LDE2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgICAgIGV2YWxOb2RlID0gY2FjaGVNYXAuZ2V0KGV2YWxTb3VyY2Uu
cmVwKCkpOwogCiAgICAgICAgICAgICBpZiAoIWV2YWxOb2RlKSB7Ci0gICAgICAgICAgICAgICAg
aW50IHNvdXJjZUlkOwogICAgICAgICAgICAgICAgIGludCBlcnJMaW5lOwogICAgICAgICAgICAg
ICAgIFVTdHJpbmcgZXJyTXNnOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGV2
YWxOb2RlID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPihleGVjLCBVU3RyaW5nKCks
IDEsIFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGV2YWxTb3VyY2UpLCAmc291cmNlSWQs
ICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VSYW5nZSBzb3VyY2VS
YW5nZShVU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShldmFsU291cmNlLCBVU3RyaW5nKCkp
LCAxKTsKKyAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxF
dmFsTm9kZT4oZXhlYywgc291cmNlUmFuZ2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKICAgICAgICAg
ICAgICAgICBpZiAoZXZhbE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWxTb3Vy
Y2Uuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlU291cmNlTGVuZ3RoICYmICgqc2NvcGVDaGFpbi0+YmVn
aW4oKSktPmlzVmFyaWFibGVPYmplY3QoKSAmJiBjYWNoZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVu
dHJpZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZU1hcC5zZXQoZXZhbFNvdXJjZS5y
ZXAoKSwgZXZhbE5vZGUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvblZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwg
ZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBl
cnJMaW5lLCBzb3VyY2VSYW5nZS5wcm92aWRlcigpLT5hc0lkKCksIE5VTEwpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC0xOTYsNiArMTk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIHNvdXJjZShz
b3VyY2VfKQogICAgICAgICAgICAgLCBzb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0XykKICAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICB+
Q29kZUJsb2NrKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzExLDE2ICszMTEsMTcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRv
cihGdW5jdGlvbkJvZAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgp
OyArK2kpCiAgICAgICAgIGFkZFZhcih2YXJTdGFja1tpXS5maXJzdCwgdmFyU3RhY2tbaV0uc2Vj
b25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOwogCi0gICAgVmVjdG9yPElkZW50
aWZpZXI+JiBwYXJhbWV0ZXJzID0gZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCk7Ci0gICAgbV9u
ZXh0UGFyYW1ldGVyID0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIHBhcmFt
ZXRlcnMuc2l6ZSgpIC0gMTsKLSAgICBtX3BhcmFtZXRlcnMucmVzaXplKDEgKyBwYXJhbWV0ZXJz
LnNpemUoKSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgorICAgIGNvbnN0IElkZW50aWZp
ZXIqIHBhcmFtZXRlcnMgPSBmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsKKyAgICBzaXplX3Qg
cGFyYW1ldGVyQ291bnQgPSBmdW5jdGlvbkJvZHktPnBhcmFtZXRlckNvdW50KCk7CisgICAgbV9u
ZXh0UGFyYW1ldGVyID0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIHBhcmFt
ZXRlckNvdW50IC0gMTsKKyAgICBtX3BhcmFtZXRlcnMucmVzaXplKDEgKyBwYXJhbWV0ZXJDb3Vu
dCk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgogCiAgICAgLy8gQWRkICJ0aGlzIiBhcyBh
IHBhcmFtZXRlcgogICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KG1fbmV4dFBhcmFtZXRlcik7
CiAgICAgKyttX25leHRQYXJhbWV0ZXI7CiAgICAgKyttX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
czsKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytpKQogICAg
ICAgICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyc1tpXSk7CiAKICAgICBhbGxvY2F0ZUNvbnN0YW50
cyhmdW5jdGlvbkJvZHktPm5lZWRlZENvbnN0YW50cygpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHN0cnVjdCBBcmd1bWVudHNE
YXRhIDogTm9uY29weWFibGUgewogLy8gRUNNQSAxMC4xLjgKIEFyZ3VtZW50czo6QXJndW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiwgaW50IGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJn
YykKICAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRz
U3RydWN0dXJlKCkpCi0gICAgLCBkKG5ldyBBcmd1bWVudHNEYXRhKGFjdGl2YXRpb24sIGZ1bmN0
aW9uLT5udW1QYXJhbWV0ZXJzKCksIGZpcnN0UGFyYW1ldGVySW5kZXgsIGFyZ2MsIGZ1bmN0aW9u
KSkKKyAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEoYWN0aXZhdGlvbiwgZnVuY3Rpb24tPm1fYm9k
eS0+cGFyYW1ldGVyQ291bnQoKSwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJnYywgZnVuY3Rpb24p
KQogewogICAgIEFTU0VSVChhY3RpdmF0aW9uKTsKICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTMgKzcw
LDEyIEBAIEpTVmFsdWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb24KIAogICAgIEV4
ZWNTdGF0ZSBuZXdFeGVjKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCksIG1fcmVnaXN0ZXJz
KTsKIAotICAgIGludCBzb3VyY2VJZDsKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVy
ck1zZzsKLSAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gVVN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2NyaXB0KTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2
YWxOb2RlID0gbmV3RXhlYy5wYXJzZXIoKS0+cGFyc2U8RXZhbE5vZGU+KCZuZXdFeGVjLCBVU3Ry
aW5nKCksIDEsIHNvdXJjZVByb3ZpZGVyLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsK
KyAgICBTb3VyY2VSYW5nZSBzb3VyY2VSYW5nZShVU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0
ZShzY3JpcHQsIFVTdHJpbmcoKSksIDEpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUg
PSBuZXdFeGVjLnBhcnNlcigpLT5wYXJzZTxFdmFsTm9kZT4oJm5ld0V4ZWMsIHNvdXJjZVJhbmdl
LCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFldmFsTm9kZSkKLSAgICAgICAgcmV0dXJu
IEVycm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNv
dXJjZUlkLCAwKTsKKyAgICAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5bnRh
eEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZVJhbmdlLnByb3ZpZGVyKCktPmFzSWQoKSwg
c291cmNlUmFuZ2UucHJvdmlkZXIoKS0+dXJsKCkpOwogCiAgICAgcmV0dXJuIG5ld0V4ZWMubWFj
aGluZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywgdGhpc09iamVjdCgpLCBt
X3Njb3BlQ2hhaW4sICZleGNlcHRpb24pOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0Z1
bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9G
dW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDI4ICs4
NCwyMyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBlCiAgICAgfQog
CiAgICAgLy8gcGFyc2UgdGhlIHNvdXJjZSBjb2RlCi0gICAgaW50IHNvdXJjZUlkOwogICAgIGlu
dCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwotICAgIFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlID0gVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoYm9keSk7Ci0gICAgUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJz
ZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIHNvdXJjZSwg
JnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgU291cmNlUmFuZ2Ugc291cmNlUmFu
Z2UoVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoYm9keSwgc291cmNlVVJMKSwgbGluZU51
bWJlcik7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9IGV4ZWMt
PnBhcnNlcigpLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCBzb3VyY2VSYW5nZSwgJmVy
ckxpbmUsICZlcnJNc2cpOwogCiAgICAgLy8gTm8gcHJvZ3JhbSBub2RlID09IHN5bnRheCBlcnJv
ciAtIHRocm93IGEgc3ludGF4IGVycm9yCiAgICAgaWYgKCFmdW5jdGlvbkJvZHkpCiAgICAgICAg
IC8vIFdlIGNhbid0IHJldHVybiBhIENvbXBsZXRpb24oVGhyb3cpIGhlcmUsIHNvIGp1c3Qgc2V0
IHRoZSBleGNlcHRpb24KICAgICAgICAgLy8gYW5kIHJldHVybiBpdAotICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwg
c291cmNlVVJMKTsKLSAgICAKLSAgICBmdW5jdGlvbkJvZHktPnNldFNvdXJjZShTb3VyY2VSYW5n
ZShzb3VyY2UsIDAsIHNvdXJjZS0+bGVuZ3RoKCkpKTsKLSAgICBTY29wZUNoYWluIHNjb3BlQ2hh
aW4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSk7
Ci0KLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQm9keS5nZXQoKSwgc2NvcGVDaGFpbi5ub2RlKCkpOwor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJM
aW5lLCBzb3VyY2VSYW5nZS5wcm92aWRlcigpLT5hc0lkKCksIHNvdXJjZVJhbmdlLnByb3ZpZGVy
KCktPnVybCgpKTsKIAogICAgIC8vIHBhcnNlIHBhcmFtZXRlciBsaXN0LiB0aHJvdyBzeW50YXgg
ZXJyb3Igb24gaWxsZWdhbCBpZGVudGlmaWVycwogICAgIGludCBsZW4gPSBwLnNpemUoKTsKICAg
ICBjb25zdCBVQ2hhciogYyA9IHAuZGF0YSgpOwotICAgIGludCBpID0gMCwgcGFyYW1zID0gMDsK
KyAgICBpbnQgaSA9IDA7CiAgICAgVVN0cmluZyBwYXJhbTsKKyAgICBWZWN0b3I8SWRlbnRpZmll
cj4gcGFyYW1ldGVyczsKICAgICB3aGlsZSAoaSA8IGxlbikgewogICAgICAgICB3aGlsZSAoKmMg
PT0gJyAnICYmIGkgPCBsZW4pCiAgICAgICAgICAgICBjKyssIGkrKzsKQEAgLTExOSwxOSArMTE0
LDIyIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihFeGVjU3RhdGUqIGUKICAgICAgICAg
ICAgIHdoaWxlIChpIDwgbGVuICYmICpjID09ICcgJykKICAgICAgICAgICAgICAgICBjKyssIGkr
KzsKICAgICAgICAgICAgIGlmIChpID09IGxlbikgewotICAgICAgICAgICAgICAgIGZ1bmN0aW9u
Qm9keS0+cGFyYW1ldGVycygpLmFwcGVuZChJZGVudGlmaWVyKGV4ZWMsIHBhcmFtKSk7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zKys7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
SWRlbnRpZmllcihleGVjLCBwYXJhbSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfSBlbHNlIGlmICgqYyA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkJv
ZHktPnBhcmFtZXRlcnMoKS5hcHBlbmQoSWRlbnRpZmllcihleGVjLCBwYXJhbSkpOwotICAgICAg
ICAgICAgICAgIHBhcmFtcysrOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKElk
ZW50aWZpZXIoZXhlYywgcGFyYW0pKTsKICAgICAgICAgICAgICAgICBjKyssIGkrKzsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0gLy8gZWxzZSBlcnJvcgogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiU3ludGF4
IGVycm9yIGluIHBhcmFtZXRlciBsaXN0Iik7CiAgICAgfQotICAKKyAgICBzaXplX3QgY291bnQg
PSBwYXJhbWV0ZXJzLnNpemUoKTsKKyAgICBmdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmcoc291
cmNlUmFuZ2UsIHBhcmFtZXRlcnMucmVsZWFzZUJ1ZmZlcigpLCBjb3VudCk7CisKKyAgICBTY29w
ZUNoYWluIHNjb3BlQ2hhaW4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5nbG9i
YWxUaGlzVmFsdWUoKSk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpT
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkJvZHkuZ2V0KCksIHNjb3BlQ2hh
aW4ubm9kZSgpKTsKKwogICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKICAgICBwcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uLCBEb250RW51bSk7CiAgICAgZnVuY3Rpb24tPnB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxl
dGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMzcxNDQpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDcgQEAgSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdAogSlNW
YWx1ZSogSlNGdW5jdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0Z1bmN0aW9uKiB0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRoaXNPYmotPm1fYm9keS0+cGFyYW1ldGVycygpLnNpemUo
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRoaXNPYmotPm1fYm9keS0+cGFyYW1ldGVy
Q291bnQoKSk7CiB9CiAKIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkBAIC0xMzEsMTUgKzEzMSwxNSBAQCBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3Bl
cnR5KEV4ZWNTdGF0CiAgKi8KIGNvbnN0IElkZW50aWZpZXImIEpTRnVuY3Rpb246OmdldFBhcmFt
ZXRlck5hbWUoaW50IGluZGV4KQogewotICAgIFZlY3RvcjxJZGVudGlmaWVyPiYgcGFyYW1ldGVy
cyA9IG1fYm9keS0+cGFyYW1ldGVycygpOworICAgIGNvbnN0IElkZW50aWZpZXIqIHBhcmFtZXRl
cnMgPSBtX2JvZHktPnBhcmFtZXRlcnMoKTsKIAotICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+
KGluZGV4KSA+PSBtX2JvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpCisgICAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdD4oaW5kZXgpID49IG1fYm9keS0+cGFyYW1ldGVyQ291bnQoKSkKICAgICAgICAg
cmV0dXJuIG1fc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT5wcm9wZXJ0
eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSA9
IHBhcmFtZXRlcnNbaW5kZXhdOwogCiAgICAgLy8gQXJlIHRoZXJlIGFueSBzdWJzZXF1ZW50IHBh
cmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lPwotICAgIHNpemVfdCBzaXplID0gcGFyYW1ldGVy
cy5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBtX2JvZHktPnBhcmFtZXRlckNvdW50KCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IGluZGV4ICsgMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBp
ZiAocGFyYW1ldGVyc1tpXSA9PSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGVDaGFp
bi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRp
ZmllcjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMzcxNDQpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSAr
NTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZHVlIHRvIGEgbGF0ZXIgcGFyYW1l
dGVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgZ2V0UGFy
YW1ldGVyTmFtZShpbnQgaW5kZXgpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ib2R5LT5wYXJhbWV0ZXJz
KCkuc2l6ZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBzZXRTY29wZShjb25zdCBTY29w
ZUNoYWluJiBzY29wZUNoYWluKSB7IG1fc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW47IH0KICAgICAg
ICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlQ2hhaW47IH0KIApJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZp
c2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MiwxNCArMjgyLDE0IEBAIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywKIAogICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5n
KGV4ZWMpOwogCi0gICAgaW50IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJp
bmcgZXJyTXNnOwogCi0gICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGV4ZWMtPnBhcnNl
cigpLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgVVN0cmluZygpLCAxLCBVU3RyaW5nU291cmNlUHJv
dmlkZXI6OmNyZWF0ZShzKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgU291
cmNlUmFuZ2Ugc291cmNlUmFuZ2UoVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUocywgVVN0
cmluZygpKSwgMSk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGV4ZWMtPnBhcnNl
cigpLT5wYXJzZTxFdmFsTm9kZT4oZXhlYywgc291cmNlUmFuZ2UsICZlcnJMaW5lLCAmZXJyTXNn
KTsKIAogICAgIGlmICghZXZhbE5vZGUpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291
cmNlUmFuZ2UucHJvdmlkZXIoKS0+YXNJZCgpLCBOVUxMKTsKIAogICAgIHJldHVybiBleGVjLT5t
YWNoaW5lKCktPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgp
KTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuY3BwCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNCArMzIsMTMg
QEAgZXh0ZXJuIGludCBranN5eXBhcnNlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVBh
cnNlcjo6UGFyc2VyKCkKLSAgICA6IG1fc291cmNlSWQoMCkKLXsKLX0KLQotdm9pZCBQYXJzZXI6
OnBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBwcnBTb3VyY2UsCi0g
ICAgICAgICAgICAgICAgICAgaW50KiBzb3VyY2VJZCwgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBl
cnJNc2cpCit2b2lkIFBhcnNlcjo6cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBpbnQqIGVyckxpbmUs
IFVTdHJpbmcqIGVyck1zZykKIHsKICAgICBBU1NFUlQoIW1fc291cmNlRWxlbWVudHMpOwogCi0g
ICAgaW50IGRlZmF1bHRTb3VyY2VJZDsKICAgICBpbnQgZGVmYXVsdEVyckxpbmU7CiAgICAgVVN0
cmluZyBkZWZhdWx0RXJyTXNnOwogCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2Ug
PSBwcnBTb3VyY2U7Ci0KLSAgICBpZiAoIXNvdXJjZUlkKQotICAgICAgICBzb3VyY2VJZCA9ICZk
ZWZhdWx0U291cmNlSWQ7CiAgICAgaWYgKCFlcnJMaW5lKQogICAgICAgICBlcnJMaW5lID0gJmRl
ZmF1bHRFcnJMaW5lOwogICAgIGlmICghZXJyTXNnKQpAQCAtNjAsMTEgKzQ5LDcgQEAgdm9pZCBQ
YXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29ucwogCiAgICAgTGV4ZXImIGxleGVyID0g
KmV4ZWMtPmxleGVyKCk7CiAKLSAgICBpZiAoc3RhcnRpbmdMaW5lTnVtYmVyIDw9IDApCi0gICAg
ICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IDE7Ci0KLSAgICBsZXhlci5zZXRDb2RlKHN0YXJ0aW5n
TGluZU51bWJlciwgc291cmNlKTsKLSAgICAqc291cmNlSWQgPSArK21fc291cmNlSWQ7CisgICAg
bGV4ZXIuc2V0Q29kZShtX3NvdXJjZVJhbmdlKTsKIAogICAgIGludCBwYXJzZUVycm9yID0ga2pz
eXlwYXJzZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICBib29sIGxleEVycm9yID0gbGV4ZXIu
c2F3RXJyb3IoKTsKQEAgLTc5LDcgKzY0LDcgQEAgdm9pZCBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0
ZSogZXhlYywgY29ucwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgICAgIGRlYnVnZ2VyLT5z
b3VyY2VQYXJzZWQoZXhlYywgKnNvdXJjZUlkLCBzb3VyY2VVUkwsICpzb3VyY2UsIHN0YXJ0aW5n
TGluZU51bWJlciwgKmVyckxpbmUsICplcnJNc2cpOworICAgICAgICBkZWJ1Z2dlci0+c291cmNl
UGFyc2VkKGV4ZWMsICptX3NvdXJjZVJhbmdlLCAqZXJyTGluZSwgKmVyck1zZyk7CiB9CiAKIHZv
aWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50
cywgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFy
U3RhY2ssIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuaAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDI1ICs0OCwxOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFBhcnNlciA6IE5vbmNvcHlhYmxlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotICAgICAgICBQYXNz
UmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc291cmNl
SWQgPSAwLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKLQotICAgICAg
ICBVU3RyaW5nIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9Ci0gICAg
ICAgIGludCBzb3VyY2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSWQ7IH0KKyAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2Uo
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIGludCogZXJyTGluZSA9IDAs
IFVTdHJpbmcqIGVyck1zZyA9IDApOworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9k
ZT4gUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VS
YW5nZSYsIGludCogZXJyTGluZSA9IDAsIFVTdHJpbmcqIGVyck1zZyA9IDApOwogCiAgICAgICAg
IHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlclJlZkNvdW50ZWRE
YXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlv
blN0YWNrPiosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1
bWVudHMsIGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgICAgICBQYXJzZXIoKTsKIAot
ICAgICAgICB2b2lkIHBhcnNlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
LAotICAgICAgICAgICAgICAgICAgIGludCogc291cmNlSWQsIGludCogZXJyTGluZSwgVVN0cmlu
ZyogZXJyTXNnKTsKKyAgICAgICAgdm9pZCBwYXJzZShFeGVjU3RhdGUqLCBpbnQqIGVyckxpbmUs
IFVTdHJpbmcqIGVyck1zZyk7CiAKLSAgICAgICAgVVN0cmluZyBtX3NvdXJjZVVSTDsKLSAgICAg
ICAgaW50IG1fc291cmNlSWQ7CisgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlKiBtX3NvdXJjZVJh
bmdlOwogICAgICAgICBSZWZQdHI8U291cmNlRWxlbWVudHM+IG1fc291cmNlRWxlbWVudHM7CiAg
ICAgICAgIFJlZlB0cjxQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2s+ID4gbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFJlZlB0cjxQYXJzZXJSZWZDb3Vu
dGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4gPiBtX2Z1bmNEZWNsYXJh
dGlvbnM7CkBAIC03NywzMSArNzAsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBt
X251bUNvbnN0YW50czsKICAgICB9OwogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+
Ci0gICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogc291cmNlSWQsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJy
TXNnKQorICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5v
ZGU+IFBhcnNlcjo6cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyPiBwcm92aWRlciwgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBlcnJNc2cpCisgICAgeworICAg
ICAgICByZXR1cm4gcGFyc2U8UGFyc2VkTm9kZT4oZXhlYywgU291cmNlUmFuZ2UocHJvdmlkZXIs
IDEpLCBlcnJMaW5lLCBlcnJNc2cpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
UGFyc2VkTm9kZT4gUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU291cmNlUmFuZ2UmIHNvdXJjZSwgaW50KiBlcnJMaW5lLCBVU3RyaW5n
KiBlcnJNc2cpCiAgICAgewotICAgICAgICBtX3NvdXJjZVVSTCA9IHNvdXJjZVVSTDsKLSAgICAg
ICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IHNvdXJjZTsKLSAgICAg
ICAgcGFyc2UoZXhlYywgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZVByb3Zp
ZGVyLmdldCgpLCBzb3VyY2VJZCwgZXJyTGluZSwgZXJyTXNnKTsKLSAgICAgICAgaWYgKCFtX3Nv
dXJjZUVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBtX3NvdXJjZVVSTCA9IFVTdHJpbmcoKTsKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBtX3NvdXJjZVJhbmdlID0gJnNvdXJjZTsKKyAg
ICAgICAgcGFyc2UoZXhlYywgZXJyTGluZSwgZXJyTXNnKTsKKyAgICAgICAgUmVmUHRyPFBhcnNl
ZE5vZGU+IHJlc3VsdDsKKyAgICAgICAgaWYgKG1fc291cmNlRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLmdl
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xh
cmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVj
bGFyYXRpb25zLT5kYXRhIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKm1fc291cmNlUmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdXNlc0V2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbmVlZHNDbG9zdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3VzZXNBcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291
cmNlUmFuZ2UtPmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lKTsKICAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8UGFyc2VkTm9kZT4gbm9kZSA9IFBhcnNlZE5vZGU6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFs
RGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3NvdXJjZUVsZW1lbnRzLnJlbGVhc2UoKS5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMgPyAm
bV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVuY0Rl
Y2xhcmF0aW9ucy0+ZGF0YSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZVByb3ZpZGVyLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VzZXNFdmFsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25lZWRzQ2xv
c3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV91c2VzQXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7CisKKyAgICAgICAgbV9zb3VyY2VSYW5n
ZSA9IDA7CisgICAgICAgIG1fc291cmNlRWxlbWVudHMgPSAwOwogICAgICAgICBtX3ZhckRlY2xh
cmF0aW9ucyA9IDA7CiAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7Ci0gICAgICAgIG1f
c291cmNlVVJMID0gVVN0cmluZygpOwotICAgICAgICBub2RlLT5zZXRMb2Moc3RhcnRpbmdMaW5l
TnVtYmVyLCBtX2xhc3RMaW5lKTsKLSAgICAgICAgcmV0dXJuIG5vZGUucmVsZWFzZSgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9TaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQsOCBAQCBKU1Zh
bHVlKiBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKIAogICAgIHN0b3BX
YXRjaC5zdGFydCgpOwotICAgIEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIGZpbGVOYW1lLCAx
LCBzY3JpcHQuZGF0YSgpKTsKKyAgICBTb3VyY2VSYW5nZSBzb3VyY2VSYW5nZShVU3RyaW5nU291
cmNlUHJvdmlkZXI6OmNyZWF0ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIDEpOworICAgIElu
dGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZVJhbmdlKTsKICAgICBzdG9wV2F0Y2guc3Rv
cCgpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBz
dG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOwpAQCAtMjQ4LDcgKzI0OSw4IEBAIEpTVmFsdWUqIGZ1
bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgR2VuZXJhbEVycm9yLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsKIAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7Ci0g
ICAgSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9i
YWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgZmlsZU5hbWUsIDEsIHNjcmlwdC5kYXRhKCkp
OworICAgIFNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3Jl
YXRlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgMSk7CisgICAgSW50ZXJwcmV0ZXI6OmV2YWx1
YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgc291cmNlUmFuZ2UpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBA
IC0zMTksOCArMzIxLDggQEAgc3RhdGljIGJvb2wgcHJldHR5UHJpbnRTY3JpcHQoRXhlY1N0YXRl
KgogewogICAgIGludCBlcnJMaW5lID0gMDsKICAgICBVU3RyaW5nIGVyck1zZzsKLSAgICBVU3Ry
aW5nIHNjcmlwdFVTdHJpbmcoc2NyaXB0LmRhdGEoKSk7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2Rl
PiBwcm9ncmFtTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxQcm9ncmFtTm9kZT4oZXhlYywg
ZmlsZU5hbWUsIDEsIFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNjcmlwdFVTdHJpbmcp
LCAwLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgU291cmNlUmFuZ2Ugc291cmNlUmFuZ2UoVVN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCAxKTsK
KyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZXhlYy0+cGFyc2VyKCktPnBh
cnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2VSYW5nZSwgJmVyckxpbmUsICZlcnJNc2cpOwog
ICAgIGlmICghcHJvZ3JhbU5vZGUpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDog
JXMuXG4iLCBmaWxlTmFtZS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgZXJyTGluZSwgZXJyTXNnLlVU
RjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzUzLDcgKzM1
NSw4IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAg
aWYgKHByZXR0eVByaW50KQogICAgICAgICAgICAgcHJldHR5UHJpbnRTY3JpcHQoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lLCBzY3JpcHQpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWlu
KCksIGZpbGVOYW1lLCAxLCBzY3JpcHQuZGF0YSgpKTsKKyAgICAgICAgICAgIFNvdXJjZVJhbmdl
IHNvdXJjZVJhbmdlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNjcmlwdC5kYXRhKCks
IGZpbGVOYW1lKSwgMSk7CisgICAgICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRl
cnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VSYW5nZSk7CiAgICAgICAgICAgICBzdWNjZXNz
ID0gc3VjY2VzcyAmJiBjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IFRocm93OwogICAgICAgICAg
ICAgaWYgKGR1bXApIHsKICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUo
KSA9PSBUaHJvdykKQEAgLTM4Myw3ICszODYsOCBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2
ZShHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGxpbmVbMF0p
CiAgICAgICAgICAgICBhZGRfaGlzdG9yeShsaW5lKTsKLSAgICAgICAgQ29tcGxldGlvbiBjb21w
bGV0aW9uID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgaW50ZXJwcmV0ZXJOYW1lLCAxLCBs
aW5lKTsKKyAgICAgICAgU291cmNlUmFuZ2Ugc291cmNlUmFuZ2UoVVN0cmluZ1NvdXJjZVByb3Zp
ZGVyOjpjcmVhdGUobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSwgMSk7CisgICAgICAgIENvbXBsZXRp
b24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZVJhbmdlKTsK
ICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHB1dHMoaW50ZXJhY3RpdmVQcm9t
cHQpOwpAQCAtMzk2LDcgKzQwMCw4IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2Jh
bE9iamVjdCoKICAgICAgICAgICAgIGxpbmUuYXBwZW5kKGMpOwogICAgICAgICB9CiAgICAgICAg
IGxpbmUuYXBwZW5kKCdcMCcpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRl
cnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBpbnRlcnByZXRlck5hbWUsIDEsIGxpbmUuZGF0YSgpKTsK
KyAgICAgICAgU291cmNlUmFuZ2Ugc291cmNlUmFuZ2UoVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpj
cmVhdGUobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIDEpOworICAgICAgICBDb21wbGV0
aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VSYW5nZSk7
CiAjZW5kaWYKICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0gVGhyb3cpCiAg
ICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS0+
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLmFzY2lpKCkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE3ICszNiwy
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8U291cmNlUHJvdmlkZXI+IHsKICAgICBwdWJsaWM6CisgICAgICAgIFNvdXJj
ZVByb3ZpZGVyKGNvbnN0IFVTdHJpbmcmIHVybCkKKyAgICAgICAgICAgIDogbV91cmwodXJsKQor
ICAgICAgICB7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+U291cmNlUHJvdmlkZXIoKSB7
IH0KKwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCA9
IDA7CiAgICAgICAgIHZpcnR1YWwgaW50IGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IFVTdHJpbmcmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9CisgICAgICAgIGlu
dCBhc0lkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFVTdHJpbmcgbV91cmw7CiAgICAgfTsKIAogICAgIGNsYXNz
IFVTdHJpbmdTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBTb3VyY2VQcm92aWRlciB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVU3RyaW5nU291cmNlUHJvdmlkZXI+IGNy
ZWF0ZShjb25zdCBVU3RyaW5nJiBzb3VyY2UpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVT
dHJpbmdTb3VyY2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3Qg
VVN0cmluZyYgdXJsKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFVTdHJpbmdTb3VyY2VQcm92aWRlcihzb3VyY2UpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVVN0cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwgdXJsKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2Uuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KQEAgLTU0LDggKzY1
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZS5zaXplKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFVTdHJpbmdTb3Vy
Y2VQcm92aWRlcihjb25zdCBVU3RyaW5nJiBzb3VyY2UpCi0gICAgICAgICAgICA6IG1fc291cmNl
KHNvdXJjZSkKKyAgICAgICAgVVN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFVTdHJpbmcmIHNv
dXJjZSwgY29uc3QgVVN0cmluZyYgdXJsKQorICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcih1
cmwpCisgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgewogICAgICAgICB9
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Tb3VyY2VSYW5nZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9Tb3VyY2VSYW5nZS5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9Tb3VyY2VSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzMCAr
MzYsNDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTb3VyY2VSYW5nZSB7CiAgICAg
cHVibGljOgotICAgICAgICBTb3VyY2VSYW5nZShQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBw
cm92aWRlciwgaW50IHN0YXJ0LCBpbnQgZW5kKQotICAgICAgICAgICAgOiBtX3NvdXJjZVByb3Zp
ZGVyKHByb3ZpZGVyKQotICAgICAgICAgICAgLCBtX3N0YXJ0Q2hhcihzdGFydCkKLSAgICAgICAg
ICAgICwgbV9lbmRDaGFyKGVuZCkKKyAgICAgICAgU291cmNlUmFuZ2UoKQorICAgICAgICAgICAg
OiBtX3N0YXJ0Q2hhcigwKQorICAgICAgICAgICAgLCBtX2VuZENoYXIoMCkKKyAgICAgICAgICAg
ICwgbV9maXJzdExpbmUoMCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgU291cmNl
UmFuZ2UoKQorICAgICAgICBTb3VyY2VSYW5nZShQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBw
cm92aWRlciwgaW50IGZpcnN0TGluZSkKKyAgICAgICAgICAgIDogbV9wcm92aWRlcihwcm92aWRl
cikKKyAgICAgICAgICAgICwgbV9zdGFydENoYXIoMCkKKyAgICAgICAgICAgICwgbV9lbmRDaGFy
KG1fcHJvdmlkZXItPmxlbmd0aCgpKQorICAgICAgICAgICAgLCBtX2ZpcnN0TGluZShzdGQ6Om1h
eChmaXJzdExpbmUsIDEpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTb3VyY2VS
YW5nZShQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBwcm92aWRlciwgaW50IHN0YXJ0LCBpbnQg
ZW5kLCBpbnQgZmlyc3RMaW5lKQorICAgICAgICAgICAgOiBtX3Byb3ZpZGVyKHByb3ZpZGVyKQor
ICAgICAgICAgICAgLCBtX3N0YXJ0Q2hhcihzdGFydCkKKyAgICAgICAgICAgICwgbV9lbmRDaGFy
KGVuZCkKKyAgICAgICAgICAgICwgbV9maXJzdExpbmUoc3RkOjptYXgoZmlyc3RMaW5lLCAxKSkK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVVN0cmluZyB0b1N0cmluZygpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9zb3VyY2VQcm92aWRlcikKKyAgICAgICAg
ICAgIGlmICghbV9wcm92aWRlcikKICAgICAgICAgICAgICAgICByZXR1cm4gVVN0cmluZygpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlUHJvdmlkZXItPmdldFJhbmdlKG1fc3RhcnRDaGFy
LCBtX2VuZENoYXIpOworICAgICAgICAgICAgcmV0dXJuIG1fcHJvdmlkZXItPmdldFJhbmdlKG1f
c3RhcnRDaGFyLCBtX2VuZENoYXIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTb3Vy
Y2VQcm92aWRlciogc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVByb3Zp
ZGVyLmdldCgpOyB9CisgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvdmlkZXIuZ2V0KCk7IH0KKyAgICAgICAgaW50IGZpcnN0TGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9CiAgICAgICAgIGludCBzdGFydE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRDaGFyOyB9CisgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9wcm92aWRlci0+ZGF0YSgpICsgbV9zdGFydENoYXI7IH0KKyAgICAgICAg
aW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ2hhciAtIG1fc3RhcnRDaGFyOyB9CisK
ICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlUHJv
dmlkZXI7CisgICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9wcm92aWRlcjsKICAgICAg
ICAgaW50IG1fc3RhcnRDaGFyOwogICAgICAgICBpbnQgbV9lbmRDaGFyOworICAgICAgICBpbnQg
bV9maXJzdExpbmU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvZGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
ZGVidWdnZXIuaAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZGVidWdn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7Ci0gICAgY2xhc3MgU291cmNlUHJvdmlkZXI7CisgICAgY2xhc3Mg
U291cmNlUmFuZ2U7CiAgICAgY2xhc3MgVVN0cmluZzsKIAogICAgIGNsYXNzIERlYnVnZ2VyIHsK
QEAgLTQwLDggKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYXR0YWNoKEpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgZGV0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBpbnQgc291cmNl
SWQsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTb3VyY2VQcm92aWRlciYsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGlu
dCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTXNnKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlUmFuZ2UmLCBpbnQg
ZXJyb3JMaW5lLCBjb25zdCBVU3RyaW5nJiBlcnJvck1zZykgPSAwOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNvdXJjZUlkLCBp
bnQgbGluZW5vKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubykgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNv
dXJjZUlkLCBpbnQgbGluZW5vKSA9IDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1h
ci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHJldmlzaW9u
IDM3MTQ0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5KQpA
QCAtMzEyLDkgKzMxMiw5IEBAIFByb3BlcnR5OgogICAgIElERU5UICc6JyBBc3NpZ25tZW50RXhw
ciAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4o
bmV3IFByb3BlcnR5Tm9kZShHTE9CQUxfREFUQSwgKiQxLCAkMy5tX25vZGUsIFByb3BlcnR5Tm9k
ZTo6Q29uc3RhbnQpLCAkMy5tX2ZlYXR1cmVJbmZvLCAkMy5tX251bUNvbnN0YW50cyk7IH0KICAg
fCBTVFJJTkcgJzonIEFzc2lnbm1lbnRFeHByICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUZl
YXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG5ldyBQcm9wZXJ0eU5vZGUoR0xPQkFMX0RBVEEsICok
MSwgJDMubV9ub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSwgJDMubV9mZWF0dXJlSW5mbywg
JDMubV9udW1Db25zdGFudHMpOyB9CiAgIHwgTlVNQkVSICc6JyBBc3NpZ25tZW50RXhwciAgICAg
ICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxQcm9wZXJ0eU5vZGUqPihuZXcgUHJv
cGVydHlOb2RlKEdMT0JBTF9EQVRBLCBJZGVudGlmaWVyKEdMT0JBTF9EQVRBLCBVU3RyaW5nOjpm
cm9tKCQxKSksICQzLm1fbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCksICQzLm1fZmVhdHVy
ZUluZm8sICQzLm1fbnVtQ29uc3RhbnRzKTsgfQotICB8IElERU5UIElERU5UICcoJyAnKScgT1BF
TkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVy
ZUluZm88UHJvcGVydHlOb2RlKj4obWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGdsb2Jh
bFB0ciwgKiQxLCAqJDIsIDAsICQ2LCBMRVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3KSksIENsb3N1
cmVGZWF0dXJlLCAwKTsgREJHKCQ2LCBANSwgQDcpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsg
fQorICB8IElERU5UIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJS
QUNFICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4obWFrZUdl
dHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGdsb2JhbFB0ciwgKiQxLCAqJDIsIDAsICQ2LCBMRVhF
Ui0+c291cmNlUmFuZ2UoJDUsICQ3LCBANS5maXJzdF9saW5lKSksIENsb3N1cmVGZWF0dXJlLCAw
KTsgREJHKCQ2LCBANSwgQDcpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQogICB8IElERU5U
IElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5
IENMT1NFQlJBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQk
ID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG1ha2VHZXR0ZXJPclNldHRl
clByb3BlcnR5Tm9kZShnbG9iYWxQdHIsICokMSwgKiQyLCAkNC5tX25vZGUuaGVhZCwgJDcsIExF
WEVSLT5zb3VyY2VSYW5nZSgkNiwgJDgpKSwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0
dXJlLCAwKTsgREJHKCQ3LCBANiwgQDgpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVh
dHVyZUluZm88UHJvcGVydHlOb2RlKj4obWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGds
b2JhbFB0ciwgKiQxLCAqJDIsICQ0Lm1fbm9kZS5oZWFkLCAkNywgTEVYRVItPnNvdXJjZVJhbmdl
KCQ2LCAkOCwgQDYuZmlyc3RfbGluZSkpLCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1
cmUsIDApOyBEQkcoJDcsIEA2LCBAOCk7IGlmICghJCQubV9ub2RlKSBZWUFCT1JUOyB9CiA7CiAK
IFByb3BlcnR5TGlzdDoKQEAgLTExNTcsMTYgKzExNTcsMTYgQEAgRGVidWdnZXJTdGF0ZW1lbnQ6
CiA7CiAKIEZ1bmN0aW9uRGVjbGFyYXRpb246Ci0gICAgRlVOQ1RJT04gSURFTlQgJygnICcpJyBP
UEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJl
SW5mbyhuZXcgRnVuY0RlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ2LCBMRVhFUi0+c291cmNl
UmFuZ2UoJDUsICQ3KSksICgoKiQyID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDApIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkco
JDYsIEA1LCBANyk7IH0KKyAgICBGVU5DVElPTiBJREVOVCAnKCcgJyknIE9QRU5CUkFDRSBGdW5j
dGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5j
RGVjbE5vZGUoR0xPQkFMX0RBVEEsICokMiwgJDYsIExFWEVSLT5zb3VyY2VSYW5nZSgkNSwgJDcs
IEA1LmZpcnN0X2xpbmUpKSwgKCgqJDIgPT0gR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCBDbG9zdXJlRmVhdHVyZSwgMCk7IERC
RygkNiwgQDUsIEA3KTsgfQogICB8IEZVTkNUSU9OIElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJM
aXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UKLSAgICAgIHsgJCQgPSBj
cmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNEZWNsTm9kZShHTE9CQUxfREFUQSwgKiQyLCAk
NywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCksICQ0Lm1fbm9kZS5oZWFkKSwgKCgqJDIgPT0g
R0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJl
IDogMCkgfCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcsIEA2
LCBAOCk7IH0KKyAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNEZWNs
Tm9kZShHTE9CQUxfREFUQSwgKiQyLCAkNywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCwgQDYu
Zmlyc3RfbGluZSksICQ0Lm1fbm9kZS5oZWFkKSwgKCgqJDIgPT0gR0xPQkFMX0RBVEEtPnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCAkNC5tX2ZlYXR1
cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcsIEA2LCBAOCk7IH0KIDsKIAogRnVu
Y3Rpb25FeHByOgotICAgIEZVTkNUSU9OICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBD
TE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShH
TE9CQUxfREFUQSwgR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCAk
NSwgTEVYRVItPnNvdXJjZVJhbmdlKCQ0LCAkNikpLCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygk
NSwgQDQsIEA2KTsgfQotICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBP
UEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJl
SW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCBHTE9CQUxfREFUQS0+cHJvcGVydHlO
YW1lcy0+bnVsbElkZW50aWZpZXIsICQ2LCBMRVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3KSwgJDMu
bV9ub2RlLmhlYWQpLCAkMy5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkco
JDYsIEA1LCBANyk7IH0KLSAgfCBGVU5DVElPTiBJREVOVCAnKCcgJyknIE9QRU5CUkFDRSBGdW5j
dGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5j
RXhwck5vZGUoR0xPQkFMX0RBVEEsICokMiwgJDYsIExFWEVSLT5zb3VyY2VSYW5nZSgkNSwgJDcp
KSwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDYsIEA1LCBANyk7IH0KLSAgfCBGVU5DVElPTiBJ
REVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBD
TE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShH
TE9CQUxfREFUQSwgKiQyLCAkNywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCksICQ0Lm1fbm9k
ZS5oZWFkKSwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgREJHKCQ3LCBA
NiwgQDgpOyB9CisgICAgRlVOQ1RJT04gJygnICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENM
T1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdM
T0JBTF9EQVRBLCBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsICQ1
LCBMRVhFUi0+c291cmNlUmFuZ2UoJDQsICQ2LCBANC5maXJzdF9saW5lKSksIENsb3N1cmVGZWF0
dXJlLCAwKTsgREJHKCQ1LCBANCwgQDYpOyB9CisgIHwgRlVOQ1RJT04gJygnIEZvcm1hbFBhcmFt
ZXRlckxpc3QgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3Jl
YXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xPQkFMX0RBVEEsIEdMT0JBTF9E
QVRBLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgJDYsIExFWEVSLT5zb3VyY2VSYW5n
ZSgkNSwgJDcsIEA1LmZpcnN0X2xpbmUpLCAkMy5tX25vZGUuaGVhZCksICQzLm1fZmVhdHVyZUlu
Zm8gfCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygkNiwgQDUsIEA3KTsgfQorICB8IEZVTkNUSU9O
IElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsgJCQgPSBj
cmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShHTE9CQUxfREFUQSwgKiQyLCAk
NiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNywgQDUuZmlyc3RfbGluZSkpLCBDbG9zdXJlRmVh
dHVyZSwgMCk7IERCRygkNiwgQDUsIEA3KTsgfQorICB8IEZVTkNUSU9OIElERU5UICcoJyBGb3Jt
YWxQYXJhbWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAk
JCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCAq
JDIsICQ3LCBMRVhFUi0+c291cmNlUmFuZ2UoJDYsICQ4LCBANi5maXJzdF9saW5lKSwgJDQubV9u
b2RlLmhlYWQpLCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcs
IEA2LCBAOCk7IH0KIDsKIAogRm9ybWFsUGFyYW1ldGVyTGlzdDoKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MyArMzksMjkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLUNvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBjb25zdCBVU3RyaW5nJiBjb2RlKQotewotICAgIHJldHVybiBjaGVja1N5bnRheChleGVj
LCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciwgVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpj
cmVhdGUoY29kZSkpOwotfQotCi1Db21wbGV0aW9uIEludGVycHJldGVyOjpjaGVja1N5bnRheChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGlu
ZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlKQorQ29tcGxldGlvbiBJ
bnRlcnByZXRlcjo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VSYW5n
ZSYgc291cmNlKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCiAgICAgaW50IGVyckxpbmU7
CiAgICAgVVN0cmluZyBlcnJNc2c7CiAKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2Rl
ID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2VVUkwsIHN0
YXJ0aW5nTGluZU51bWJlciwgc291cmNlLCAwLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9nTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxQcm9ncmFt
Tm9kZT4oZXhlYywgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFwcm9nTm9k
ZSkKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVhdGUoZXhlYywg
U3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgMCwgc291cmNlVVJMKSk7CisgICAgICAgIHJl
dHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBl
cnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lkKCksIHNvdXJjZS5wcm92aWRl
cigpLT51cmwoKSkpOwogICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CiB9CiAKLUNvbXBs
ZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYg
c2NvcGVDaGFpbiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBjb25zdCBVU3RyaW5nJiBjb2RlLCBKU1ZhbHVlKiB0aGlzVikKLXsKLSAgICByZXR1cm4g
ZXZhbHVhdGUoZXhlYywgc2NvcGVDaGFpbiwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIs
IFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGNvZGUpLCB0aGlzVik7Ci19Ci0KLUNvbXBs
ZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYg
c2NvcGVDaGFpbiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2UsIEpTVmFsdWUqIHRoaXNWYWx1
ZSkKK0NvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbiYgc2NvcGVDaGFpbiwgY29uc3QgU291cmNlUmFuZ2UmIHNvdXJjZSwgSlNWYWx1ZSog
dGhpc1ZhbHVlKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAgIAotICAgIC8vIHBhcnNl
IHRoZSBzb3VyY2UgY29kZQotICAgIGludCBzb3VyY2VJZDsKICAgICBpbnQgZXJyTGluZTsKICAg
ICBVU3RyaW5nIGVyck1zZzsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0g
ZXhlYy0+cGFyc2VyKCktPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5l
LCAmZXJyTXNnKTsKIAotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVj
LT5wYXJzZXIoKS0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIHNvdXJjZVVSTCwgc3RhcnRpbmdM
aW5lTnVtYmVyLCBzb3VyY2UsICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOwotCi0gICAg
Ly8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEgc3ludGF4IGVycm9yIG9jY3VycmVkCiAgICAgaWYg
KCFwcm9ncmFtTm9kZSkKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpj
cmVhdGUoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIHNvdXJj
ZVVSTCkpOworICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShl
eGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2UucHJvdmlkZXIoKS0+YXNJ
ZCgpLCBzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ID0gKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSA/IGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKSA6IHRoaXNWYWx1ZS0+dG9PYmplY3QoZXhlYyk7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICBjbGFzcyBFeGVjU3RhdGU7CiAgIGNsYXNzIEpTVmFsdWU7CiAg
IGNsYXNzIFNjb3BlQ2hhaW47Ci0gIGNsYXNzIFNvdXJjZVByb3ZpZGVyOworICBjbGFzcyBTb3Vy
Y2VSYW5nZTsKICAgY2xhc3MgVVN0cmluZzsKICAgCiAgIGNsYXNzIEludGVycHJldGVyIHsKQEAg
LTQ0LDggKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICogQHJldHVybiBBIG5vcm1hbCBj
b21wbGV0aW9uIGlmIHRoZXJlIHdlcmUgbm8gc3ludGF4IGVycm9ycyBpbiB0aGUgY29kZSwgCiAg
ICAgICogb3RoZXJ3aXNlIGEgdGhyb3cgY29tcGxldGlvbiB3aXRoIHRoZSBzeW50YXggZXJyb3Ig
YXMgaXRzIHZhbHVlLgogICAgICAqLwotICAgIHN0YXRpYyBDb21wbGV0aW9uIGNoZWNrU3ludGF4
KEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgY29uc3QgVVN0cmluZyYgY29kZSk7Ci0gICAgc3RhdGljIENvbXBsZXRpb24gY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdM
aW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2UpOworICAgIHN0YXRp
YyBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZVJhbmdlJik7
CiAKICAgICAvKioKICAgICAgKiBFdmFsdWF0ZXMgdGhlIHN1cHBsaWVkIEVDTUFTY3JpcHQgY29k
ZS4KQEAgLTYyLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICogZXhlY3V0aW9uLiBU
aGlzIHNob3VsZCBlaXRoZXIgYmUganNOdWxsKCkgb3IgYW4gT2JqZWN0LgogICAgICAqIEByZXR1
cm4gQSBjb21wbGV0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgZXhl
Y3V0aW9uLgogICAgICAqLwotICAgIHN0YXRpYyBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW4mLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIGNvZGUsIEpTVmFsdWUqIHRoaXNWID0gMCk7Ci0gICAg
c3RhdGljIENvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbiYsIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4sIEpTVmFsdWUqIHRoaXNWID0gMCk7CisgICAgc3RhdGljIENvbXBsZXRp
b24gZXZhbHVhdGUoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbiYsIGNvbnN0IFNvdXJjZVJhbmdlJiwg
SlNWYWx1ZSogdGhpc1YgPSAwKTsKICAgICAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRQcmludEV4
Y2VwdGlvbnMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMoYm9v
bCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9sZXhlci5jcHAJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsOSBAQCBMZXhl
cjo6fkxleGVyKCkKICAgICBtX21haW5UYWJsZS5kZWxldGVUYWJsZSgpOwogfQogCi12b2lkIExl
eGVyOjpzZXRDb2RlKGludCBzdGFydGluZ0xpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZSkKK3ZvaWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlUmFuZ2UqIHNv
dXJjZSkKIHsKLSAgICB5eWxpbmVubyA9IHN0YXJ0aW5nTGluZU51bWJlcjsKKyAgICB5eWxpbmVu
byA9IHNvdXJjZS0+Zmlyc3RMaW5lKCk7CiAgICAgbV9yZXN0cktleXdvcmQgPSBmYWxzZTsKICAg
ICBtX2RlbGltaXRlZCA9IGZhbHNlOwogICAgIG1fZWF0TmV4dElkZW50aWZpZXIgPSBmYWxzZTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9sZXhlci5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9sZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgTGV4ZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICB2b2lkIHNldENvZGUoaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlKTsKKyAgICAgICAgdm9pZCBzZXRDb2RlKGNvbnN0IFNvdXJjZVJhbmdl
Kik7CiAgICAgICAgIGludCBsZXgodm9pZCogbHZhbHAsIHZvaWQqIGxsb2NwKTsKIAogICAgICAg
ICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4geXlsaW5lbm87IH0KQEAgLTg4LDcgKzg4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2F3RXJyb3IoKSBjb25zdCB7IHJldHVy
biBtX2Vycm9yOyB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBTb3VyY2VSYW5n
ZSBzb3VyY2VSYW5nZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSkgeyByZXR1cm4gU291
cmNlUmFuZ2UobV9zb3VyY2UsIG9wZW5CcmFjZSArIDEsIGNsb3NlQnJhY2UpOyB9CisgICAgICAg
IFNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBp
bnQgZmlyc3RMaW5lKSB7IHJldHVybiBTb3VyY2VSYW5nZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwg
b3BlbkJyYWNlICsgMSwgY2xvc2VCcmFjZSwgZmlyc3RMaW5lKTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogICAgICAgICB1bnNpZ25l
ZCBpbnQgbV9wb3NpdGlvbjsKLSAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJj
ZTsKKyAgICAgICAgY29uc3QgU291cmNlUmFuZ2UqIG1fc291cmNlOwogICAgICAgICBjb25zdCBV
Q2hhciogbV9jb2RlOwogICAgICAgICB1bnNpZ25lZCBpbnQgbV9sZW5ndGg7CiAgICAgICAgIGlu
dCBtX2F0TGluZVN0YXJ0OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNzE0NCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTIs
MTAgKzE3MTIsOSBAQCBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29w
ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNl
UmFuZ2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBi
b29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBCbG9ja05vZGUoZ2xv
YmFsRGF0YSwgY2hpbGRyZW4pCi0gICAgLCBtX3NvdXJjZVVSTChnbG9iYWxEYXRhLT5wYXJzZXIt
PnNvdXJjZVVSTCgpKQotICAgICwgbV9zb3VyY2VJZChnbG9iYWxEYXRhLT5wYXJzZXItPnNvdXJj
ZUlkKCkpCisgICAgLCBtX3NvdXJjZVJhbmdlKHNvdXJjZVJhbmdlKQogICAgICwgbV91c2VzRXZh
bCh1c2VzRXZhbCkKICAgICAsIG1fbmVlZHNDbG9zdXJlKG5lZWRzQ2xvc3VyZSkKICAgICAsIG1f
dXNlc0FyZ3VtZW50cyh1c2VzQXJndW1lbnRzKQpAQCAtMTczMSwyMiArMTczMCwyMCBAQCBTY29w
ZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1Qcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGJvb2wgdXNlc0V2
YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFu
dHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50
cykKLSAgICAsIG1fc291cmNlUHJvdmlkZXIoc291cmNlUHJvdmlkZXIpCitQcm9ncmFtTm9kZTo6
UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBjb25z
dCBTb3VyY2VSYW5nZSYgc291cmNlUmFuZ2UsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9z
dXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5v
ZGUoZ2xvYmFsRGF0YSwgc291cmNlUmFuZ2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNr
LCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBudW1Db25zdGFudHMpCiB7
CiB9CiAKLVByb2dyYW1Ob2RlKiBQcm9ncmFtTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1
bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBi
b29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQg
bnVtQ29uc3RhbnRzKQorUHJvZ3JhbU5vZGUqIFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJT
dGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNl
UmFuZ2UsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVu
dHMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBQcm9ncmFtTm9kZShnbG9i
YWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlUHJvdmlkZXIsIHVz
ZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cyk7CisgICAg
cmV0dXJuIG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1
bmNTdGFjaywgc291cmNlUmFuZ2UsIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVu
dHMsIG51bUNvbnN0YW50cyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FdmFsTm9kZTo6RXZh
bE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBTb3VyY2VQcm92
aWRlciogc291cmNlUHJvdmlkZXIsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBi
b29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xv
YmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Ns
b3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cykKLSAgICAsIG1fc291cmNlUHJvdmlk
ZXIoc291cmNlUHJvdmlkZXIpCitFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlUmFuZ2UsIGJv
b2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBu
dW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc291cmNlUmFuZ2UsIGNo
aWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2Vz
QXJndW1lbnRzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKQEAgLTE3NjksMjYgKzE3NjYsNDEgQEAg
dm9pZCBFdmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5ObwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCiAgICAgU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGU7Ci0gICAgQVNTRVJUKG1fc291cmNlUHJvdmlkZXIpOwotICAg
IG1fY29kZS5zZXQobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBtX3NvdXJj
ZVByb3ZpZGVyKSk7CisgICAgbV9jb2RlLnNldChuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9i
YWxPYmplY3QsIG1fc291cmNlUmFuZ2UucHJvdmlkZXIoKSkpOwogCiAgICAgQ29kZUdlbmVyYXRv
ciBnZW5lcmF0b3IodGhpcywgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAm
c3ltYm9sVGFibGUsIG1fY29kZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CiB9
CiAKLUV2YWxOb2RlKiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBib29sIHVzZXNF
dmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3Rh
bnRzKQorRXZhbE5vZGUqIEV2YWxOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25T
dGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlUmFuZ2UsIGJvb2wgdXNl
c0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25z
dGFudHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBFdmFsTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwg
dmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlUHJvdmlkZXIsIHVzZXNFdmFsLCBuZWVkc0Nsb3N1
cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cyk7CisgICAgcmV0dXJuIG5ldyBFdmFsTm9k
ZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlUmFuZ2Us
IHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cyk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkJvZHlOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9u
Qm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBib29sIHVz
ZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29u
c3RhbnRzKQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywg
ZnVuY1N0YWNrLCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBudW1Db25z
dGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgU291cmNlUmFuZ2UoKSwgY2hpbGRy
ZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1
bWVudHMsIG51bUNvbnN0YW50cykKICAgICAsIG1fcmVmQ291bnQoMCkKIHsKIH0KIAordm9pZCBG
dW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZVJhbmdlJiBzb3VyY2VS
YW5nZSwgUGFyYW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIpCit7CisgICAgVmVjdG9yPElkZW50
aWZpZXI+IHBhcmFtZXRlcnM7CisgICAgZm9yIChQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIgPSBm
aXJzdFBhcmFtZXRlcjsgcGFyYW1ldGVyOyBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXItPm5leHRQYXJh
bSgpKQorICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXItPmlkZW50KCkpOworICAg
IHNpemVfdCBjb3VudCA9IHBhcmFtZXRlcnMuc2l6ZSgpOworICAgIGZpbmlzaFBhcnNpbmcoc291
cmNlUmFuZ2UsIHBhcmFtZXRlcnMucmVsZWFzZUJ1ZmZlcigpLCBjb3VudCk7Cit9CisKK3ZvaWQg
RnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VSYW5nZSYgc291cmNl
UmFuZ2UsIElkZW50aWZpZXIqIHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3VudCkKK3sK
KyAgICBtX3NvdXJjZVJhbmdlID0gc291cmNlUmFuZ2U7CisgICAgbV9wYXJhbWV0ZXJzLnNldChw
YXJhbWV0ZXJzKTsKKyAgICBtX3BhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyQ291bnQ7Cit9CisK
IHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6bWFyaygpCiB7CiAgICAgaWYgKG1fY29kZSkKQEAgLTE4
MDAsNyArMTgxMiw3IEBAIEZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWEK
ICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMs
IG51bUNvbnN0YW50cyk7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6
OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIFNvdXJjZVBy
b3ZpZGVyKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3Vt
ZW50cywgaW50IG51bUNvbnN0YW50cykKK0Z1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0
IFNvdXJjZVJhbmdlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNl
c0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykKIHsKICAgICByZXR1cm4gbmV3IEZ1bmN0aW9u
Qm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNF
dmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cyk7CiB9CkBAIC0x
ODEwLDggKzE4MjIsNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmdlbmVyYXRlQ29kZShTY29w
CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIAotICAg
IEFTU0VSVChtX3NvdXJjZS5zb3VyY2VQcm92aWRlcigpKTsKLSAgICBtX2NvZGUuc2V0KG5ldyBD
b2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBtX3NvdXJjZS5zb3VyY2VQcm92aWRlcigpLCBt
X3NvdXJjZS5zdGFydE9mZnNldCgpKSk7CisgICAgbV9jb2RlLnNldChuZXcgQ29kZUJsb2NrKHRo
aXMsIEZ1bmN0aW9uQ29kZSwgbV9zb3VyY2VSYW5nZS5wcm92aWRlcigpLCBtX3NvdXJjZVJhbmdl
LnN0YXJ0T2Zmc2V0KCkpKTsKIAogICAgIENvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRoaXMsIGds
b2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJm1fc3ltYm9sVGFibGUsIG1fY29k
ZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CkBAIC0xODQ3LDggKzE4NTgsNyBA
QCB2b2lkIFByb2dyYW1Ob2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpCiAgICAgU2NvcGVDaGFp
biBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKICAgICAKLSAgICBBU1NFUlQobV9z
b3VyY2VQcm92aWRlcik7Ci0gICAgbV9jb2RlLnNldChuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlz
LCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIG1fc291cmNlUHJvdmlkZXIpKTsKKyAgICBtX2Nv
ZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVj
dCwgbV9zb3VyY2VSYW5nZS5wcm92aWRlcigpKSk7CiAgICAgCiAgICAgQ29kZUdlbmVyYXRvciBn
ZW5lcmF0b3IodGhpcywgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmZ2xv
YmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0KCksIG1fdmFyU3RhY2ssIG1fZnVu
Y3Rpb25TdGFjayk7CiAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CkBAIC0xODU3LDExICsxODY3
LDEwIEBAIHZvaWQgUHJvZ3JhbU5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWkKIFVTdHJpbmcg
RnVuY3Rpb25Cb2R5Tm9kZTo6cGFyYW1TdHJpbmcoKSBjb25zdAogewogICAgIFVTdHJpbmcgcygi
Iik7Ci0gICAgc2l6ZV90IGNvdW50ID0gbV9wYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNp
emVfdCBwb3MgPSAwOyBwb3MgPCBjb3VudDsgKytwb3MpIHsKKyAgICBmb3IgKHNpemVfdCBwb3Mg
PSAwOyBwb3MgPCBtX3BhcmFtZXRlckNvdW50OyArK3BvcykgewogICAgICAgICBpZiAoIXMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcyArPSAiLCAiOwotICAgICAgICBzICs9IG1fcGFyYW1ldGVy
c1twb3NdLnVzdHJpbmcoKTsKKyAgICAgICAgcyArPSBwYXJhbWV0ZXJzKClbcG9zXS51c3RyaW5n
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHM7CkBAIC0xODY5LDEyICsxODc4LDYgQEAgVVN0cmlu
ZyBGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRnVuY0RlY2xOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi12b2lkIEZ1bmNEZWNsTm9kZTo6YWRkUGFyYW1zKCkKLXsKLSAgICBmb3IgKFBhcmFt
ZXRlck5vZGUqIHAgPSBtX3BhcmFtZXRlci5nZXQoKTsgcDsgcCA9IHAtPm5leHRQYXJhbSgpKQot
ICAgICAgICBtX2JvZHktPnBhcmFtZXRlcnMoKS5hcHBlbmQocC0+aWRlbnQoKSk7Ci19Ci0KIEpT
RnVuY3Rpb24qIEZ1bmNEZWNsTm9kZTo6bWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IG5ldyAo
ZXhlYykgSlNGdW5jdGlvbihleGVjLCBtX2lkZW50LCBtX2JvZHkuZ2V0KCksIHNjb3BlQ2hhaW4p
OwpAQCAtMTkyMCwxMSArMTkyMyw0IEBAIEpTRnVuY3Rpb24qIEZ1bmNFeHByTm9kZTo6bWFrZUZ1
bmN0aW9uKEUKICAgICByZXR1cm4gZnVuYzsKIH0KIAotLy8gRUNNQSAxMwotdm9pZCBGdW5jRXhw
ck5vZGU6OmFkZFBhcmFtcygpCi17Ci0gICAgZm9yIChQYXJhbWV0ZXJOb2RlKiBwID0gbV9wYXJh
bWV0ZXIuZ2V0KCk7IHA7IHAgPSBwLT5uZXh0UGFyYW0oKSkKLSAgICAgICAgbV9ib2R5LT5wYXJh
bWV0ZXJzKCkuYXBwZW5kKHAtPmlkZW50KCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9u
b2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY3LDEyICsyMTY3LDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIEJsb2NrTm9kZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwor
ICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgU291cmNlUmFuZ2UmLCBTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJv
b2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpIEpT
Q19GQVNUX0NBTEw7CiAKLSAgICAgICAgaW50IHNvdXJjZUlkKCkgY29uc3QgSlNDX0ZBU1RfQ0FM
TCB7IHJldHVybiBtX3NvdXJjZUlkOyB9Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVS
TCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIAorICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCBKU0Nf
RkFTVF9DQUxMIHsgcmV0dXJuIG1fc291cmNlUmFuZ2UucHJvdmlkZXIoKS0+dXJsKCk7IH0KKyAg
ICAgICAgaW50IHNvdXJjZUlkKCkgeyByZXR1cm4gbV9zb3VyY2VSYW5nZS5wcm92aWRlcigpLT5h
c0lkKCk7IH0KKwogICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2Vz
RXZhbDsgfQogICAgICAgICBib29sIG5lZWRzQ2xvc3VyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNDbG9zdXJlOyB9CiAgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlc0FyZ3VtZW50czsgfQpAQCAtMjE5MCwxMCArMjE5MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHByb3RlY3RlZDoKICAgICAgICAgVmFyU3RhY2sgbV92YXJTdGFjazsKICAgICAgICAg
RnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uU3RhY2s7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fc291
cmNlUmFuZ2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBVU3RyaW5nIG1fc291cmNlVVJMOwot
ICAgICAgICBpbnQgbV9zb3VyY2VJZDsKICAgICAgICAgYm9vbCBtX3VzZXNFdmFsOwogICAgICAg
ICBib29sIG1fbmVlZHNDbG9zdXJlOwogICAgICAgICBib29sIG1fdXNlc0FyZ3VtZW50czsKQEAg
LTIyMDIsNyArMjIwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJvZ3JhbU5v
ZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQcm9n
cmFtTm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgU291cmNlUHJvdmlkZXIqLCBib29sIHVzZXNFdmFsLCBib29sIG5l
ZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFT
VF9DQUxMOworICAgICAgICBzdGF0aWMgUHJvZ3JhbU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEq
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGNvbnN0IFNvdXJj
ZVJhbmdlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3Vt
ZW50cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICBQcm9ncmFt
Q29kZUJsb2NrJiBieXRlQ29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikgSlNDX0ZBU1Rf
Q0FMTAogICAgICAgICB7CkBAIC0yMjEyLDcgKzIyMTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRh
KiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBTb3VyY2VQcm92
aWRlciosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVu
dHMsIGludCBudW1Db25zdGFudHMpIEpTQ19GQVNUX0NBTEw7CisgICAgICAgIFByb2dyYW1Ob2Rl
KEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNr
KiwgY29uc3QgU291cmNlUmFuZ2UmLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwg
Ym9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwogCiAg
ICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKikgSlNDX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjIyMCwxNCArMjIyMCwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPHNpemVfdD4gbV92YXJJbmRleGVzOyAvLyBTdG9y
YWdlIGluZGV4ZXMgYmVsb25naW5nIHRvIHRoZSBub2RlcyBpbiBtX3ZhclN0YWNrLiAoUmVjb3Jk
ZWQgdG8gYXZvaWQgZG91YmxlIGxvb2t1cC4pCiAgICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fZnVu
Y3Rpb25JbmRleGVzOyAvLyBTdG9yYWdlIGluZGV4ZXMgYmVsb25naW5nIHRvIHRoZSBub2RlcyBp
biBtX2Z1bmN0aW9uU3RhY2suIChSZWNvcmRlZCB0byBhdm9pZCBkb3VibGUgbG9va3VwLikKIAot
ICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlUHJvdmlkZXI7Ci0KICAgICAg
ICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKICAgICB9OwogCiAgICAgY2xhc3Mg
RXZhbE5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBFdmFsTm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgU291cmNlUHJvdmlkZXIqLCBib29sIHVzZXNFdmFsLCBib29s
IG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0Nf
RkFTVF9DQUxMOworICAgICAgICBzdGF0aWMgRXZhbE5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEq
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGNvbnN0IFNvdXJj
ZVJhbmdlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3Vt
ZW50cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICBFdmFsQ29k
ZUJsb2NrJiBieXRlQ29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikgSlNDX0ZBU1RfQ0FM
TAogICAgICAgICB7CkBAIC0yMjM3LDIyICsyMjM1LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShKU0dsb2JhbERhdGEqLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIFNvdXJjZVByb3ZpZGVy
KiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50cywg
aW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKKyAgICAgICAgRXZhbE5vZGUoSlNHbG9i
YWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBjb25z
dCBTb3VyY2VSYW5nZSYsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVz
ZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAg
dm9pZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqKSBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8U291cmNlUHJv
dmlkZXI+IG1fc291cmNlUHJvdmlkZXI7Ci0KICAgICAgICAgT3duUHRyPEV2YWxDb2RlQmxvY2s+
IG1fY29kZTsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSA6IHB1YmxpYyBT
Y29wZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUq
IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIFNvdXJjZVByb3ZpZGVyKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1
cmUsIGJvb2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsK
KyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGNvbnN0IFNvdXJjZVJh
bmdlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50
cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgc3RhdGljIEZ1bmN0
aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0
YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBi
b29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpIEpTQ19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgVmVjdG9yPElkZW50aWZpZXI+JiBwYXJhbWV0ZXJzKCkgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogcGFyYW1ldGVy
cygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9Cisg
ICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7
IH0KICAgICAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjI3NSw4ICsyMjcyLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgbWFyaygpOwogCi0gICAgICAgIHZvaWQgc2V0U291
cmNlKGNvbnN0IFNvdXJjZVJhbmdlJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0gCi0g
ICAgICAgIFVTdHJpbmcgdG9Tb3VyY2VTdHJpbmcoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIFVTdHJpbmcoInsiKSArIG1fc291cmNlLnRvU3RyaW5nKCkgKyBVU3RyaW5nKCJ9Iik7IH0K
KyAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZVJhbmdlJiwgUGFyYW1ldGVy
Tm9kZSopOworICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlUmFuZ2UmLCBJ
ZGVudGlmaWVyKiBwYXJhbWV0ZXJzLCBzaXplX3QgcGFyYW1ldGVyQ291bnQpOworICAgICAgICAK
KyAgICAgICAgVVN0cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyBy
ZXR1cm4gVVN0cmluZygieyIpICsgbV9zb3VyY2VSYW5nZS50b1N0cmluZygpICsgVVN0cmluZygi
fSIpOyB9CiAKICAgICAgICAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgcmVmL2RlcmVmJ2QgYSBsb3Qg
aW4gdGhlIHNjb3BlIGNoYWluLCBzbyB0aGlzIGlzIGEgZmFzdGVyIHJlZi9kZXJlZi4KICAgICAg
ICAgLy8gSWYgdGhlIHZpcnR1YWwgbWFjaGluZSBjaGFuZ2VzIHNvIHRoaXMgZG9lc24ndCBoYXBw
ZW4gYXMgbXVjaCB3ZSBjYW4gY2hhbmdlIGJhY2suCkBAIC0yMjk3LDExICsyMjk2LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBnZW5lcmF0ZUNvZGUo
U2NvcGVDaGFpbk5vZGUqKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICAKLSAgICAgICAgVmVjdG9y
PElkZW50aWZpZXI+IG1fcGFyYW1ldGVyczsKKworICAgICAgICBPd25QdHI8SWRlbnRpZmllcj4g
bV9wYXJhbWV0ZXJzOworICAgICAgICBzaXplX3QgbV9wYXJhbWV0ZXJDb3VudDsKICAgICAgICAg
U3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9j
b2RlOwotICAgICAgICBTb3VyY2VSYW5nZSBtX3NvdXJjZTsKICAgICAgICAgdW5zaWduZWQgbV9y
ZWZDb3VudDsKICAgICB9OwogCkBAIC0yMzEzLDggKzIzMTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIocGFyYW1ldGVyKQogICAgICAgICAgICAgLCBtX2Jv
ZHkoYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgYWRkUGFyYW1zKCk7Ci0gICAgICAgICAg
ICBtX2JvZHktPnNldFNvdXJjZShzb3VyY2UpOworICAgICAgICAgICAgbV9ib2R5LT5maW5pc2hQ
YXJzaW5nKHNvdXJjZSwgbV9wYXJhbWV0ZXIuZ2V0KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjMyNiw4ICsyMzI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSB7IHJldHVybiBtX2JvZHkuZ2V0KCk7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYWRkUGFyYW1zKCkgSlNDX0ZBU1RfQ0FM
TDsKLQogICAgICAgICAvLyBVc2VkIGZvciBzdHJlYW1UbwogICAgICAgICBmcmllbmQgY2xhc3Mg
UHJvcGVydHlOb2RlOwogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0yMzQzLDggKzIz
MzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIocGFyYW1l
dGVyKQogICAgICAgICAgICAgLCBtX2JvZHkoYm9keSkKICAgICAgICAgewotICAgICAgICAgICAg
YWRkUGFyYW1zKCk7Ci0gICAgICAgICAgICBtX2JvZHktPnNldFNvdXJjZShzb3VyY2UpOworICAg
ICAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgbV9wYXJhbWV0ZXIuZ2V0KCkp
OwogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjM1Nyw4ICsy
MzUyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHko
KSB7IHJldHVybiBtX2JvZHkuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQg
YWRkUGFyYW1zKCkgSlNDX0ZBU1RfQ0FMTDsKLQogICAgICAgICBSZWZQdHI8UGFyYW1ldGVyTm9k
ZT4gbV9wYXJhbWV0ZXI7CiAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7
CiAgICAgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDM3MTQ0KQorKysgSmF2YVNj
cmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNyArODkwLDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBidWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oZmFz
dE1hbGxvYyhieXRlcykpOwogICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSgpLCBieXRl
cyk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CiAgICAgICAgIG1fc2l6ZSA9
IDA7CiAgICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgfQpJbmRleDogSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNp
b24gMzcxNDQpCisrKyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAwOC0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
SlNSdW4uY3BwOgorICAgICAgICAoSlNSdW46OkV2YWx1YXRlKToKKyAgICAgICAgKEpTUnVuOjpD
aGVja1N5bnRheCk6IFByb3ZpZGUgYSBTb3VyY2VSYW5nZSB0byB0aGUgSW50ZXJwcmV0ZXIsIHNp
bmNlCisgICAgICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKIDIwMDgt
MDktMjkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRH
bHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkpTUnVuLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9jb21wbGV0aW9uLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlUmFuZ2UuaD4KIAogSlNSdW46OkpTUnVuKENGU3Ry
aW5nUmVmIHNvdXJjZSwgSlNGbGFncyBpbkZsYWdzKQogICAgIDogICBKU0Jhc2Uoa0pTUnVuVHlw
ZUlEKSwKQEAgLTYwLDEwICs2MSwxMCBAQCBKU0dsb2JhbE9iamVjdCogSlNSdW46Okdsb2JhbE9i
amVjdCgpIGNvCiAKIENvbXBsZXRpb24gSlNSdW46OkV2YWx1YXRlKCkKIHsKLSAgICByZXR1cm4g
SW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZkdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBVU3RyaW5nKCksIDAsIGZTb3VyY2UpOworICAg
IHJldHVybiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBmR2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIFNvdXJjZVJhbmdlKFVTdHJpbmdT
b3VyY2VQcm92aWRlcjo6Y3JlYXRlKGZTb3VyY2UsIFVTdHJpbmcoKSksIDEpKTsKIH0KIAogYm9v
bCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewotICAgIHJldHVybiBJbnRlcnByZXRlcjo6Y2hlY2tT
eW50YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBVU3RyaW5nKCksIDAsIGZTb3VyY2Up
LmNvbXBsVHlwZSgpICE9IFRocm93OworICAgIHJldHVybiBJbnRlcnByZXRlcjo6Y2hlY2tTeW50
YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBTb3VyY2VSYW5nZShVU3RyaW5nU291cmNl
UHJvdmlkZXI6OmNyZWF0ZShmU291cmNlLCBVU3RyaW5nKCkpLCAxKSkuY29tcGxUeXBlKCkgIT0g
VGhyb3c7CiB9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMzcxNDQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDA4LTEwLTAxICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlZCBmb3IgSmF2YVNjcmlwdENvcmUgQVBJIGNoYW5nZXM6IHVzZSBhIFNv
dXJjZVJhbmdlIGluc3RlYWQgb2YKKyAgICAgICAgYnJva2VuIG91dCBwYXJhbWV0ZXJzLgorCisg
ICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVJhbmdlLmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVByb3ZpZGVyLmguCisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RyaW5n
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVj
dC5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgor
ICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRl
KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6ZXZhbCk6CisgICAgICAgICogcGFnZS9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nUmVmKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UpOgorICAgICAgICAqIHBhZ2UvSW5z
cGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvSmF2YVNjcmlwdERlYnVnTGlzdGVu
ZXIuaDoKKyAgICAgICAgKiBwYWdlL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCk6CisgICAgICAgICogcGFnZS9KYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuaDoKKwogMjAwOC0wOS0zMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubiBhbmQgQWxleGV5IFByb3Nr
dXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVJhbmdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvU291cmNlUmFu
Z2UuaAkocmV2aXNpb24gMzcwODUpCShmcm9tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pz
L1NvdXJjZVByb3ZpZGVyLmg6MzcwODUpCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tq
cy9Tb3VyY2VSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Tb3VyY2VQcm92aWRlci5oPgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9ranMvU291cmNlUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2tqcy9Tb3VyY2VSYW5nZS5oCShyZXZpc2lvbiAzNzA4NSkKKysrIFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEg
KzEgQEAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VQcm92aWRlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1NvdXJjZVJhbmdlLmg+CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIEpTVmFsdWUqIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnMKICAgICBtX2Zy
YW1lLT5rZWVwQWxpdmUoKTsKIAogICAgIG1fd2luZG93U2hlbGwtPndpbmRvdygpLT5zdGFydFRp
bWVvdXRDaGVjaygpOwotICAgIENvbXBsZXRpb24gY29tcCA9IEludGVycHJldGVyOjpldmFsdWF0
ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
c291cmNlVVJMLCBiYXNlTGluZSwgU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzdHIpLCBt
X3dpbmRvd1NoZWxsKTsKKyAgICBDb21wbGV0aW9uIGNvbXAgPSBJbnRlcnByZXRlcjo6ZXZhbHVh
dGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCks
IFNvdXJjZVJhbmdlKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc3RyLCBzb3VyY2VVUkwp
LCBiYXNlTGluZSksIG1fd2luZG93U2hlbGwpOwogICAgIG1fd2luZG93U2hlbGwtPndpbmRvdygp
LT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBOb3Jt
YWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkgewpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gMzcxNDQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDE4ICszNSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdHJp
bmdTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBKU0M6OlNvdXJjZVByb3ZpZGVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdTb3Vy
Y2VQcm92aWRlcihzb3VyY2UpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdT
b3VyY2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IHVybCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwg
dXJsKSk7IH0KIAogICAgICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmcobV9zb3VyY2UuY2hhcmFjdGVycygpICsg
c3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2UubGVuZ3RoKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291cmNlKSA6IG1fc291cmNl
KHNvdXJjZSkge30KKyAgICAgICAgU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsKQorICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcih1
cmwpCisgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgfTsKLQotCiB9CiAKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZp
c2lvbiAzNzE0NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMiBAQAogI2ltcG9ydCAiSlNET01XaW5kb3cu
aCIKICNpbXBvcnQgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2ltcG9ydCAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVP
YmpDRXh0cmFzLmgiCiAjaW1wb3J0ICJvYmpjX2luc3RhbmNlLmgiCi0jaW1wb3J0ICJydW50aW1l
X3Jvb3QuaCIKICNpbXBvcnQgInJ1bnRpbWUuaCIKICNpbXBvcnQgInJ1bnRpbWVfb2JqZWN0Lmgi
CisjaW1wb3J0ICJydW50aW1lX3Jvb3QuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KICNpbXBvcnQgPGtqcy9FeGVjU3RhdGUuaD4KICNpbXBvcnQgPGtqcy9KU0dsb2JhbE9i
amVjdC5oPgpAQCAtMzI5LDcgKzMzMCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJh
eShFeGVjU3RhdGUKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCiAgICAgW3NlbGYgX3Jv
b3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBDb21w
bGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIFVTdHJpbmcoKSwgMSwgU3RyaW5nKHNj
cmlwdCkpOworICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0
ZShbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgU291cmNl
UmFuZ2UoU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShTdHJpbmcoc2NyaXB0KSwgVVN0cmlu
ZygpKSwgMSkpOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPnN0b3BU
aW1lb3V0Q2hlY2soKTsKICAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBl
KCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAzNzE0NCkKKysr
IFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiY191
dGlsaXR5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlICJucHJ1bnRp
bWVfcHJpdi5oIgpAQCAtMzgsMTAgKzM5LDEyIEBACiAjaW5jbHVkZSA8a2pzL0pTR2xvYmFsT2Jq
ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL0pTTG9jay5oPgogI2luY2x1ZGUgPGtqcy9Qcm9wZXJ0eU5h
bWVBcnJheS5oPgorI2luY2x1ZGUgPGtqcy9Tb3VyY2VSYW5nZS5oPgogI2luY2x1ZGUgPGtqcy9j
b21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8a2pzL2ludGVycHJldGVyLmg+CiAKIHVzaW5nIFdlYkNv
cmU6OlN0cmluZzsKK3VzaW5nIFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOwogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwogCkBAIC0xOTcs
NyArMjAwLDcgQEAgYm9vbCBfTlBOX0V2YWx1YXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QUwogICAg
ICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBj
b252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9u
ID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCks
IFVTdHJpbmcoKSwgMSwgc2NyaXB0U3RyaW5nKTsKKyAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0
aW9uID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWlu
KCksIFNvdXJjZVJhbmdlKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2NyaXB0U3RyaW5n
LCBVU3RyaW5nKCkpLCAxKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5z
dG9wVGltZW91dENoZWNrKCk7CiAgICAgICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5j
b21wbFR5cGUoKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0J
KHJldmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGtqcy9jb21wbGV0aW9u
Lmg+CiAjaW5jbHVkZSA8a2pzL2ludGVycHJldGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDxranMvU291cmNlUHJvdmlkZXIuaD4KIAogdXNpbmcgV2ViQ29yZTo6
RnJhbWU7CiAKQEAgLTMyMSw3ICszMjIsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChq
c3RyaW5nIHNjcmlwCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0aW9u
ID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCks
IFVTdHJpbmcoKSwgMSwgSmF2YVN0cmluZyhzY3JpcHQpLnVzdHJpbmcoKSk7CisgICAgQ29tcGxl
dGlvbiBjb21wbGV0aW9uID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxTY29wZUNoYWluKCksIFNvdXJjZVJhbmdlKFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRl
KEphdmFTdHJpbmcoc2NyaXB0KS51c3RyaW5nKCksIFVTdHJpbmcoKSksIDEpKTsKICAgICByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAgIENvbXBsVHlw
ZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9wYWdlL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0
YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmcKICAgICByZXR1cm4gSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhz
dHIpKTsKIH0KIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1N0cmluZ1JlZihj
b25zdCBTb3VyY2VQcm92aWRlciYgc3RyKQorc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBqc1N0cmluZ1JlZihjb25zdCBTb3VyY2VSYW5nZSYgc3RyKQogewogICAgIHJldHVybiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
c3RyLmRhdGEoKSwgc3RyLmxlbmd0aCgpKSk7CiB9CkBAIC0yNTcwLDI4ICsyNTcwLDI4IEBAIGJv
b2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlRXhjZXB0aW8KIAogLy8gSmF2YVNjcmlwdERl
YnVnTGlzdGVuZXIgZnVuY3Rpb25zCiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFy
c2VTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlLCBp
bnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzb3Vy
Y2VJRCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlKQogewotICAgIEpTVmFsdWVSZWYgc291
cmNlSURWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgc291cmNlSUQp
OwotICAgIEpTVmFsdWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3Nj
cmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZVVSTCkuZ2V0KCkpOworICAgIEpTVmFsdWVS
ZWYgc291cmNlSURWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgc291
cmNlLnByb3ZpZGVyKCktPmFzSWQoKSk7CisgICAgSlNWYWx1ZVJlZiBzb3VyY2VVUkxWYWx1ZSA9
IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYoc291cmNlLnBy
b3ZpZGVyKCktPnVybCgpKS5nZXQoKSk7CiAgICAgSlNWYWx1ZVJlZiBzb3VyY2VWYWx1ZSA9IEpT
VmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYoc291cmNlKS5nZXQo
KSk7Ci0gICAgSlNWYWx1ZVJlZiBzdGFydGluZ0xpbmVOdW1iZXJWYWx1ZSA9IEpTVmFsdWVNYWtl
TnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBKU1ZhbHVl
UmVmIGZpcnN0TGluZVZhbHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIobV9zY3JpcHRDb250ZXh0LCBz
b3VyY2UuZmlyc3RMaW5lKCkpOwogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAg
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7IHNvdXJjZUlEVmFsdWUsIHNvdXJjZVVSTFZhbHVl
LCBzb3VyY2VWYWx1ZSwgc3RhcnRpbmdMaW5lTnVtYmVyVmFsdWUgfTsKKyAgICBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdID0geyBzb3VyY2VJRFZhbHVlLCBzb3VyY2VVUkxWYWx1ZSwgc291cmNlVmFs
dWUsIGZpcnN0TGluZVZhbHVlIH07CiAgICAgY2FsbEZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwg
bV9zY3JpcHRPYmplY3QsICJwYXJzZWRTY3JpcHRTb3VyY2UiLCA0LCBhcmd1bWVudHMsIGV4Y2Vw
dGlvbik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZmFpbGVkVG9QYXJzZVNvdXJj
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBzb3VyY2UsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGVycm9yTGluZSwg
Y29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpm
YWlsZWRUb1BhcnNlU291cmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlUmFuZ2UmIHNv
dXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAg
IEpTVmFsdWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENv
bnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZVVSTCkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgc291
cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5n
UmVmKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkuZ2V0KCkpOwogICAgIEpTVmFsdWVSZWYgc291
cmNlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVm
KHNvdXJjZS5kYXRhKCkpLmdldCgpKTsKLSAgICBKU1ZhbHVlUmVmIHN0YXJ0aW5nTGluZU51bWJl
clZhbHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIobV9zY3JpcHRDb250ZXh0LCBzdGFydGluZ0xpbmVO
dW1iZXIpOworICAgIEpTVmFsdWVSZWYgZmlyc3RMaW5lVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJl
cihtX3NjcmlwdENvbnRleHQsIHNvdXJjZS5maXJzdExpbmUoKSk7CiAgICAgSlNWYWx1ZVJlZiBl
cnJvckxpbmVWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29udGV4dCwgZXJyb3JM
aW5lKTsKICAgICBKU1ZhbHVlUmVmIGVycm9yTWVzc2FnZVZhbHVlID0gSlNWYWx1ZU1ha2VTdHJp
bmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihlcnJvck1lc3NhZ2UpLmdldCgpKTsKIAog
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
ID0geyBzb3VyY2VVUkxWYWx1ZSwgc291cmNlVmFsdWUsIHN0YXJ0aW5nTGluZU51bWJlclZhbHVl
LCBlcnJvckxpbmVWYWx1ZSwgZXJyb3JNZXNzYWdlVmFsdWUgfTsKKyAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0geyBzb3VyY2VVUkxWYWx1ZSwgc291cmNlVmFsdWUsIGZpcnN0TGluZVZhbHVl
LCBlcnJvckxpbmVWYWx1ZSwgZXJyb3JNZXNzYWdlVmFsdWUgfTsKICAgICBjYWxsRnVuY3Rpb24o
bV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImZhaWxlZFRvUGFyc2VTY3JpcHRTb3Vy
Y2UiLCA1LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9J
bnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAkocmV2aXNpb24gMzcxNDQpCisrKyBXZWJDb3JlL3BhZ2UvSW5zcGVjdG9y
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsOCArMjI0LDggQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgc2hvd1dpbmRvdygpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291
cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBp
bnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50
IHNvdXJjZUlEKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50IHN0YXJ0aW5n
TGluZU51bWJlciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBlcnJvckxpbmUs
IGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UGFyc2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZVJhbmdlJik7Cisg
ICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OlNvdXJjZVJhbmdlJiwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZSgpOwogCiAgICAgUGFnZSog
bV9pbnNwZWN0ZWRQYWdlOwpJbmRleDogV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1Z0xpc3Rl
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVy
LmgJKHJldmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1Z0xpc3Rl
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBj
bGFzcyBTb3VyY2VQcm92aWRlcjsKKyAgICBjbGFzcyBTb3VyY2VSYW5nZTsKICAgICBjbGFzcyBV
U3RyaW5nOwogfQogCkBAIC00NSw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKCkgeyB9CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBj
b25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHNvdXJjZUlEKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25z
dCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291
cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VSYW5nZSYgc291cmNlKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpTb3VyY2VSYW5nZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBK
U0M6OlVTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UGF1c2UoKSA9IDA7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAJKHJldmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1
Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MywyMCArMjQzLDIwIEBAIEphdmFTY3Jp
cHRDYWxsRnJhbWUqIEphdmFTY3JpcHREZWJ1Z1NlcnYKICAgICByZXR1cm4gbV9jdXJyZW50Q2Fs
bEZyYW1lLmdldCgpOwogfQogCi1zdGF0aWMgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNv
bnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpT
b3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IHNvdXJjZUlEKQorc3RhdGljIHZvaWQgZGlzcGF0Y2hEaWRQYXJz
ZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6U291cmNlUmFuZ2UmIHNvdXJjZSkKIHsKICAgICBWZWN0b3I8SmF2YVNjcmlwdERl
YnVnTGlzdGVuZXIqPiBjb3B5OwogICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29w
eVtpXS0+ZGlkUGFyc2VTb3VyY2UoZXhlYywgc291cmNlLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNv
dXJjZVVSTCwgc291cmNlSUQpOworICAgICAgICBjb3B5W2ldLT5kaWRQYXJzZVNvdXJjZShleGVj
LCBzb3VyY2UpOwogfQogCi1zdGF0aWMgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2Uo
Y29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VQcm92aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitz
dGF0aWMgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQm
IGxpc3RlbmVycywgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBWZWN0b3I8
SmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwogICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5l
cnMsIGNvcHkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkK
LSAgICAgICAgY29weVtpXS0+ZmFpbGVkVG9QYXJzZVNvdXJjZShleGVjLCBzb3VyY2UsIHN0YXJ0
aW5nTGluZU51bWJlciwgc291cmNlVVJMLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAg
ICAgIGNvcHlbaV0tPmZhaWxlZFRvUGFyc2VTb3VyY2UoZXhlYywgc291cmNlLCBlcnJvckxpbmUs
IGVycm9yTWVzc2FnZSk7CiB9CiAKIHN0YXRpYyBQYWdlKiB0b1BhZ2UoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKQEAgLTI2OCw3ICsyNjgsNyBAQCBzdGF0aWMgUGFnZSogdG9QYWdlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7
CiB9CiAKLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlY1N0YXRl
KiBleGVjLCBpbnQgc291cmNlSUQsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgU291
cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgaW50IGVycm9yTGlu
ZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZVJhbmdlJiBzb3Vy
Y2UsIGludCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBp
ZiAobV9jYWxsaW5nTGlzdGVuZXJzKQogICAgICAgICByZXR1cm47CkBAIC0yODUsMTcgKzI4NSwx
NyBAQCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkCiAKICAgICBpZiAo
IW1fbGlzdGVuZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICAg
ICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShtX2xpc3RlbmVycywgZXhlYywgc291cmNl
LCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZVVSTCwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2Up
OworICAgICAgICAgICAgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBl
eGVjLCBzb3VyY2UsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShtX2xpc3RlbmVycywgZXhlYywgc291cmNl
LCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZVVSTCwgc291cmNlSUQpOworICAgICAgICAgICAg
ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShtX2xpc3RlbmVycywgZXhlYywgc291cmNlKTsKICAgICB9
CiAKICAgICBpZiAoTGlzdGVuZXJTZXQqIHBhZ2VMaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0ZW5lcnNN
YXAuZ2V0KHBhZ2UpKSB7CiAgICAgICAgIEFTU0VSVCghcGFnZUxpc3RlbmVycy0+aXNFbXB0eSgp
KTsKICAgICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRvUGFy
c2VTb3VyY2UoKnBhZ2VMaXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSwgc3RhcnRpbmdMaW5lTnVtYmVy
LCBzb3VyY2VVUkwsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIGRpc3Bh
dGNoRmFpbGVkVG9QYXJzZVNvdXJjZSgqcGFnZUxpc3RlbmVycywgZXhlYywgc291cmNlLCBlcnJv
ckxpbmUsIGVycm9yTWVzc2FnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc3BhdGNo
RGlkUGFyc2VTb3VyY2UoKnBhZ2VMaXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSwgc3RhcnRpbmdMaW5l
TnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUlEKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFy
c2VTb3VyY2UoKnBhZ2VMaXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSk7CiAgICAgfQogCiAgICAgbV9j
YWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3BhZ2UvSmF2YVNjcmlwdERl
YnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0phdmFTY3JpcHREZWJ1Z1Nl
cnZlci5oCShyZXZpc2lvbiAzNzE0NCkKKysrIFdlYkNvcmUvcGFnZS9KYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKEphdmFTY3JpcHRF
eGVjdXRpb25DYWxsYmFjaywgUGFnZSopOwogICAgICAgICB2b2lkIHBhdXNlSWZOZWVkZWQoUGFn
ZSopOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUq
LCBpbnQgc291cmNlSUQsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMLCBjb25zdCBKU0M6
OlNvdXJjZVByb3ZpZGVyJiBzb3VyY2UsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGludCBlcnJv
ckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNc2cpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VSYW5nZSYs
IGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNc2cpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQg
c291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVt
ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNlSUQsIGludCBmaXJz
dExpbmUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwpJbmRleDogV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDM3MTQ0KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAwOC0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZWQgZm9yIEphdmFTY3JpcHRDb3JlIEFQSSBjaGFuZ2VzOiB1c2UgYSBTb3VyY2VSYW5nZSBp
bnN0ZWFkIG9mCisgICAgICAgIGJyb2tlbiBvdXQgcGFyYW1ldGVycy4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERl
YnVnZ2VyLm1tOgorICAgICAgICAodG9OU1N0cmluZyk6CisgICAgICAgIChXZWJTY3JpcHREZWJ1
Z2dlcjo6c291cmNlUGFyc2VkKToKKwogMjAwOC0wOS0zMCAgS2V2aW4gRGVja2VyICA8a2RlY2tl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHJldmlzaW9uIDM3MTQ0KQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgV2ViU2NyaXB0RGVidWdnZXIgOiBwdWJsaWMgSlNDOjpE
ZQogcHVibGljOgogICAgIFdlYlNjcmlwdERlYnVnZ2VyKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBpbnQgc291
cmNlSUQsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMLCBjb25zdCBKU0M6OlNvdXJjZVBy
b3ZpZGVyJiBzb3VyY2UsIGludCBsaW5lTnVtYmVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6
OlVTdHJpbmcmIGVycm9yTXNnKTsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VSYW5nZSYgc291cmNlLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBKU0M6OlVTdHJpbmcmIGVycm9yTXNnKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2
ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNlSUQsIGludCBsaW5l
TnVtYmVyKTsKICAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwogICAgIHZpcnR1YWwg
dm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNvdXJj
ZUlELCBpbnQgbGluZU51bWJlcik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0
RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnZ2VyLm1tCShyZXZpc2lvbiAzNzE0NCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJTY3Jp
cHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBOU1N0cmluZyAq
dG9OU1N0cmluZyhjb25zdCBVU3RyaW5nJiBzKQogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aENoYXJhY3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyKj4ocy5kYXRhKCkp
IGxlbmd0aDpzLnNpemUoKV07CiB9CiAKLU5TU3RyaW5nICp0b05TU3RyaW5nKGNvbnN0IFNvdXJj
ZVByb3ZpZGVyJiBzKQorTlNTdHJpbmcgKnRvTlNTdHJpbmcoY29uc3QgU291cmNlUmFuZ2UmIHMp
CiB7CiAgICAgaWYgKCFzLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtODUsNyAr
ODUsNyBAQCBXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHCiB9CiAKIC8v
IGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpz
b3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBpbnQgc291cmNlSUQsIGNvbnN0IFVTdHJpbmcm
IHVybCwgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50IGxpbmVOdW1iZXIsIGludCBl
cnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTXNnKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dl
cjo6c291cmNlUGFyc2VkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlUmFuZ2UmIHNvdXJj
ZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNc2cpCiB7CiAgICAgaWYgKG1f
Y2FsbGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1cm47CkBAIC05MywxOCArOTMsMTggQEAgdm9p
ZCBXZWJTY3JpcHREZWJ1Z2dlcjo6c291cmNlUGFyc2VkKEV4ZQogICAgIG1fY2FsbGluZ0RlbGVn
YXRlID0gdHJ1ZTsKIAogICAgIE5TU3RyaW5nICpuc1NvdXJjZSA9IHRvTlNTdHJpbmcoc291cmNl
KTsKLSAgICBOU1VSTCAqbnNVUkwgPSB0b05TVVJMKHVybCk7CisgICAgTlNVUkwgKm5zVVJMID0g
dG9OU1VSTChzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwogCiAgICAgV2ViRnJhbWUgKndlYkZy
YW1lID0gdG9XZWJGcmFtZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107CiAgICAgaWYgKGVycm9yTGluZSA9PSAt
MSkgewotICAgICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkaWRQYXJzZVNvdXJjZTpuc1NvdXJjZSBiYXNlTGluZU51bWJlcjpsaW5l
TnVtYmVyIGZyb21VUkw6bnNVUkwgc291cmNlSWQ6c291cmNlSUQgZm9yV2ViRnJhbWU6d2ViRnJh
bWVdOwotICAgICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkaWRQYXJzZVNvdXJjZTpuc1NvdXJjZSBmcm9tVVJMOltuc1VSTCBhYnNv
bHV0ZVN0cmluZ10gc291cmNlSWQ6c291cmNlSUQgZm9yV2ViRnJhbWU6d2ViRnJhbWVdOyAvLyBk
ZXByZWNhdGVkIGRlbGVnYXRlIG1ldGhvZAorICAgICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVn
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRQYXJzZVNvdXJjZTpuc1NvdXJj
ZSBiYXNlTGluZU51bWJlcjpzb3VyY2UuZmlyc3RMaW5lKCkgZnJvbVVSTDpuc1VSTCBzb3VyY2VJ
ZDpzb3VyY2UucHJvdmlkZXIoKS0+YXNJZCgpIGZvcldlYkZyYW1lOndlYkZyYW1lXTsKKyAgICAg
ICAgW1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZp
ZXcgZGlkUGFyc2VTb3VyY2U6bnNTb3VyY2UgZnJvbVVSTDpbbnNVUkwgYWJzb2x1dGVTdHJpbmdd
IHNvdXJjZUlkOnNvdXJjZS5wcm92aWRlcigpLT5hc0lkKCkgZm9yV2ViRnJhbWU6d2ViRnJhbWVd
OyAvLyBkZXByZWNhdGVkIGRlbGVnYXRlIG1ldGhvZAogICAgIH0gZWxzZSB7CiAgICAgICAgIE5T
U3RyaW5nKiBuc0Vycm9yTWVzc2FnZSA9IHRvTlNTdHJpbmcoZXJyb3JNc2cpOwogICAgICAgICBO
U0RpY3Rpb25hcnkgKmluZm8gPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
QW5kS2V5czpuc0Vycm9yTWVzc2FnZSwgV2ViU2NyaXB0RXJyb3JEZXNjcmlwdGlvbktleSwgW05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDplcnJvckxpbmVdLCBXZWJTY3JpcHRFcnJvckxp
bmVOdW1iZXJLZXksIG5pbF07CiAgICAgICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vycm9yIGFs
bG9jXSBpbml0V2l0aERvbWFpbjpXZWJTY3JpcHRFcnJvckRvbWFpbiBjb2RlOldlYlNjcmlwdEdl
bmVyYWxFcnJvckNvZGUgdXNlckluZm86aW5mb107Ci0gICAgICAgIFtbd2ViVmlldyBfc2NyaXB0
RGVidWdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGZhaWxlZFRvUGFyc2VTb3Vy
Y2U6bnNTb3VyY2UgYmFzZUxpbmVOdW1iZXI6bGluZU51bWJlciBmcm9tVVJMOm5zVVJMIHdpdGhF
cnJvcjplcnJvciBmb3JXZWJGcmFtZTp3ZWJGcmFtZV07CisgICAgICAgIFtbd2ViVmlldyBfc2Ny
aXB0RGVidWdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGZhaWxlZFRvUGFyc2VT
b3VyY2U6bnNTb3VyY2UgYmFzZUxpbmVOdW1iZXI6c291cmNlLmZpcnN0TGluZSgpIGZyb21VUkw6
bnNVUkwgd2l0aEVycm9yOmVycm9yIGZvcldlYkZyYW1lOndlYkZyYW1lXTsKICAgICAgICAgW2Vy
cm9yIHJlbGVhc2VdOwogICAgICAgICBbaW5mbyByZWxlYXNlXTsKICAgICB9Cg==
</data>
<flag name="review"
          id="10839"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24003</attachid>
            <date>2008-10-01 20:08:25 -0700</date>
            <delta_ts>2008-10-01 22:28:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-parser.txt</filename>
            <type>text/plain</type>
            <size>119747</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ2IEBACisyMDA4LTEwLTAxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcmVsaW1pbmFyeSBzdGVwIHRvd2FyZCBkeW5h
bWljIHJlY29tcGlsYXRpb246IFN0YW5kYXJkaXplZCBhbmQKKyAgICAgICAgc2ltcGxpZmllZCB0
aGUgcGFyc2luZyBpbnRlcmZhY2UuCisgICAgICAgIAorICAgICAgICBUaGUgbWFpbiBnb2FsIGlu
IHRoaXMgcGF0Y2ggaXMgdG8gbWFrZSBpdCBlYXN5IHRvIGFzayBmb3IgYSBkdXBsaWNhdGUKKyAg
ICAgICAgY29tcGlsYXRpb24sIGFuZCBnZXQgYmFjayBhIGR1cGxpY2F0ZSByZXN1bHQgLS0gc2Ft
ZSBzb3VyY2UgVVJMLCBzYW1lCisgICAgICAgIGRlYnVnZ2VyIC8gcHJvZmlsZXIgSUQsIHNhbWUg
dG9TdHJpbmcgYmVoYXZpb3IsIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYXNpYyB1bml0
IG9mIGNvbXBpbGF0aW9uIGFuZCBldmFsdWF0aW9uIGlzIG5vdyBTb3VyY2VDb2RlLCB3aGljaAor
ICAgICAgICBlbmNvbXBhc3NlcyBhIFNvdXJjZVByb3ZpZGVyLCBhIHJhbmdlIGluIHRoYXQgcHJv
dmlkZXIsIGFuZCBhIHN0YXJ0aW5nCisgICAgICAgIGxpbmUgbnVtYmVyLgorCisgICAgICAgIEEg
U291cmNlUHJvdmlkZXIgbm93IGVuY29tcGFzc2VzIGEgc291cmNlIFVSTCwgYW5kICppcyogYSBz
b3VyY2UgSUQsCisgICAgICAgIHNpbmNlIGEgcG9pbnRlciBpcyBhIHVuaXF1ZSBpZGVudGlmaWVy
LgorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAgIChKU0V2YWx1YXRlU2NyaXB0
KToKKyAgICAgICAgKEpTQ2hlY2tTY3JpcHRTeW50YXgpOiBQcm92aWRlIGEgU291cmNlQ29kZSB0
byB0aGUgSW50ZXJwcmV0ZXIsIHNpbmNlCisgICAgICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdl
ciBzdXBwb3J0ZWQuCisgICAgICAgIAorICAgICAgICAqIFZNL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpFdmFsQ29kZUNhY2hlOjpnZXQpOiBQcm92aWRlIGEgU291cmNlQ29kZSB0byB0aGUg
SW50ZXJwcmV0ZXIsIHNpbmNlCisgICAgICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBzdXBw
b3J0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogQVNTRVJUIHNvbWV0
aGluZyB0aGF0IHVzZWQgdG8gYmUgQVNTRVJUZWQKKyAgICAgICAgYnkgb3VyIGNhbGxlciAtLSB0
aGlzIGlzIGEgYmV0dGVyIGJvdHRsZW5lY2suCisKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6IFVwZGF0
ZWQgZm9yIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSdzIHBhcmFtZXRl
cnMgYXJlIG5vIGxvbmdlciBhIHd0Zjo6VmVjdG9yLgorCisgICAgICAgICoga2pzL0FyZ3VtZW50
cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRzKTogZGl0dG8KKworICAg
ICAgICAqIGtqcy9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
Q2FsbEZyYW1lOjpldmFsdWF0ZSk6IFByb3ZpZGUgYSBTb3VyY2VDb2RlIHRvIHRoZSBQYXJzZXIs
CisgICAgICAgIHNpbmNlIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAg
ICAgICAgKiBranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEZ1bmN0aW9uKTogUHJvdmlkZSBhIFNvdXJjZUNvZGUgdG8gdGhlIFBhcnNlciwgc2luY2UK
KyAgICAgICAgb3RoZXIgQVBJcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gQWRvcHQgRnVuY3Rp
b25Cb2R5Tm9kZSdzIG5ldworICAgICAgICAiZmluaXNoUGFyc2luZyIgQVBJLgorCisgICAgICAg
ICoga2pzL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhH
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRQYXJhbWV0ZXJOYW1lKTogVXBk
YXRlZCBmb3IgdGhlIGZhY3QgdGhhdAorICAgICAgICBGdW5jdGlvbkJvZHlOb2RlJ3MgcGFyYW1l
dGVycyBhcmUgbm8gbG9uZ2VyIGEgd3RmOjpWZWN0b3IuCisKKyAgICAgICAgKiBranMvSlNGdW5j
dGlvbi5oOiBOaXhlZCBzb21lIGNydWZ0LgorCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOiBQcm92aWRlIGEg
U291cmNlQ29kZSB0byB0aGUgUGFyc2VyLCBzaW5jZQorICAgICAgICBvdGhlciBBUElzIGFyZSBu
byBsb25nZXIgc3VwcG9ydGVkLiAKKworICAgICAgICAqIGtqcy9QYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OnBhcnNlKTogUmVxdWlyZSBhIFNvdXJjZUNvZGUgYXJndW1lbnQsIGlu
c3RlYWQgb2YgYSBidW5jaAorICAgICAgICBvZiBicm9rZW4gb3V0IHBhcmFtZXRlcnMuIFN0b3Ag
dHJhY2tpbmcgc291cmNlSWQgYXMgYW4gaW50ZWdlciwgc2luY2Ugd2UKKyAgICAgICAgdXNlIHRo
ZSBTb3VyY2VQcm92aWRlciBwb2ludGVyIGZvciB0aGlzIG5vdy4gRG9uJ3QgY2xhbXAgdGhlCisg
ICAgICAgIHN0YXJ0aW5nTGluZU51bWJlciwgc2luY2UgU291cmNlQ29kZSBkb2VzIHRoYXQgbm93
LgorCisgICAgICAgICoga2pzL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnBhcnNl
KTogU3RhbmRhcmRpemVkIHRoZSBwYXJzaW5nIGludGVyZmFjZSB0byByZXF1aXJlIGEKKyAgICAg
ICAgU291cmNlQ29kZS4KKworICAgICAgICAqIGtqcy9TaGVsbC5jcHA6CisgICAgICAgIChmdW5j
dGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAocHJldHR5UHJpbnRT
Y3JpcHQpOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3Rp
dmUpOiBQcm92aWRlIGEgU291cmNlQ29kZSB0byB0aGUgSW50ZXJwcmV0ZXIsIHNpbmNlCisgICAg
ICAgIG90aGVyIEFQSXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAgKiBranMv
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6OlNvdXJjZVBy
b3ZpZGVyKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6OnVybCk6CisgICAgICAgIChK
U0M6OlNvdXJjZVByb3ZpZGVyOjphc0lkKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcik6IEFkZGVkIG5ldworICAgICAgICByZXNwb25zaWJpbGl0aWVz
IGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAqIGtqcy9Tb3VyY2VSYW5nZS5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VDb2RlOjpTb3VyY2VDb2RlKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29k
ZTo6dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjpwcm92aWRlcik6CisgICAg
ICAgIChKU0M6OlNvdXJjZUNvZGU6OmZpcnN0TGluZSk6CisgICAgICAgIChKU0M6OlNvdXJjZUNv
ZGU6OmRhdGEpOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjpsZW5ndGgpOiBBZGRlZCBuZXcg
cmVzcG9uc2liaWxpdGllcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIFJlbmFtZWQgU291cmNl
UmFuZ2UgdG8gU291cmNlQ29kZSwgYmFzZWQgb24gcmV2aWV3IGZlZWRiYWNrLiBBZGRlZAorICAg
ICAgICBhIG1ha2VTb3VyY2UgZnVuY3Rpb24gZm9yIGNvbnZlbmllbmNlLgorCisgICAgICAgICog
a2pzL2RlYnVnZ2VyLmg6IFByb3ZpZGUgYSBTb3VyY2VDb2RlIHRvIHRoZSBjbGllbnQsIHNpbmNl
IG90aGVyIEFQSXMKKyAgICAgICAgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAg
KiBranMvZ3JhbW1hci55OiBQcm92aWRlIHN0YXJ0aW5nTGluZU51bWJlciB3aGVuIGNyZWF0aW5n
IGEgU291cmNlQ29kZS4KKworICAgICAgICAqIGtqcy9kZWJ1Z2dlci5oOiBUcmVhdCBzb3VyY2VJ
ZCBhcyBpbnRwdHJfdCB0byBhdm9pZCBsb3NzIG9mIHByZWNpc2lvbgorICAgICAgICBvbiA2NGJp
dCBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGtqcy9pbnRlcnByZXRlci5oOiBSZXF1aXJlIGEgU291
cmNlQ29kZSBpbnN0ZWFkIG9mIGJyb2tlbiBvdXQgYXJndW1lbnRzLgorCisgICAgICAgICoga2pz
L2xleGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldENvZGUpOgorICAgICAgICAqIGtq
cy9sZXhlci5oOgorICAgICAgICAoSlNDOjpMZXhlcjo6c291cmNlUmFuZ2UpOiBGb2xkIHRvZ2V0
aGVyIHRoZSBTb3VyY2VQcm92aWRlciBhbmQgbGluZSBudW1iZXIKKyAgICAgICAgaW50byBhIFNv
dXJjZUNvZGUuIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBMZXhlciB3b3VsZCBhY2NpZGVudGFsbHkg
a2VlcAorICAgICAgICBhbGl2ZSB0aGUgbGFzdCBTb3VyY2VQcm92aWRlciBmb3JldmVyLgorCisg
ICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpTY29wZU5v
ZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAgICAgICAo
SlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OkV2YWxO
b2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmdlbmVyYXRlQ29kZSk6CisgICAgICAgIChK
U0M6OkV2YWxOb2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpG
dW5jdGlvbkJvZHlOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNo
UGFyc2luZyk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmdlbmVyYXRlQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1Ob2RlOjpnZW5lcmF0ZUNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlO
b2RlOjpwYXJhbVN0cmluZyk6CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6KToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzb3VyY2VJZCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6Oik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9k
eU5vZGU6OnBhcmFtZXRlckNvdW50KToKKyAgICAgICAgKEpTQzo6RnVuY0V4cHJOb2RlOjopOgor
ICAgICAgICAoSlNDOjpGdW5jRGVjbE5vZGU6Oik6IFN0b3JlIGEgU291cmNlQ29kZSBpbiBhbGwg
U2NvcGVOb2Rlcywgc2luY2UKKyAgICAgICAgU291cmNlQ29kZSBpcyBub3cgcmVzcG9uc2libGUg
Zm9yIHRyYWNraW5nIFVSTCwgSUQsIGV0Yy4gU3RyZWFtbGluZWQKKyAgICAgICAgc29tZSBhZCBo
b2MgRnVuY3Rpb25Cb2R5Tm9kZSBmaXh1cHMgaW50byBhICJmaW5pc2hQYXJzaW5nIiBmdW5jdGlv
biwgdG8KKyAgICAgICAgaGVscCBtYWtlIGNsZWFyIHdoYXQgeW91IG5lZWQgdG8gZG8gaW4gb3Jk
ZXIgdG8gZmluaXNoIHBhcnNpbmcgYQorICAgICAgICBGdW5jdGlvbkJvZHlOb2RlLgorCisgICAg
ICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjo6OnJlbGVhc2VCdWZmZXIpOiBEb24n
dCBBU1NFUlQgdGhhdCByZWxlYXNlQnVmZmVyKCkgaXMgb25seSBjYWxsZWQKKyAgICAgICAgd2hl
biBidWZmZXIgaXMgbm90IDAsIHNpbmNlIEZ1bmN0aW9uQm9keU5vZGUgaXMgbW9yZSB0aGFuIGhh
cHB5CisgICAgICAgIHRvIGdldCBiYWNrIGEgMCBidWZmZXIsIGFuZCBvdGhlciBmdW5jdGlvbnMg
bGlrZSBSZWZQdHI6OnJlbGVhc2UoKSBhbGxvdworICAgICAgICBmb3IgMCwgdG9vLgorCiAyMDA4
LTA5LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlz
aW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCwxNyArOTgsMTYgQEAgX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1YWxFUEtO
U183VVN0cmluZwogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9y
VHlwZUUKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVF
UEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVJL
TlNfN1VTdHJpbmdFCi1fX1pOM0pTQzExSW50ZXJwcmV0ZXIxMWNoZWNrU3ludGF4RVBOU185RXhl
Y1N0YXRlRVJLTlNfN1VTdHJpbmdFaVM1XworX19aTjNKU0MxMUludGVycHJldGVyMTFjaGVja1N5
bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUUKIF9fWk4zSlNDMTFJbnRlcnBy
ZXRlcjIxc2hvdWxkUHJpbnRFeGNlcHRpb25zRXYKIF9fWk4zSlNDMTFJbnRlcnByZXRlcjI0c2V0
U2hvdWxkUHJpbnRFeGNlcHRpb25zRWIKLV9fWk4zSlNDMTFJbnRlcnByZXRlcjhldmFsdWF0ZUVQ
TlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNfN1VTdHJpbmdFaU4zV1RGMTBQYXNz
UmVmUHRySU5TXzE0U291cmNlUHJvdmlkZXJFRUVQTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzExSW50
ZXJwcmV0ZXI4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFpbkVSS05TXzdV
U3RyaW5nRWlTN19QTlNfN0pTVmFsdWVFCitfX1pOM0pTQzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVF
UE5TXzlFeGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFpbkVSS05TXzEwU291cmNlQ29kZUVQTlNfN0pT
VmFsdWVFCiBfX1pOM0pTQzExSlNJbW1lZGlhdGUxMm5vbklubGluZU5hTkV2CiBfX1pOM0pTQzEx
SlNJbW1lZGlhdGU4dG9PYmplY3RFUEtOU183SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDMTFKU0ltbWVkaWF0ZTh0b1N0cmluZ0VQS05TXzdKU1ZhbHVlRQogX19aTjNKU0MxMUpTSW1t
ZWRpYXRlOXByb3RvdHlwZUVQS05TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0Mx
MVByb2ZpbGVOb2RlNHNvcnRFUEZiUktOM1dURjZSZWZQdHJJUzBfRUVTNV9FCi1fX1pOM0pTQzEx
UHJvZ3JhbU5vZGU2Y3JlYXRlRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRTb3VyY2VFbGVtZW50
c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJTlNfMTBJZGVudGlmaWVyRWpFTG0xNkVFRVBOUzZfSU5T
NV82UmVmUHRySU5TXzEyRnVuY0RlY2xOb2RlRUVFTG0xNkVFRVBOU18xNFNvdXJjZVByb3ZpZGVy
RWJiYmkKK19fWk4zSlNDMTFQcm9ncmFtTm9kZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBO
U18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklOU18xMElkZW50aWZpZXJF
akVMbTE2RUVFUE5TNl9JTlM1XzZSZWZQdHJJTlNfMTJGdW5jRGVjbE5vZGVFRUVMbTE2RUVFUktO
U18xMFNvdXJjZUNvZGVFYmJiaQogX19aTjNKU0MxMVByb3BlcnR5TWFwM3B1dEVSS05TXzEwSWRl
bnRpZmllckVQTlNfN0pTVmFsdWVFamJQTlNfOEpTT2JqZWN0RVJOU18xNVB1dFByb3BlcnR5U2xv
dEVSUFM1XwogX19aTjNKU0MxMVByb3BlcnR5TWFwOWdldE9mZnNldEVSS05TXzEwSWRlbnRpZmll
ckVSagogX19aTjNKU0MxMVByb3BlcnR5TWFwRDFFdgpAQCAtMjAwLDcgKzE5OSw3IEBAIF9fWk4z
SlNDNkpTTG9jazRsb2NrRWIKIF9fWk4zSlNDNkpTTG9jazZ1bmxvY2tFYgogX19aTjNKU0M2SlNM
b2NrOWxvY2tDb3VudEV2CiBfX1pOM0pTQzZKU0xvY2tDMUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4z
SlNDNlBhcnNlcjVwYXJzZUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRWlOM1dURjEwUGFz
c1JlZlB0cklOU18xNFNvdXJjZVByb3ZpZGVyRUVFUGlTQV9QUzNfCitfX1pOM0pTQzZQYXJzZXI1
cGFyc2VFUE5TXzlFeGVjU3RhdGVFUGlQTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzZzdHJ0b2RFUEtj
UFBjCiBfX1pOM0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRVBOU183SlNWYWx1ZUUKIF9fWk4zSlND
N0NTdHJpbmdEMUV2CkBAIC0zMTcsNyArMzE2LDcgQEAgX19aTkszSlNDN0pTVmFsdWUxNnRvVUlu
dDMyU2xvd0Nhc2VFUE5TXwogX19aTkszSlNDN0pTVmFsdWU3dG9GbG9hdEVQTlNfOUV4ZWNTdGF0
ZUUKIF9fWk5LM0pTQzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pT
QzdNYWNoaW5lMTRyZXRyaWV2ZUNhbGxlckVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTZJbnRlcm5hbEZ1
bmN0aW9uRQotX19aTkszSlNDN01hY2hpbmUxOHJldHJpZXZlTGFzdENhbGxlckVQTlNfOUV4ZWNT
dGF0ZUVSaVMzX1JOU183VVN0cmluZ0VSUE5TXzdKU1ZhbHVlRQorX19aTkszSlNDN01hY2hpbmUx
OHJldHJpZXZlTGFzdENhbGxlckVQTlNfOUV4ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJQTlNf
N0pTVmFsdWVFCiBfX1pOSzNKU0M3VVN0cmluZzEwVVRGOFN0cmluZ0ViCiBfX1pOSzNKU0M3VVN0
cmluZzE0dG9TdHJpY3RVSW50MzJFUGIKIF9fWk5LM0pTQzdVU3RyaW5nNWFzY2lpRXYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgImNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJPcGFxdWVKU1N0
cmluZy5oIgorI2luY2x1ZGUgIlNvdXJjZVJhbmdlLmgiCiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0
ZS5oPgogI2luY2x1ZGUgPGtqcy9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8a2pz
L2ludGVycHJldGVyLmg+CkBAIC00OSw3ICs1MCw4IEBAIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNj
cmlwdChKU0NvbnRleHRSZWYKIAogICAgIC8vIEludGVycHJldGVyOjpldmFsdWF0ZSBzZXRzICJ0
aGlzIiB0byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBpcyBOVUxMCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKLSAgICBDb21w
bGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VVUkwt
PnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzY3JpcHQtPnVzdHJpbmcoKSwganNUaGlz
T2JqZWN0KTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3Ry
aW5nKCksIHNvdXJjZVVSTC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOworICAgIENv
bXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwg
anNUaGlzT2JqZWN0KTsKIAogICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93
KSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCkBAIC03MCw3ICs3Miw4IEBAIGJvb2wgSlNDaGVj
a1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3QKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVh
cC0+cmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIENvbXBs
ZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpjaGVja1N5bnRheChleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgc291cmNlVVJMLT51c3RyaW5nKCksIHN0YXJ0
aW5nTGluZU51bWJlciwgc2NyaXB0LT51c3RyaW5nKCkpOworICAgIFNvdXJjZUNvZGUgc291cmNl
ID0gbWFrZVNvdXJjZShzY3JpcHQtPnVzdHJpbmcoKSwgc291cmNlVVJMLT51c3RyaW5nKCksIHN0
YXJ0aW5nTGluZU51bWJlcik7CisgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSW50ZXJwcmV0
ZXI6OmNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LCBzb3VyY2UpOwogICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoY29t
cGxldGlvbi52YWx1ZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5oCShyZXZpc2lvbiAzNzE3
OSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsMTYgKzE1NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBldmFsTm9k
ZSA9IGNhY2hlTWFwLmdldChldmFsU291cmNlLnJlcCgpKTsKIAogICAgICAgICAgICAgaWYgKCFl
dmFsTm9kZSkgewotICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZDsKICAgICAgICAgICAgICAg
ICBpbnQgZXJyTGluZTsKICAgICAgICAgICAgICAgICBVU3RyaW5nIGVyck1zZzsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBldmFsTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJz
ZTxFdmFsTm9kZT4oZXhlYywgVVN0cmluZygpLCAxLCBVU3RyaW5nU291cmNlUHJvdmlkZXI6OmNy
ZWF0ZShldmFsU291cmNlKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgICAg
ICAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKGV2YWxTb3VyY2UpOworICAg
ICAgICAgICAgICAgIGV2YWxOb2RlID0gZXhlYy0+cGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPihl
eGVjLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKICAgICAgICAgICAgICAgICBpZiAoZXZh
bE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWxTb3VyY2Uuc2l6ZSgpIDwgbWF4
Q2FjaGVhYmxlU291cmNlTGVuZ3RoICYmICgqc2NvcGVDaGFpbi0+YmVnaW4oKSktPmlzVmFyaWFi
bGVPYmplY3QoKSAmJiBjYWNoZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWNoZU1hcC5zZXQoZXZhbFNvdXJjZS5yZXAoKSwgZXZhbE5vZGUp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5l
LCBzb3VyY2VJZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2Uu
cHJvdmlkZXIoKS0+YXNJZCgpLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk2LDYgKzE5Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBzb3VyY2Uoc291cmNlXykKICAgICAgICAgICAg
ICwgc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldF8pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChzb3VyY2UpOwogICAgICAgICB9CiAKICAgICAgICAgfkNvZGVCbG9jaygpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxNiAr
MzEyLDE3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2QKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICBhZGRW
YXIodmFyU3RhY2tbaV0uZmlyc3QsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3Rh
Y2tzOjpJc0NvbnN0YW50KTsKIAotICAgIFZlY3RvcjxJZGVudGlmaWVyPiYgcGFyYW1ldGVycyA9
IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwotICAgIG1fbmV4dFBhcmFtZXRlciA9IC1SZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBwYXJhbWV0ZXJzLnNpemUoKSAtIDE7Ci0g
ICAgbV9wYXJhbWV0ZXJzLnJlc2l6ZSgxICsgcGFyYW1ldGVycy5zaXplKCkpOyAvLyByZXNlcnZl
IHNwYWNlIGZvciAidGhpcyIKKyAgICBjb25zdCBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzID0gZnVu
Y3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCk7CisgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gZnVu
Y3Rpb25Cb2R5LT5wYXJhbWV0ZXJDb3VudCgpOworICAgIG1fbmV4dFBhcmFtZXRlciA9IC1SZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBwYXJhbWV0ZXJDb3VudCAtIDE7CisgICAg
bV9wYXJhbWV0ZXJzLnJlc2l6ZSgxICsgcGFyYW1ldGVyQ291bnQpOyAvLyByZXNlcnZlIHNwYWNl
IGZvciAidGhpcyIKIAogICAgIC8vIEFkZCAidGhpcyIgYXMgYSBwYXJhbWV0ZXIKICAgICBtX3Ro
aXNSZWdpc3Rlci5zZXRJbmRleChtX25leHRQYXJhbWV0ZXIpOwogICAgICsrbV9uZXh0UGFyYW1l
dGVyOwogICAgICsrbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnM7CiAgICAgCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKICAgICAgICAgYWRkUGFyYW1ldGVyKHBh
cmFtZXRlcnNbaV0pOwogCiAgICAgYWxsb2NhdGVDb25zdGFudHMoZnVuY3Rpb25Cb2R5LT5uZWVk
ZWRDb25zdGFudHMoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzcxNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkw
Myw3ICszOTAzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVDYWxsZXIoRXhlY1N0YQog
ICAgIHJldHVybiBjYWxsZXI7CiB9CiAKLXZvaWQgTWFjaGluZTo6cmV0cmlldmVMYXN0Q2FsbGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50JiBsaW5lTnVtYmVyLCBpbnQmIHNvdXJjZUlkLCBVU3RyaW5n
JiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5jdGlvbikgY29uc3QKK3ZvaWQgTWFjaGluZTo6cmV0
cmlldmVMYXN0Q2FsbGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJf
dCYgc291cmNlSWQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25z
dAogewogICAgIGZ1bmN0aW9uID0gMDsKICAgICBsaW5lTnVtYmVyID0gLTE7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0v
TWFjaGluZS5oCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24q
KSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSogcmV0cmlldmVDYWxsZXIoRXhlY1N0YXRlKiwgSW50
ZXJuYWxGdW5jdGlvbiopIGNvbnN0OwotICAgICAgICB2b2lkIHJldHJpZXZlTGFzdENhbGxlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCYgbGluZU51bWJlciwgaW50JiBzb3VyY2VJZCwgVVN0cmluZyYg
c291cmNlVVJMLCBKU1ZhbHVlKiYgZnVuY3Rpb24pIGNvbnN0OworICAgICAgICB2b2lkIHJldHJp
ZXZlTGFzdENhbGxlcihFeGVjU3RhdGUqIGV4ZWMsIGludCYgbGluZU51bWJlciwgaW50cHRyX3Qm
IHNvdXJjZUlkLCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5jdGlvbikgY29uc3Q7
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oY29u
c3QgUmVnaXN0ZXIqIHIpIHsgcmV0dXJuIHJbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXS5zY29w
ZUNoYWluKCk7IH0KICAgICAgICAgc3RhdGljIENvZGVCbG9jayogY29kZUJsb2NrKGNvbnN0IFJl
Z2lzdGVyKiByKSB7IHJldHVybiByW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5jb2RlQmxvY2so
KTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzcxNzkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBudW1Bcmd1bWVudHM7CiAgICAgICAgIGV4
ZWMtPm1hY2hpbmUoKS0+Z2V0QXJndW1lbnRzRGF0YShjYWxsRnJhbWUsIGNhbGxlZSwgZmlyc3RQ
YXJhbWV0ZXJJbmRleCwgYXJndiwgbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBkLT5udW1QYXJh
bWV0ZXJzID0gY2FsbGVlLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAgIGQtPm51bVBhcmFtZXRl
cnMgPSBjYWxsZWUtPm1fYm9keS0+cGFyYW1ldGVyQ291bnQoKTsKICAgICAgICAgZC0+Zmlyc3RQ
YXJhbWV0ZXJJbmRleCA9IGZpcnN0UGFyYW1ldGVySW5kZXg7CiAgICAgICAgIGQtPm51bUFyZ3Vt
ZW50cyA9IG51bUFyZ3VtZW50czsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRGVidWdnZXJD
YWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEzICs3MCwxMiBAQCBKU1Zh
bHVlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uCiAKICAgICBFeGVjU3RhdGUgbmV3
RXhlYyhtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLCBtX3JlZ2lzdGVycyk7CiAKLSAgICBp
bnQgc291cmNlSWQ7CiAgICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7Ci0gICAg
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IFVTdHJpbmdTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKHNjcmlwdCk7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IG5l
d0V4ZWMucGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPigmbmV3RXhlYywgVVN0cmluZygpLCAxLCBz
b3VyY2VQcm92aWRlciwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgU291cmNl
Q29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdCk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBl
dmFsTm9kZSA9IG5ld0V4ZWMucGFyc2VyKCktPnBhcnNlPEV2YWxOb2RlPigmbmV3RXhlYywgc291
cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFldmFsTm9kZSkKLSAgICAgICAgcmV0
dXJuIEVycm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUs
IHNvdXJjZUlkLCAwKTsKKyAgICAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoJm5ld0V4ZWMsIFN5
bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lkKCksIHNv
dXJjZS5wcm92aWRlcigpLT51cmwoKSk7CiAKICAgICByZXR1cm4gbmV3RXhlYy5tYWNoaW5lKCkt
PmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCB0aGlzT2JqZWN0KCksIG1fc2NvcGVD
aGFpbiwgJmV4Y2VwdGlvbik7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXJyb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FcnJvci5jcHAJKHJldmlzaW9uIDM3
MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Vycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBjb25zdCBjaGFyKiBleHByZXNzaW9uQmVnaW5PZmZzZXRQcm9wZXJ0CiBj
b25zdCBjaGFyKiBleHByZXNzaW9uQ2FyZXRPZmZzZXRQcm9wZXJ0eU5hbWUgPSAiZXhwcmVzc2lv
bkNhcmV0T2Zmc2V0IjsKIGNvbnN0IGNoYXIqIGV4cHJlc3Npb25FbmRPZmZzZXRQcm9wZXJ0eU5h
bWUgPSAiZXhwcmVzc2lvbkVuZE9mZnNldCI7CiAKLUpTT2JqZWN0KiBFcnJvcjo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCkKK0pT
T2JqZWN0KiBFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNv
bnN0IFVTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnRwdHJfdCBzb3VyY2VJZCwg
Y29uc3QgVVN0cmluZyYgc291cmNlVVJMKQogewogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvcjsK
ICAgICBjb25zdCBjaGFyKiBuYW1lOwpAQCAtMTE3LDcgKzExNyw3IEBAIEpTT2JqZWN0KiB0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXIKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUpTT2Jq
ZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IFVT
dHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJpbmcmIHNv
dXJjZVVSTCkKK0pTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBl
IHR5cGUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lLCBpbnRwdHJfdCBzb3VyY2VJ
ZCwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKQogewogICAgIEpTT2JqZWN0KiBlcnJvciA9IEVy
cm9yOjpjcmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwgbGluZSwgc291cmNlSWQsIHNvdXJjZVVS
TCk7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FcnJvci5oCShy
ZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FcnJvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwxMSArNDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3Mg
RXJyb3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGUoRXhl
Y1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwpOworICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcm
IG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnRwdHJfdCBzb3VyY2VJZCwgY29uc3QgVVN0cmlu
ZyYgc291cmNlVVJMKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKICAgICB9OwogCi0gICAgSlNPYmpl
Y3QqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nJiBtZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VV
UkwpOworICAgIEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29u
c3QgVVN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludHB0cl90IHNvdXJjZUlkLCBj
b25zdCBVU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNT
dGF0ZSosIEVycm9yVHlwZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSk7CiAgICAgSlNPYmplY3Qq
IHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsK
ICAgICBKU09iamVjdCogdGhyb3dFcnJvcihFeGVjU3RhdGUqLCBFcnJvclR5cGUpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzcx
NzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDI4ICs4NCwyMyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24o
RXhlY1N0YXRlKiBlCiAgICAgfQogCiAgICAgLy8gcGFyc2UgdGhlIHNvdXJjZSBjb2RlCi0gICAg
aW50IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwotICAg
IFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlID0gVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpj
cmVhdGUoYm9keSk7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9
IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCBzb3VyY2VVUkws
IGxpbmVOdW1iZXIsIHNvdXJjZSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAg
U291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKGJvZHksIHNvdXJjZVVSTCwgbGluZU51bWJl
cik7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSA9IGV4ZWMtPnBh
cnNlcigpLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAm
ZXJyTXNnKTsKIAogICAgIC8vIE5vIHByb2dyYW0gbm9kZSA9PSBzeW50YXggZXJyb3IgLSB0aHJv
dyBhIHN5bnRheCBlcnJvcgogICAgIGlmICghZnVuY3Rpb25Cb2R5KQogICAgICAgICAvLyBXZSBj
YW4ndCByZXR1cm4gYSBDb21wbGV0aW9uKFRocm93KSBoZXJlLCBzbyBqdXN0IHNldCB0aGUgZXhj
ZXB0aW9uCiAgICAgICAgIC8vIGFuZCByZXR1cm4gaXQKLSAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIHNvdXJjZVVS
TCk7Ci0gICAgCi0gICAgZnVuY3Rpb25Cb2R5LT5zZXRTb3VyY2UoU291cmNlUmFuZ2Uoc291cmNl
LCAwLCBzb3VyY2UtPmxlbmd0aCgpKSk7Ci0gICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotCi0gICAg
SlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rp
b25OYW1lLCBmdW5jdGlvbkJvZHkuZ2V0KCksIHNjb3BlQ2hhaW4ubm9kZSgpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291
cmNlLnByb3ZpZGVyKCktPmFzSWQoKSwgc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKIAogICAg
IC8vIHBhcnNlIHBhcmFtZXRlciBsaXN0LiB0aHJvdyBzeW50YXggZXJyb3Igb24gaWxsZWdhbCBp
ZGVudGlmaWVycwogICAgIGludCBsZW4gPSBwLnNpemUoKTsKICAgICBjb25zdCBVQ2hhciogYyA9
IHAuZGF0YSgpOwotICAgIGludCBpID0gMCwgcGFyYW1zID0gMDsKKyAgICBpbnQgaSA9IDA7CiAg
ICAgVVN0cmluZyBwYXJhbTsKKyAgICBWZWN0b3I8SWRlbnRpZmllcj4gcGFyYW1ldGVyczsKICAg
ICB3aGlsZSAoaSA8IGxlbikgewogICAgICAgICB3aGlsZSAoKmMgPT0gJyAnICYmIGkgPCBsZW4p
CiAgICAgICAgICAgICBjKyssIGkrKzsKQEAgLTExOSwxOSArMTE0LDIyIEBAIEpTT2JqZWN0KiBj
b25zdHJ1Y3RGdW5jdGlvbihFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIHdoaWxlIChpIDwgbGVu
ICYmICpjID09ICcgJykKICAgICAgICAgICAgICAgICBjKyssIGkrKzsKICAgICAgICAgICAgIGlm
IChpID09IGxlbikgewotICAgICAgICAgICAgICAgIGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygp
LmFwcGVuZChJZGVudGlmaWVyKGV4ZWMsIHBhcmFtKSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
Kys7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoSWRlbnRpZmllcihleGVjLCBw
YXJhbSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlmICgq
YyA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS5h
cHBlbmQoSWRlbnRpZmllcihleGVjLCBwYXJhbSkpOwotICAgICAgICAgICAgICAgIHBhcmFtcysr
OworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKElkZW50aWZpZXIoZXhlYywgcGFy
YW0pKTsKICAgICAgICAgICAgICAgICBjKyssIGkrKzsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0gLy8gZWxzZSBlcnJvcgogICAgICAgICB9CiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiU3ludGF4IGVycm9yIGluIHBhcmFtZXRl
ciBsaXN0Iik7CiAgICAgfQotICAKKyAgICBzaXplX3QgY291bnQgPSBwYXJhbWV0ZXJzLnNpemUo
KTsKKyAgICBmdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBwYXJhbWV0ZXJzLnJl
bGVhc2VCdWZmZXIoKSwgY291bnQpOworCisgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOworICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9u
TmFtZSwgZnVuY3Rpb25Cb2R5LmdldCgpLCBzY29wZUNoYWluLm5vZGUoKSk7CisKICAgICBKU09i
amVjdCogcHJvdG90eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgcHJvdG90
eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlv
biwgRG9udEVudW0pOwogICAgIGZ1bmN0aW9uLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pT
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUqIEpT
RnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3QKIEpTVmFsdWUqIEpTRnVuY3Rpb246Omxlbmd0
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
RnVuY3Rpb24qPihzbG90LnNsb3RCYXNlKCkpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLCB0
aGlzT2JqLT5tX2JvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCB0aGlzT2JqLT5tX2JvZHktPnBhcmFtZXRlckNvdW50KCkpOwogfQogCiBib29sIEpT
RnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTMxLDE1ICsxMzEs
MTUgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdAogICovCiBjb25z
dCBJZGVudGlmaWVyJiBKU0Z1bmN0aW9uOjpnZXRQYXJhbWV0ZXJOYW1lKGludCBpbmRleCkKIHsK
LSAgICBWZWN0b3I8SWRlbnRpZmllcj4mIHBhcmFtZXRlcnMgPSBtX2JvZHktPnBhcmFtZXRlcnMo
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzID0gbV9ib2R5LT5wYXJhbWV0ZXJz
KCk7CiAKLSAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gbV9ib2R5LT5wYXJh
bWV0ZXJzKCkuc2l6ZSgpKQorICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA+PSBt
X2JvZHktPnBhcmFtZXRlckNvdW50KCkpCiAgICAgICAgIHJldHVybiBtX3Njb3BlQ2hhaW4uZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
CiAgIAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUgPSBwYXJhbWV0ZXJzW2luZGV4XTsKIAog
ICAgIC8vIEFyZSB0aGVyZSBhbnkgc3Vic2VxdWVudCBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUg
bmFtZT8KLSAgICBzaXplX3Qgc2l6ZSA9IHBhcmFtZXRlcnMuc2l6ZSgpOworICAgIHNpemVfdCBz
aXplID0gbV9ib2R5LT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBpbmRl
eCArIDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gPT0gbmFt
ZSkKICAgICAgICAgICAgIHJldHVybiBtX3Njb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2Jh
bERhdGEoKS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9K
U0Z1bmN0aW9uLmgJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIGR1ZSB0byBhIGxhdGVyIHBhcmFtZXRlciB3aXRoIHRoZSBzYW1lIG5hbWUu
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGdldFBhcmFtZXRlck5hbWUoaW50IGluZGV4KTsK
IAotICAgICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fYm9keS0+cGFyYW1ldGVycygpLnNpemUoKTsKLSAgICAgICAgfQot
CiAgICAgICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbikgeyBt
X3Njb3BlQ2hhaW4gPSBzY29wZUNoYWluOyB9CiAgICAgICAgIFNjb3BlQ2hhaW4mIHNjb3BlKCkg
eyByZXR1cm4gbV9zY29wZUNoYWluOyB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMzcxNzkpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODIsMTQgKzI4MiwxNCBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4
ZWMsCiAKICAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKIAotICAgIGludCBzb3Vy
Y2VJZDsKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVyck1zZzsKIAotICAgIFJlZlB0
cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBleGVjLT5wYXJzZXIoKS0+cGFyc2U8RXZhbE5vZGU+KGV4
ZWMsIFVTdHJpbmcoKSwgMSwgVVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUocyksICZzb3Vy
Y2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOworICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNv
dXJjZShzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gZXhlYy0+cGFyc2VyKCkt
PnBhcnNlPEV2YWxOb2RlPihleGVjLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKIAogICAg
IGlmICghZXZhbE5vZGUpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnByb3Zp
ZGVyKCktPmFzSWQoKSwgTlVMTCk7CiAKICAgICByZXR1cm4gZXhlYy0+bWFjaGluZSgpLT5leGVj
dXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvUGFyc2VyLmNwcAkocmV2aXNpb24gMzcxNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjQgKzMyLDEzIEBAIGV4dGVybiBpbnQg
a2pzeXlwYXJzZSh2b2lkKik7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1QYXJzZXI6OlBhcnNlcigp
Ci0gICAgOiBtX3NvdXJjZUlkKDApCi17Ci19Ci0KLXZvaWQgUGFyc2VyOjpwYXJzZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJl
ciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gcHJwU291cmNlLAotICAgICAgICAgICAgICAg
ICAgIGludCogc291cmNlSWQsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKQordm9pZCBQ
YXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBlcnJN
c2cpCiB7CiAgICAgQVNTRVJUKCFtX3NvdXJjZUVsZW1lbnRzKTsKIAotICAgIGludCBkZWZhdWx0
U291cmNlSWQ7CiAgICAgaW50IGRlZmF1bHRFcnJMaW5lOwogICAgIFVTdHJpbmcgZGVmYXVsdEVy
ck1zZzsKIAotICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlID0gcHJwU291cmNlOwot
Ci0gICAgaWYgKCFzb3VyY2VJZCkKLSAgICAgICAgc291cmNlSWQgPSAmZGVmYXVsdFNvdXJjZUlk
OwogICAgIGlmICghZXJyTGluZSkKICAgICAgICAgZXJyTGluZSA9ICZkZWZhdWx0RXJyTGluZTsK
ICAgICBpZiAoIWVyck1zZykKQEAgLTU5LDEyICs0OCw3IEBAIHZvaWQgUGFyc2VyOjpwYXJzZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICAqZXJyTXNnID0gMDsKIAogICAgIExleGVyJiBsZXhl
ciA9ICpleGVjLT5sZXhlcigpOwotCi0gICAgaWYgKHN0YXJ0aW5nTGluZU51bWJlciA8PSAwKQot
ICAgICAgICBzdGFydGluZ0xpbmVOdW1iZXIgPSAxOwotCi0gICAgbGV4ZXIuc2V0Q29kZShzdGFy
dGluZ0xpbmVOdW1iZXIsIHNvdXJjZSk7Ci0gICAgKnNvdXJjZUlkID0gKyttX3NvdXJjZUlkOwor
ICAgIGxleGVyLnNldENvZGUoKm1fc291cmNlKTsKIAogICAgIGludCBwYXJzZUVycm9yID0ga2pz
eXlwYXJzZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICBib29sIGxleEVycm9yID0gbGV4ZXIu
c2F3RXJyb3IoKTsKQEAgLTc5LDcgKzYzLDcgQEAgdm9pZCBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0
ZSogZXhlYywgY29ucwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgICAgIGRlYnVnZ2VyLT5z
b3VyY2VQYXJzZWQoZXhlYywgKnNvdXJjZUlkLCBzb3VyY2VVUkwsICpzb3VyY2UsIHN0YXJ0aW5n
TGluZU51bWJlciwgKmVyckxpbmUsICplcnJNc2cpOworICAgICAgICBkZWJ1Z2dlci0+c291cmNl
UGFyc2VkKGV4ZWMsICptX3NvdXJjZSwgKmVyckxpbmUsICplcnJNc2cpOwogfQogCiB2b2lkIFBh
cnNlcjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMsIFBh
cnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNr
LCAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvUGFyc2VyLmgJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyNSArNDgsMTggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBQYXJzZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLSAgICAgICAgUGFzc1JlZlB0
cjxQYXJzZWROb2RlPiBwYXJzZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkws
IGludCBzdGFydGluZ0xpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNvdXJjZUlkID0g
MCwgaW50KiBlcnJMaW5lID0gMCwgVVN0cmluZyogZXJyTXNnID0gMCk7Ci0KLSAgICAgICAgVVN0
cmluZyBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfQotICAgICAgICBp
bnQgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlkOyB9CisgICAgICAgIHRlbXBs
YXRlIDxjbGFzcyBQYXJzZWROb2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCBpbnQqIGVyckxpbmUgPSAwLCBVU3Ry
aW5nKiBlcnJNc2cgPSAwKTsKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+IFBh
c3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYs
IGludCogZXJyTGluZSA9IDAsIFVTdHJpbmcqIGVyck1zZyA9IDApOwogCiAgICAgICAgIHZvaWQg
ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlclJlZkNvdW50ZWREYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
PiosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMs
IGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgICAgICBQYXJzZXIoKTsKIAotICAgICAg
ICB2b2lkIHBhcnNlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0
YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlLAotICAg
ICAgICAgICAgICAgICAgIGludCogc291cmNlSWQsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJy
TXNnKTsKKyAgICAgICAgdm9pZCBwYXJzZShFeGVjU3RhdGUqLCBpbnQqIGVyckxpbmUsIFVTdHJp
bmcqIGVyck1zZyk7CiAKLSAgICAgICAgVVN0cmluZyBtX3NvdXJjZVVSTDsKLSAgICAgICAgaW50
IG1fc291cmNlSWQ7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgICAg
ICBSZWZQdHI8U291cmNlRWxlbWVudHM+IG1fc291cmNlRWxlbWVudHM7CiAgICAgICAgIFJlZlB0
cjxQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+ID4gbV92
YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFJlZlB0cjxQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNs
YXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4gPiBtX2Z1bmNEZWNsYXJhdGlvbnM7CkBAIC03
NywzMSArNzAsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50
czsKICAgICB9OwogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci0gICAgUGFzc1Jl
ZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCogc291cmNlSWQsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKQorICAgIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjo6
cGFyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGludCogZXJy
TGluZSwgVVN0cmluZyogZXJyTXNnKQogICAgIHsKLSAgICAgICAgbV9zb3VyY2VVUkwgPSBzb3Vy
Y2VVUkw7Ci0gICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBz
b3VyY2U7Ci0gICAgICAgIHBhcnNlKGV4ZWMsIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVy
LCBzb3VyY2VQcm92aWRlci5nZXQoKSwgc291cmNlSWQsIGVyckxpbmUsIGVyck1zZyk7Ci0gICAg
ICAgIGlmICghbV9zb3VyY2VFbGVtZW50cykgewotICAgICAgICAgICAgbV9zb3VyY2VVUkwgPSBV
U3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgbV9zb3VyY2UgPSAmc291
cmNlOworICAgICAgICBwYXJzZShleGVjLCBlcnJMaW5lLCBlcnJNc2cpOworICAgICAgICBSZWZQ
dHI8UGFyc2VkTm9kZT4gcmVzdWx0OworICAgICAgICBpZiAobV9zb3VyY2VFbGVtZW50cykgewor
ICAgICAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRh
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxl
bWVudHMuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dmFyRGVjbGFyYXRpb25zID8gJm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZt
X2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbV9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdXNlc0V2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbmVlZHNDbG9zdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VzZXNBcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TG9jKG1f
c291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSk7CiAgICAgICAgIH0KLSAgICAgICAgUmVm
UHRyPFBhcnNlZE5vZGU+IG5vZGUgPSBQYXJzZWROb2RlOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERh
dGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zb3VyY2VFbGVtZW50cy5yZWxlYXNlKCkuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8gJm1f
dmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNs
YXJhdGlvbnMtPmRhdGEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VQcm92aWRlci5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VzRXZhbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9uZWVkc0Nsb3N1
cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdXNlc0FyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOworCisgICAgICAgIG1fc291cmNlID0gMDsK
KyAgICAgICAgbV9zb3VyY2VFbGVtZW50cyA9IDA7CiAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25z
ID0gMDsKICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gMDsKLSAgICAgICAgbV9zb3VyY2VV
UkwgPSBVU3RyaW5nKCk7Ci0gICAgICAgIG5vZGUtPnNldExvYyhzdGFydGluZ0xpbmVOdW1iZXIs
IG1fbGFzdExpbmUpOwotICAgICAgICByZXR1cm4gbm9kZS5yZWxlYXNlKCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9TaGVsbC5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIEpTVmFsdWUqIGZ1
bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCiAgICAgc3RvcFdhdGNoLnN0
YXJ0KCk7Ci0gICAgSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgZmlsZU5hbWUsIDEsIHNjcmlw
dC5kYXRhKCkpOworICAgIEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2Ny
aXB0LmRhdGEoKSwgZmlsZU5hbWUpKTsKICAgICBzdG9wV2F0Y2guc3RvcCgpOwogCiAgICAgcmV0
dXJuIGpzTnVtYmVyKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzdG9wV2F0Y2guZ2V0RWxh
cHNlZE1TKCkpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uTG9hZChFeGVj
U3RhdGUqIGV4ZWMsIEoKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVy
cm9yLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgSW50ZXJwcmV0ZXI6
OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwgZmlsZU5hbWUsIDEsIHNjcmlwdC5kYXRhKCkpOworICAgIEludGVycHJl
dGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpKTsK
IAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtMzE5LDggKzMxOSw3IEBAIHN0YXRp
YyBib29sIHByZXR0eVByaW50U2NyaXB0KEV4ZWNTdGF0ZSoKIHsKICAgICBpbnQgZXJyTGluZSA9
IDA7CiAgICAgVVN0cmluZyBlcnJNc2c7Ci0gICAgVVN0cmluZyBzY3JpcHRVU3RyaW5nKHNjcmlw
dC5kYXRhKCkpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5w
YXJzZXIoKS0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIGZpbGVOYW1lLCAxLCBVU3RyaW5nU291
cmNlUHJvdmlkZXI6OmNyZWF0ZShzY3JpcHRVU3RyaW5nKSwgMCwgJmVyckxpbmUsICZlcnJNc2cp
OworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5wYXJzZXIoKS0+
cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5h
bWUpLCAmZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFwcm9ncmFtTm9kZSkgewogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlcy5cbiIsIGZpbGVOYW1lLlVURjhTdHJpbmcoKS5j
X3N0cigpLCBlcnJMaW5lLCBlcnJNc2cuVVRGOFN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zNTMsNyArMzUyLDcgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlw
dHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAocHJldHR5UHJpbnQpCiAgICAgICAgICAgICBw
cmV0dHlQcmludFNjcmlwdChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZmlsZU5hbWUsIHNj
cmlwdCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9u
ID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9i
YWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgZmlsZU5hbWUsIDEsIHNjcmlwdC5kYXRhKCkp
OworICAgICAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSW50ZXJwcmV0ZXI6OmV2YWx1
YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSkpOwogICAgICAgICAg
ICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29tcGxldGlvbi5jb21wbFR5cGUoKSAhPSBUaHJvdzsK
ICAgICAgICAgICAgIGlmIChkdW1wKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgPT0gVGhyb3cpCkBAIC0zODMsNyArMzgyLDcgQEAgc3RhdGljIHZvaWQgcnVu
SW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChsaW5lWzBdKQogICAgICAgICAgICAgYWRkX2hpc3RvcnkobGluZSk7Ci0gICAgICAgIENvbXBs
ZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIGludGVycHJldGVy
TmFtZSwgMSwgbGluZSk7CisgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJl
dGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CiAg
ICAgICAgIGZyZWUobGluZSk7CiAjZWxzZQogICAgICAgICBwdXRzKGludGVyYWN0aXZlUHJvbXB0
KTsKQEAgLTM5Niw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxP
YmplY3QqCiAgICAgICAgICAgICBsaW5lLmFwcGVuZChjKTsKICAgICAgICAgfQogICAgICAgICBs
aW5lLmFwcGVuZCgnXDAnKTsKLSAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSW50ZXJw
cmV0ZXI6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3Qt
Pmdsb2JhbFNjb3BlQ2hhaW4oKSwgaW50ZXJwcmV0ZXJOYW1lLCAxLCBsaW5lLmRhdGEoKSk7Cisg
ICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCks
IG1ha2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSkpOwogI2VuZGlmCiAgICAg
ICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KQogICAgICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9Tb3Vy
Y2VQcm92aWRlci5oCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Tb3Vy
Y2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNyArMzYsMjggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNv
dXJjZVByb3ZpZGVyPiB7CiAgICAgcHVibGljOgorICAgICAgICBTb3VyY2VQcm92aWRlcihjb25z
dCBVU3RyaW5nJiB1cmwpCisgICAgICAgICAgICA6IG1fdXJsKHVybCkKKyAgICAgICAgeworICAg
ICAgICB9CiAgICAgICAgIHZpcnR1YWwgflNvdXJjZVByb3ZpZGVyKCkgeyB9CisKICAgICAgICAg
dmlydHVhbCBVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgPSAwOwog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgPSAwOwogICAgICAgICB2
aXJ0dWFsIGludCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAgIAorICAgICAgICBjb25zdCBV
U3RyaW5nJiB1cmwoKSB7IHJldHVybiBtX3VybDsgfQorICAgICAgICBpbnRwdHJfdCBhc0lkKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFVTdHJpbmcgbV91cmw7CiAgICAgfTsKIAogICAgIGNsYXNzIFVTdHJpbmdT
b3VyY2VQcm92aWRlciA6IHB1YmxpYyBTb3VyY2VQcm92aWRlciB7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVU3RyaW5nU291cmNlUHJvdmlkZXI+IGNyZWF0ZShjb25z
dCBVU3RyaW5nJiBzb3VyY2UpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdTb3Vy
Y2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3QgVVN0cmluZyYg
dXJsKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVTdHJpbmdT
b3VyY2VQcm92aWRlcihzb3VyY2UpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VVN0cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwgdXJsKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2Uuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KQEAgLTU0LDE0ICs2NSwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLnNpemUoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVVN0cmluZ1NvdXJjZVByb3Zp
ZGVyKGNvbnN0IFVTdHJpbmcmIHNvdXJjZSkKLSAgICAgICAgICAgIDogbV9zb3VyY2Uoc291cmNl
KQorICAgICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgc291cmNlLCBj
b25zdCBVU3RyaW5nJiB1cmwpCisgICAgICAgICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCkKKyAg
ICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAg
ICAgICBVU3RyaW5nIG1fc291cmNlOwogICAgIH07Ci0KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gU291cmNlUHJvdmlkZXJfaApJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L1NvdXJjZVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1NvdXJjZVJh
bmdlLmgJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1NvdXJjZVJhbmdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQyICsyNiw2NiBAQAogICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIFNvdXJjZVJhbmdlX2gKLSNkZWZpbmUgU291cmNlUmFuZ2VfaAorI2lmbmRlZiBT
b3VyY2VDb2RlX2gKKyNkZWZpbmUgU291cmNlQ29kZV9oCisKKy8vIEZJWE1FOiBSZW5hbWUgdGhp
cyBmaWxlIHRvICJTb3VyY2VDb2RlLmgiCiAKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBT
b3VyY2VSYW5nZSB7CisgICAgY2xhc3MgU291cmNlQ29kZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBTb3VyY2VSYW5nZShQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBwcm92aWRlciwgaW50IHN0
YXJ0LCBpbnQgZW5kKQotICAgICAgICAgICAgOiBtX3NvdXJjZVByb3ZpZGVyKHByb3ZpZGVyKQot
ICAgICAgICAgICAgLCBtX3N0YXJ0Q2hhcihzdGFydCkKLSAgICAgICAgICAgICwgbV9lbmRDaGFy
KGVuZCkKKyAgICAgICAgU291cmNlQ29kZSgpCisgICAgICAgICAgICA6IG1fc3RhcnRDaGFyKDAp
CisgICAgICAgICAgICAsIG1fZW5kQ2hhcigwKQorICAgICAgICAgICAgLCBtX2ZpcnN0TGluZSgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTb3VyY2VDb2RlKFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHByb3ZpZGVyLCBpbnQgZmlyc3RMaW5lID0gMSkKKyAgICAgICAgICAg
IDogbV9wcm92aWRlcihwcm92aWRlcikKKyAgICAgICAgICAgICwgbV9zdGFydENoYXIoMCkKKyAg
ICAgICAgICAgICwgbV9lbmRDaGFyKG1fcHJvdmlkZXItPmxlbmd0aCgpKQorICAgICAgICAgICAg
LCBtX2ZpcnN0TGluZShzdGQ6Om1heChmaXJzdExpbmUsIDEpKQogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICBTb3VyY2VSYW5nZSgpCisgICAgICAgIFNvdXJjZUNvZGUoUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gcHJvdmlkZXIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZpcnN0
TGluZSkKKyAgICAgICAgICAgIDogbV9wcm92aWRlcihwcm92aWRlcikKKyAgICAgICAgICAgICwg
bV9zdGFydENoYXIoc3RhcnQpCisgICAgICAgICAgICAsIG1fZW5kQ2hhcihlbmQpCisgICAgICAg
ICAgICAsIG1fZmlyc3RMaW5lKHN0ZDo6bWF4KGZpcnN0TGluZSwgMSkpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIFVTdHJpbmcgdG9TdHJpbmcoKSBjb25zdAogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIW1fc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICBpZiAoIW1fcHJv
dmlkZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKLSAgICAgICAgICAgIHJl
dHVybiBtX3NvdXJjZVByb3ZpZGVyLT5nZXRSYW5nZShtX3N0YXJ0Q2hhciwgbV9lbmRDaGFyKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZpZGVyLT5nZXRSYW5nZShtX3N0YXJ0Q2hhciwgbV9l
bmRDaGFyKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU291cmNlUHJvdmlkZXIqIHNv
dXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VQcm92aWRlci5nZXQoKTsgfQor
ICAgICAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3Zp
ZGVyLmdldCgpOyB9CisgICAgICAgIGludCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2Zp
cnN0TGluZTsgfQogICAgICAgICBpbnQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0Q2hhcjsgfQorICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CisgICAgICAgIGludCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hhcjsgfQorCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZVByb3ZpZGVyOworICAgICAg
ICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fcHJvdmlkZXI7CiAgICAgICAgIGludCBtX3N0YXJ0
Q2hhcjsKICAgICAgICAgaW50IG1fZW5kQ2hhcjsKKyAgICAgICAgaW50IG1fZmlyc3RMaW5lOwog
ICAgIH07CiAKKyAgICBpbmxpbmUgU291cmNlQ29kZSBtYWtlU291cmNlKGNvbnN0IFVTdHJpbmcm
IHNvdXJjZSwgY29uc3QgVVN0cmluZyYgdXJsID0gVVN0cmluZygpLCBpbnQgZmlyc3RMaW5lID0g
MSkKKyAgICB7CisgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKFVTdHJpbmdTb3VyY2VQcm92aWRl
cjo6Y3JlYXRlKHNvdXJjZSwgdXJsKSwgZmlyc3RMaW5lKTsKKyAgICB9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCi0jZW5kaWYgLy8gU291cmNlUmFuZ2VfaAorI2VuZGlmIC8vIFNvdXJjZUNvZGVf
aApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmgJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CiAgICAgY2xhc3MgRXhl
Y1N0YXRlOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNzIFNvdXJjZVByb3Zp
ZGVyOworICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgVVN0cmluZzsKIAogICAgIGNs
YXNzIERlYnVnZ2VyIHsKQEAgLTQwLDE2ICs0MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBhdHRhY2goSlNHbG9iYWxPYmplY3QqKTsKICAgICAgICAgdm9pZCBkZXRhY2goSlNH
bG9iYWxPYmplY3QqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEV4ZWNT
dGF0ZSosIGludCBzb3VyY2VJZCwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiwgaW50IHN0YXJ0
aW5nTGluZU51bWJlciwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNc2cpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubykgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNlSWQsIGludCBs
aW5lbm8pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubykgPSAwOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNl
SWQsIGludCBsaW5lbm8pID0gMDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQ
cm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNvdXJjZUlkLCBpbnQgbGluZW5v
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubykgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwg
aW50IHNvdXJjZUlkLCBpbnQgbGluZW5vKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VQYXJzZWQoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGludCBlcnJvckxpbmUsIGNv
bnN0IFVTdHJpbmcmIGVycm9yTXNnKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlcHRp
b24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJZCwgaW50IGxpbmVu
bykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJD
YWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJZCwgaW50IGxpbmVubykgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qg
c291cmNlSWQsIGludCBsaW5lbm8pID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJldHVybkV2
ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSWQsIGludCBsaW5l
bm8pID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSWQsIGludCBsaW5lbm8pID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2Fs
bEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSWQsIGludCBsaW5lbm8pID0gMDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGlu
dHB0cl90IHNvdXJjZUlkLCBpbnQgbGluZW5vKSA9IDA7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3RzOwpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
Z3JhbW1hci55CShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFy
LnkJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IHN0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZUFzc2lnbk5vZGUodm9pZCosIEV4cHJlc3Npb25O
b2RlKiBsb2MsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogZXhwciwgYm9vbCBsb2NIYXNBc3Np
Z25tZW50cywgYm9vbCBleHBySGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBp
bnQgZW5kKTsKIHN0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZVByZWZpeE5vZGUodm9pZCosIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBl
bmQpOwogc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlUG9zdGZpeE5vZGUodm9pZCosIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQp
Owotc3RhdGljIFByb3BlcnR5Tm9kZSogbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKHZv
aWQqLCBjb25zdCBJZGVudGlmaWVyICZnZXRPclNldCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
UGFyYW1ldGVyTm9kZSosIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VSYW5nZSYpOwor
c3RhdGljIFByb3BlcnR5Tm9kZSogbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKHZvaWQq
LCBjb25zdCBJZGVudGlmaWVyICZnZXRPclNldCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgUGFy
YW1ldGVyTm9kZSosIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiBzdGF0
aWMgRXhwcmVzc2lvbk5vZGVJbmZvIG1ha2VGdW5jdGlvbkNhbGxOb2RlKHZvaWQqLCBFeHByZXNz
aW9uTm9kZUluZm8gZnVuYywgQXJndW1lbnRzTm9kZUluZm8sIGludCBzdGFydCwgaW50IGRpdm90
LCBpbnQgZW5kKTsKIHN0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZVR5cGVPZk5vZGUodm9pZCos
IEV4cHJlc3Npb25Ob2RlKik7CiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VEZWxldGVOb2Rl
KHZvaWQqLCBFeHByZXNzaW9uTm9kZSosIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKTsK
QEAgLTMxMiw5ICszMTIsOSBAQCBQcm9wZXJ0eToKICAgICBJREVOVCAnOicgQXNzaWdubWVudEV4
cHIgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+
KG5ldyBQcm9wZXJ0eU5vZGUoR0xPQkFMX0RBVEEsICokMSwgJDMubV9ub2RlLCBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50KSwgJDMubV9mZWF0dXJlSW5mbywgJDMubV9udW1Db25zdGFudHMpOyB9CiAg
IHwgU1RSSU5HICc6JyBBc3NpZ25tZW50RXhwciAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVG
ZWF0dXJlSW5mbzxQcm9wZXJ0eU5vZGUqPihuZXcgUHJvcGVydHlOb2RlKEdMT0JBTF9EQVRBLCAq
JDEsICQzLm1fbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCksICQzLm1fZmVhdHVyZUluZm8s
ICQzLm1fbnVtQ29uc3RhbnRzKTsgfQogICB8IE5VTUJFUiAnOicgQXNzaWdubWVudEV4cHIgICAg
ICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4obmV3IFBy
b3BlcnR5Tm9kZShHTE9CQUxfREFUQSwgSWRlbnRpZmllcihHTE9CQUxfREFUQSwgVVN0cmluZzo6
ZnJvbSgkMSkpLCAkMy5tX25vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpLCAkMy5tX2ZlYXR1
cmVJbmZvLCAkMy5tX251bUNvbnN0YW50cyk7IH0KLSAgfCBJREVOVCBJREVOVCAnKCcgJyknIE9Q
RU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1
cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShnbG9i
YWxQdHIsICokMSwgKiQyLCAwLCAkNiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNykpLCBDbG9z
dXJlRmVhdHVyZSwgMCk7IERCRygkNiwgQDUsIEA3KTsgaWYgKCEkJC5tX25vZGUpIFlZQUJPUlQ7
IH0KKyAgfCBJREVOVCBJREVOVCAnKCcgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VC
UkFDRSAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG1ha2VH
ZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShnbG9iYWxQdHIsICokMSwgKiQyLCAwLCAkNiwgTEVY
RVItPnNvdXJjZUNvZGUoJDUsICQ3LCBANS5maXJzdF9saW5lKSksIENsb3N1cmVGZWF0dXJlLCAw
KTsgREJHKCQ2LCBANSwgQDcpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQogICB8IElERU5U
IElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5
IENMT1NFQlJBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQk
ID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG1ha2VHZXR0ZXJPclNldHRl
clByb3BlcnR5Tm9kZShnbG9iYWxQdHIsICokMSwgKiQyLCAkNC5tX25vZGUuaGVhZCwgJDcsIExF
WEVSLT5zb3VyY2VSYW5nZSgkNiwgJDgpKSwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0
dXJlLCAwKTsgJDctPnNldFVzZXNBcmd1bWVudHMoJDctPnVzZXNBcmd1bWVudHMoKSB8ICgoJDQu
bV9mZWF0dXJlSW5mbyAmIEFyZ3VtZW50c0ZlYXR1cmUpICE9IDApKTsgREJHKCQ3LCBANiwgQDgp
OyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4o
bWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGdsb2JhbFB0ciwgKiQxLCAqJDIsICQ0Lm1f
bm9kZS5oZWFkLCAkNywgTEVYRVItPnNvdXJjZUNvZGUoJDYsICQ4LCBANi5maXJzdF9saW5lKSks
ICQ0Lm1fZmVhdHVyZUluZm8gfCBDbG9zdXJlRmVhdHVyZSwgMCk7ICQ3LT5zZXRVc2VzQXJndW1l
bnRzKCQ3LT51c2VzQXJndW1lbnRzKCkgfCAoKCQ0Lm1fZmVhdHVyZUluZm8gJiBBcmd1bWVudHNG
ZWF0dXJlKSAhPSAwKSk7IERCRygkNywgQDYsIEA4KTsgaWYgKCEkJC5tX25vZGUpIFlZQUJPUlQ7
IH0KIDsKIAogUHJvcGVydHlMaXN0OgpAQCAtMTE1NywxNiArMTE1NywxNiBAQCBEZWJ1Z2dlclN0
YXRlbWVudDoKIDsKIAogRnVuY3Rpb25EZWNsYXJhdGlvbjoKLSAgICBGVU5DVElPTiBJREVOVCAn
KCcgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9k
ZUZlYXR1cmVJbmZvKG5ldyBGdW5jRGVjbE5vZGUoR0xPQkFMX0RBVEEsICokMiwgJDYsIExFWEVS
LT5zb3VyY2VSYW5nZSgkNSwgJDcpKSwgKCgqJDIgPT0gR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCBDbG9zdXJlRmVhdHVyZSwg
MCk7IERCRygkNiwgQDUsIEA3KTsgfQorICAgIEZVTkNUSU9OIElERU5UICcoJyAnKScgT1BFTkJS
QUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8o
bmV3IEZ1bmNEZWNsTm9kZShHTE9CQUxfREFUQSwgKiQyLCAkNiwgTEVYRVItPnNvdXJjZUNvZGUo
JDUsICQ3LCBANS5maXJzdF9saW5lKSksICgoKiQyID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDApIHwgQ2xvc3VyZUZlYXR1cmUs
IDApOyBEQkcoJDYsIEA1LCBANyk7IH0KICAgfCBGVU5DVElPTiBJREVOVCAnKCcgRm9ybWFsUGFy
YW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFCi0gICAgICB7
ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRGVjbE5vZGUoR0xPQkFMX0RBVEEs
ICokMiwgJDcsIExFWEVSLT5zb3VyY2VSYW5nZSgkNiwgJDgpLCAkNC5tX25vZGUuaGVhZCksICgo
KiQyID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpID8gQXJndW1lbnRz
RmVhdHVyZSA6IDApIHwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgJDct
PnNldFVzZXNBcmd1bWVudHMoJDctPnVzZXNBcmd1bWVudHMoKSB8ICgoJDQubV9mZWF0dXJlSW5m
byAmIEFyZ3VtZW50c0ZlYXR1cmUpICE9IDApKTsgREJHKCQ3LCBANiwgQDgpOyB9CisgICAgICB7
ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRGVjbE5vZGUoR0xPQkFMX0RBVEEs
ICokMiwgJDcsIExFWEVSLT5zb3VyY2VDb2RlKCQ2LCAkOCwgQDYuZmlyc3RfbGluZSksICQ0Lm1f
bm9kZS5oZWFkKSwgKCgqJDIgPT0gR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50
cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZl
YXR1cmUsIDApOyAkNy0+c2V0VXNlc0FyZ3VtZW50cygkNy0+dXNlc0FyZ3VtZW50cygpIHwgKCgk
NC5tX2ZlYXR1cmVJbmZvICYgQXJndW1lbnRzRmVhdHVyZSkgIT0gMCkpOyBEQkcoJDcsIEA2LCBA
OCk7IH0KIDsKIAogRnVuY3Rpb25FeHByOgotICAgIEZVTkNUSU9OICcoJyAnKScgT1BFTkJSQUNF
IEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3
IEZ1bmNFeHByTm9kZShHTE9CQUxfREFUQSwgR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPm51
bGxJZGVudGlmaWVyLCAkNSwgTEVYRVItPnNvdXJjZVJhbmdlKCQ0LCAkNikpLCBDbG9zdXJlRmVh
dHVyZSwgMCk7IERCRygkNSwgQDQsIEA2KTsgfQotICAgIHwgRlVOQ1RJT04gJygnIEZvcm1hbFBh
cmFtZXRlckxpc3QgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0g
Y3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xPQkFMX0RBVEEsIEdMT0JB
TF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgJDYsIExFWEVSLT5zb3VyY2VS
YW5nZSgkNSwgJDcpLCAkMy5tX25vZGUuaGVhZCksICQzLm1fZmVhdHVyZUluZm8gfCBDbG9zdXJl
RmVhdHVyZSwgMCk7ICQ2LT5zZXRVc2VzQXJndW1lbnRzKCQ2LT51c2VzQXJndW1lbnRzKCkgfCAo
KCQzLm1fZmVhdHVyZUluZm8gJiBBcmd1bWVudHNGZWF0dXJlKSAhPSAwKSk7IERCRygkNiwgQDUs
IEA3KTsgfQotICB8IEZVTkNUSU9OIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9k
eSBDTE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9k
ZShHTE9CQUxfREFUQSwgKiQyLCAkNiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNykpLCBDbG9z
dXJlRmVhdHVyZSwgMCk7IERCRygkNiwgQDUsIEA3KTsgfQotICB8IEZVTkNUSU9OIElERU5UICco
JyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJB
Q0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9E
QVRBLCAqJDIsICQ3LCBMRVhFUi0+c291cmNlUmFuZ2UoJDYsICQ4KSwgJDQubV9ub2RlLmhlYWQp
LCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyAkNy0+c2V0VXNlc0FyZ3Vt
ZW50cygkNy0+dXNlc0FyZ3VtZW50cygpIHwgKCgkNC5tX2ZlYXR1cmVJbmZvICYgQXJndW1lbnRz
RmVhdHVyZSkgIT0gMCkpOyBEQkcoJDcsIEA2LCBAOCk7IH0KKyAgICBGVU5DVElPTiAnKCcgJykn
IE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1
cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xPQkFMX0RBVEEsIEdMT0JBTF9EQVRBLT5wcm9wZXJ0
eU5hbWVzLT5udWxsSWRlbnRpZmllciwgJDUsIExFWEVSLT5zb3VyY2VDb2RlKCQ0LCAkNiwgQDQu
Zmlyc3RfbGluZSkpLCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygkNSwgQDQsIEA2KTsgfQorICAg
IHwgRlVOQ1RJT04gJygnIEZvcm1hbFBhcmFtZXRlckxpc3QgJyknIE9QRU5CUkFDRSBGdW5jdGlv
bkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRXhw
ck5vZGUoR0xPQkFMX0RBVEEsIEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRp
ZmllciwgJDYsIExFWEVSLT5zb3VyY2VDb2RlKCQ1LCAkNywgQDUuZmlyc3RfbGluZSksICQzLm1f
bm9kZS5oZWFkKSwgJDMubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgJDYtPnNl
dFVzZXNBcmd1bWVudHMoJDYtPnVzZXNBcmd1bWVudHMoKSB8ICgoJDMubV9mZWF0dXJlSW5mbyAm
IEFyZ3VtZW50c0ZlYXR1cmUpICE9IDApKTsgREJHKCQ2LCBANSwgQDcpOyB9CisgIHwgRlVOQ1RJ
T04gSURFTlQgJygnICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9
IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCAqJDIs
ICQ2LCBMRVhFUi0+c291cmNlQ29kZSgkNSwgJDcsIEA1LmZpcnN0X2xpbmUpKSwgQ2xvc3VyZUZl
YXR1cmUsIDApOyBEQkcoJDYsIEA1LCBANyk7IH0KKyAgfCBGVU5DVElPTiBJREVOVCAnKCcgRm9y
bWFsUGFyYW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsg
JCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShHTE9CQUxfREFUQSwg
KiQyLCAkNywgTEVYRVItPnNvdXJjZUNvZGUoJDYsICQ4LCBANi5maXJzdF9saW5lKSwgJDQubV9u
b2RlLmhlYWQpLCAkNC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyAkNy0+c2V0
VXNlc0FyZ3VtZW50cygkNy0+dXNlc0FyZ3VtZW50cygpIHwgKCgkNC5tX2ZlYXR1cmVJbmZvICYg
QXJndW1lbnRzRmVhdHVyZSkgIT0gMCkpOyBEQkcoJDcsIEA2LCBAOCk7IH0KIDsKIAogRm9ybWFs
UGFyYW1ldGVyTGlzdDoKQEAgLTEzNTgsNyArMTM1OCw3IEBAIHN0YXRpYyBFeHByZXNzaW9uTm9k
ZSogbWFrZURlbGV0ZU5vZGUodm8KICAgICByZXR1cm4gbmV3IERlbGV0ZURvdE5vZGUoR0xPQkFM
X0RBVEEsIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKIH0KIAotc3RhdGljIFByb3BlcnR5Tm9kZSogbWFrZUdldHRlck9y
U2V0dGVyUHJvcGVydHlOb2RlKHZvaWQqIGdsb2JhbFB0ciwgY29uc3QgSWRlbnRpZmllciYgZ2V0
T3JTZXQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVu
Y3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlUmFuZ2UmIHNvdXJjZSkKK3N0YXRpYyBQ
cm9wZXJ0eU5vZGUqIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZSh2b2lkKiBnbG9iYWxQ
dHIsIGNvbnN0IElkZW50aWZpZXImIGdldE9yU2V0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBQ
YXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKIHsKICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZTsKICAgICBpZiAo
Z2V0T3JTZXQgPT0gImdldCIpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAJKHJl
dmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNDMgKzM5LDI5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Db21w
bGV0aW9uIEludGVycHJldGVyOjpjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVT
dHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVVN0cmluZyYg
Y29kZSkKLXsKLSAgICByZXR1cm4gY2hlY2tTeW50YXgoZXhlYywgc291cmNlVVJMLCBzdGFydGlu
Z0xpbmVOdW1iZXIsIFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGNvZGUpKTsKLX0KLQot
Q29tcGxldGlvbiBJbnRlcnByZXRlcjo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZSkKK0NvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmNoZWNrU3lu
dGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogewogICAgIEpT
TG9jayBsb2NrKGV4ZWMpOwogCiAgICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7
CiAKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gZXhlYy0+cGFyc2VyKCktPnBh
cnNlPFByb2dyYW1Ob2RlPihleGVjLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciwgc291
cmNlLCAwLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9n
Tm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxQcm9ncmFtTm9kZT4oZXhlYywgc291cmNlLCAm
ZXJyTGluZSwgJmVyck1zZyk7CiAgICAgaWYgKCFwcm9nTm9kZSkKLSAgICAgICAgcmV0dXJuIENv
bXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywg
ZXJyTGluZSwgMCwgc291cmNlVVJMKSk7CisgICAgICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93
LCBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJj
ZS5wcm92aWRlcigpLT5hc0lkKCksIHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkpOwogICAgIHJl
dHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CiB9CiAKLUNvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nJiBj
b2RlLCBKU1ZhbHVlKiB0aGlzVikKLXsKLSAgICByZXR1cm4gZXZhbHVhdGUoZXhlYywgc2NvcGVD
aGFpbiwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIsIFVTdHJpbmdTb3VyY2VQcm92aWRl
cjo6Y3JlYXRlKGNvZGUpLCB0aGlzVik7Ci19Ci0KLUNvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2UsIEpTVmFsdWUqIHRoaXNWYWx1ZSkKK0NvbXBsZXRpb24gSW50ZXJw
cmV0ZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlKiB0aGlzVmFsdWUpCiB7CiAgICAgSlNM
b2NrIGxvY2soZXhlYyk7CiAgICAgCi0gICAgLy8gcGFyc2UgdGhlIHNvdXJjZSBjb2RlCi0gICAg
aW50IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOworICAg
IFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5wYXJzZXIoKS0+cGFyc2U8
UHJvZ3JhbU5vZGU+KGV4ZWMsIHNvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwogCi0gICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IGV4ZWMtPnBhcnNlcigpLT5wYXJzZTxQcm9n
cmFtTm9kZT4oZXhlYywgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZSwgJnNv
dXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0KLSAgICAvLyBubyBwcm9ncmFtIG5vZGUgbWVh
bnMgYSBzeW50YXggZXJyb3Igb2NjdXJyZWQKICAgICBpZiAoIXByb2dyYW1Ob2RlKQotICAgICAg
ICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJv
ciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgc291cmNlVVJMKSk7CisgICAgICAgIHJldHVy
biBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJN
c2csIGVyckxpbmUsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lkKCksIHNvdXJjZS5wcm92aWRlcigp
LT51cmwoKSkpOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSAoIXRoaXNWYWx1ZSB8fCB0aGlz
VmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpID8gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
IDogdGhpc1ZhbHVlLT50b09iamVjdChleGVjKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJl
dGVyLmgJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgIGNs
YXNzIEV4ZWNTdGF0ZTsKICAgY2xhc3MgSlNWYWx1ZTsKICAgY2xhc3MgU2NvcGVDaGFpbjsKLSAg
Y2xhc3MgU291cmNlUHJvdmlkZXI7CisgIGNsYXNzIFNvdXJjZUNvZGU7CiAgIGNsYXNzIFVTdHJp
bmc7CiAgIAogICBjbGFzcyBJbnRlcnByZXRlciB7CkBAIC00NCw4ICs0NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAqIEByZXR1cm4gQSBub3JtYWwgY29tcGxldGlvbiBpZiB0aGVyZSB3ZXJl
IG5vIHN5bnRheCBlcnJvcnMgaW4gdGhlIGNvZGUsIAogICAgICAqIG90aGVyd2lzZSBhIHRocm93
IGNvbXBsZXRpb24gd2l0aCB0aGUgc3ludGF4IGVycm9yIGFzIGl0cyB2YWx1ZS4KICAgICAgKi8K
LSAgICBzdGF0aWMgQ29tcGxldGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBVU3Ry
aW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIGNv
ZGUpOwotICAgIHN0YXRpYyBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlKTsKKyAgICBzdGF0aWMgQ29tcGxldGlvbiBjaGVja1N5bnRh
eChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKICAgICAvKioKICAgICAgKiBFdmFs
dWF0ZXMgdGhlIHN1cHBsaWVkIEVDTUFTY3JpcHQgY29kZS4KQEAgLTYyLDggKzYxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICogZXhlY3V0aW9uLiBUaGlzIHNob3VsZCBlaXRoZXIgYmUganNO
dWxsKCkgb3IgYW4gT2JqZWN0LgogICAgICAqIEByZXR1cm4gQSBjb21wbGV0aW9uIG9iamVjdCBy
ZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgZXhlY3V0aW9uLgogICAgICAqLwotICAgIHN0
YXRpYyBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW4mLCBjb25zdCBV
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcm
IGNvZGUsIEpTVmFsdWUqIHRoaXNWID0gMCk7Ci0gICAgc3RhdGljIENvbXBsZXRpb24gZXZhbHVh
dGUoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbiYsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50
IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIEpTVmFsdWUq
IHRoaXNWID0gMCk7CisgICAgc3RhdGljIENvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbiYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiB0aGlzViA9IDApOwogICAg
IAogICAgIHN0YXRpYyBib29sIHNob3VsZFByaW50RXhjZXB0aW9ucygpOwogICAgIHN0YXRpYyB2
b2lkIHNldFNob3VsZFByaW50RXhjZXB0aW9ucyhib29sKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9sZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmNw
cAkocmV2aXNpb24gMzcxNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBAIExleGVyOjp+TGV4ZXIoKQogICAgIG1fbWFpblRh
YmxlLmRlbGV0ZVRhYmxlKCk7CiB9CiAKLXZvaWQgTGV4ZXI6OnNldENvZGUoaW50IHN0YXJ0aW5n
TGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlKQordm9pZCBMZXhl
cjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiB7Ci0gICAgeXlsaW5lbm8gPSBz
dGFydGluZ0xpbmVOdW1iZXI7CisgICAgeXlsaW5lbm8gPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAg
ICAgbV9yZXN0cktleXdvcmQgPSBmYWxzZTsKICAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwogICAg
IG1fZWF0TmV4dElkZW50aWZpZXIgPSBmYWxzZTsKQEAgLTEwMiw5ICsxMDIsOSBAQCB2b2lkIExl
eGVyOjpzZXRDb2RlKGludCBzdGFydGluZ0xpbmVOdW1iCiAgICAgbV9sYXN0VG9rZW4gPSAtMTsK
IAogICAgIG1fcG9zaXRpb24gPSAwOwotICAgIG1fc291cmNlID0gc291cmNlOwotICAgIG1fY29k
ZSA9IG1fc291cmNlLT5kYXRhKCk7Ci0gICAgbV9sZW5ndGggPSBtX3NvdXJjZS0+bGVuZ3RoKCk7
CisgICAgbV9zb3VyY2UgPSAmc291cmNlOworICAgIG1fY29kZSA9IHNvdXJjZS5kYXRhKCk7Cisg
ICAgbV9sZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7CiAgICAgbV9za2lwTEYgPSBmYWxzZTsKICAg
ICBtX3NraXBDUiA9IGZhbHNlOwogICAgIG1fZXJyb3IgPSBmYWxzZTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9sZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhl
ci5oCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
TGV4ZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICB2b2lkIHNldENvZGUo
aW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
KTsKKyAgICAgICAgdm9pZCBzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmKTsKICAgICAgICAgaW50
IGxleCh2b2lkKiBsdmFscCwgdm9pZCogbGxvY3ApOwogCiAgICAgICAgIGludCBsaW5lTm8oKSBj
b25zdCB7IHJldHVybiB5eWxpbmVubzsgfQpAQCAtODgsNyArODgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KIAog
ICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIFNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlKGlu
dCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlKSB7IHJldHVybiBTb3VyY2VSYW5nZShtX3NvdXJj
ZSwgb3BlbkJyYWNlICsgMSwgY2xvc2VCcmFjZSk7IH0KKyAgICAgICAgU291cmNlQ29kZSBzb3Vy
Y2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKSB7IHJl
dHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5wcm92aWRlcigpLCBvcGVuQnJhY2UgKyAxLCBjbG9z
ZUJyYWNlLCBmaXJzdExpbmUpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgSlNHbG9iYWxEYXRhOwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgICAgIHVuc2lnbmVkIGludCBtX3Bvc2l0aW9uOwot
ICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlOworICAgICAgICBjb25zdCBT
b3VyY2VDb2RlKiBtX3NvdXJjZTsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY29kZTsKICAgICAg
ICAgdW5zaWduZWQgaW50IG1fbGVuZ3RoOwogICAgICAgICBpbnQgbV9hdExpbmVTdGFydDsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzcxNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDEwICsxNjk4LDkgQEAgUmVnaXN0
ZXJJRCogVHJ5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gU2NvcGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50
cywgaW50IG51bUNvbnN0YW50cykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBib29s
IHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVt
Q29uc3RhbnRzKQogICAgIDogQmxvY2tOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuKQotICAgICwg
bV9zb3VyY2VVUkwoZ2xvYmFsRGF0YS0+cGFyc2VyLT5zb3VyY2VVUkwoKSkKLSAgICAsIG1fc291
cmNlSWQoZ2xvYmFsRGF0YS0+cGFyc2VyLT5zb3VyY2VJZCgpKQorICAgICwgbV9zb3VyY2Uoc291
cmNlKQogICAgICwgbV91c2VzRXZhbCh1c2VzRXZhbCkKICAgICAsIG1fbmVlZHNDbG9zdXJlKG5l
ZWRzQ2xvc3VyZSkKICAgICAsIG1fdXNlc0FyZ3VtZW50cyh1c2VzQXJndW1lbnRzKQpAQCAtMTcx
NywyMiArMTcxNiwyMCBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Qcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBTb3VyY2VQcm92aWRlciogc291cmNl
UHJvdmlkZXIsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1
bWVudHMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNB
cmd1bWVudHMsIG51bUNvbnN0YW50cykKLSAgICAsIG1fc291cmNlUHJvdmlkZXIoc291cmNlUHJv
dmlkZXIpCitQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25T
dGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgdXNlc0V2YWws
IGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMp
CisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ss
IGZ1bmNTdGFjaywgdXNlc0V2YWwsIG5lZWRzQ2xvc3VyZSwgdXNlc0FyZ3VtZW50cywgbnVtQ29u
c3RhbnRzKQogewogfQogCi1Qcm9ncmFtTm9kZSogUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQ
cm92aWRlciwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3Vt
ZW50cywgaW50IG51bUNvbnN0YW50cykKK1Byb2dyYW1Ob2RlKiBQcm9ncmFtTm9kZTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJT
dGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJn
dW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIHJldHVybiBuZXcgUHJvZ3JhbU5vZGUo
Z2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZVByb3ZpZGVy
LCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBudW1Db25zdGFudHMpOwor
ICAgIHJldHVybiBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNr
LCBmdW5jU3RhY2ssIHNvdXJjZSwgdXNlc0V2YWwsIG5lZWRzQ2xvc3VyZSwgdXNlc0FyZ3VtZW50
cywgbnVtQ29uc3RhbnRzKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEV2YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUV2YWxOb2RlOjpFdmFs
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIFNvdXJjZVByb3Zp
ZGVyKiBzb3VyY2VQcm92aWRlciwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJv
b2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9i
YWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgdXNlc0V2YWwsIG5lZWRzQ2xv
c3VyZSwgdXNlc0FyZ3VtZW50cywgbnVtQ29uc3RhbnRzKQotICAgICwgbV9zb3VyY2VQcm92aWRl
cihzb3VyY2VQcm92aWRlcikKK0V2YWxOb2RlOjpFdmFsTm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCB1c2Vz
RXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0
YW50cykKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBu
dW1Db25zdGFudHMpCiB7CiB9CiAKQEAgLTE3NTUsMjYgKzE3NTIsNDggQEAgdm9pZCBFdmFsTm9k
ZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5ObwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCiAgICAgU3ltYm9sVGFibGUgc3lt
Ym9sVGFibGU7Ci0gICAgQVNTRVJUKG1fc291cmNlUHJvdmlkZXIpOwotICAgIG1fY29kZS5zZXQo
bmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBtX3NvdXJjZVByb3ZpZGVyKSk7
CisgICAgbV9jb2RlLnNldChuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNv
dXJjZSgpLnByb3ZpZGVyKCkpKTsKIAogICAgIENvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRoaXMs
IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJnN5bWJvbFRhYmxlLCBtX2Nv
ZGUuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOwogfQogCi1FdmFsTm9kZSogRXZh
bE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIFNv
dXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Ns
b3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykKK0V2YWxOb2RlKiBF
dmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIHJldHVybiBu
ZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHNv
dXJjZVByb3ZpZGVyLCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBudW1D
b25zdGFudHMpOworICAgIHJldHVybiBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZSwgdXNlc0V2YWwsIG5lZWRzQ2xvc3VyZSwgdXNl
c0FyZ3VtZW50cywgbnVtQ29uc3RhbnRzKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBi
b29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xv
YmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Ns
b3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cykKKyAgICA6IFNjb3BlTm9kZShnbG9i
YWxEYXRhLCBTb3VyY2VDb2RlKCksIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCB1c2Vz
RXZhbCwgbmVlZHNDbG9zdXJlLCB1c2VzQXJndW1lbnRzLCBudW1Db25zdGFudHMpCisgICAgLCBt
X3BhcmFtZXRlcnMoMCkKICAgICAsIG1fcmVmQ291bnQoMCkKIHsKIH0KIAorRnVuY3Rpb25Cb2R5
Tm9kZTo6fkZ1bmN0aW9uQm9keU5vZGUoKQoreworICAgIGlmIChtX3BhcmFtZXRlcnMpCisgICAg
ICAgIGZhc3RGcmVlKG1fcGFyYW1ldGVycyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZp
cnN0UGFyYW1ldGVyKQoreworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBwYXJhbWV0ZXJzOworICAg
IGZvciAoUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVyID0gZmlyc3RQYXJhbWV0ZXI7IHBhcmFtZXRl
cjsgcGFyYW1ldGVyID0gcGFyYW1ldGVyLT5uZXh0UGFyYW0oKSkKKyAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQocGFyYW1ldGVyLT5pZGVudCgpKTsKKyAgICBzaXplX3QgY291bnQgPSBwYXJhbWV0
ZXJzLnNpemUoKTsKKyAgICBmaW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVycy5yZWxlYXNl
QnVmZmVyKCksIGNvdW50KTsKK30KKwordm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJz
aW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSWRlbnRpZmllciogcGFyYW1ldGVycywgc2l6
ZV90IHBhcmFtZXRlckNvdW50KQoreworICAgIHNldFNvdXJjZShzb3VyY2UpOworICAgIG1fcGFy
YW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgbV9wYXJhbWV0ZXJDb3VudCA9IHBhcmFtZXRlckNv
dW50OworfQorCiB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6Om1hcmsoKQogewogICAgIGlmIChtX2Nv
ZGUpCkBAIC0xNzg2LDcgKzE4MDUsNyBAQCBGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhCiAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGNo
aWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCB1c2VzRXZhbCwgbmVlZHNDbG9zdXJlLCB1c2Vz
QXJndW1lbnRzLCBudW1Db25zdGFudHMpOwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlv
bkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNr
LCBTb3VyY2VQcm92aWRlciosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29s
IHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5j
dGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUs
IGJvb2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykKIHsKICAgICByZXR1cm4gbmV3
IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1cmUsIHVzZXNBcmd1bWVudHMsIG51bUNvbnN0YW50cyk7
CiB9CkBAIC0xNzk2LDggKzE4MTUsNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmdlbmVyYXRl
Q29kZShTY29wCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3Qo
KTsKIAotICAgIEFTU0VSVChtX3NvdXJjZS5zb3VyY2VQcm92aWRlcigpKTsKLSAgICBtX2NvZGUu
c2V0KG5ldyBDb2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBtX3NvdXJjZS5zb3VyY2VQcm92
aWRlcigpLCBtX3NvdXJjZS5zdGFydE9mZnNldCgpKSk7CisgICAgbV9jb2RlLnNldChuZXcgQ29k
ZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCku
c3RhcnRPZmZzZXQoKSkpOwogCiAgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmbV9zeW1ib2xUYWJsZSwgbV9jb2Rl
LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKQEAgLTE4MzMsOCArMTg1MSw3IEBA
IHZvaWQgUHJvZ3JhbU5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWkKICAgICBTY29wZUNoYWlu
IHNjb3BlQ2hhaW4oc2NvcGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIEFTU0VSVChtX3Nv
dXJjZVByb3ZpZGVyKTsKLSAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMs
IEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgbV9zb3VyY2VQcm92aWRlcikpOworICAgIG1fY29k
ZS5zZXQobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpKSk7CiAgICAgCiAgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0
b3IodGhpcywgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0KCksIG1fdmFyU3RhY2ssIG1fZnVuY3Rpb25T
dGFjayk7CiAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CkBAIC0xODQzLDExICsxODYwLDEwIEBA
IHZvaWQgUHJvZ3JhbU5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWkKIFVTdHJpbmcgRnVuY3Rp
b25Cb2R5Tm9kZTo6cGFyYW1TdHJpbmcoKSBjb25zdAogewogICAgIFVTdHJpbmcgcygiIik7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gbV9wYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBw
b3MgPSAwOyBwb3MgPCBjb3VudDsgKytwb3MpIHsKKyAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBw
b3MgPCBtX3BhcmFtZXRlckNvdW50OyArK3BvcykgewogICAgICAgICBpZiAoIXMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcyArPSAiLCAiOwotICAgICAgICBzICs9IG1fcGFyYW1ldGVyc1twb3Nd
LnVzdHJpbmcoKTsKKyAgICAgICAgcyArPSBwYXJhbWV0ZXJzKClbcG9zXS51c3RyaW5nKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHM7CkBAIC0xODU1LDEyICsxODcxLDYgQEAgVVN0cmluZyBGdW5j
dGlvbkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY0RlY2xOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci12b2lkIEZ1bmNEZWNsTm9kZTo6YWRkUGFyYW1zKCkKLXsKLSAgICBmb3IgKFBhcmFtZXRlck5v
ZGUqIHAgPSBtX3BhcmFtZXRlci5nZXQoKTsgcDsgcCA9IHAtPm5leHRQYXJhbSgpKQotICAgICAg
ICBtX2JvZHktPnBhcmFtZXRlcnMoKS5hcHBlbmQocC0+aWRlbnQoKSk7Ci19Ci0KIEpTRnVuY3Rp
b24qIEZ1bmNEZWNsTm9kZTo6bWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IG5ldyAoZXhlYykg
SlNGdW5jdGlvbihleGVjLCBtX2lkZW50LCBtX2JvZHkuZ2V0KCksIHNjb3BlQ2hhaW4pOwpAQCAt
MTkwNiwxMSArMTkxNiw0IEBAIEpTRnVuY3Rpb24qIEZ1bmNFeHByTm9kZTo6bWFrZUZ1bmN0aW9u
KEUKICAgICByZXR1cm4gZnVuYzsKIH0KIAotLy8gRUNNQSAxMwotdm9pZCBGdW5jRXhwck5vZGU6
OmFkZFBhcmFtcygpCi17Ci0gICAgZm9yIChQYXJhbWV0ZXJOb2RlKiBwID0gbV9wYXJhbWV0ZXIu
Z2V0KCk7IHA7IHAgPSBwLT5uZXh0UGFyYW0oKSkKLSAgICAgICAgbV9ib2R5LT5wYXJhbWV0ZXJz
KCkuYXBwZW5kKHAtPmlkZW50KCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5oCShyZXZpc2lvbiAzNzE3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTY3LDEyICsyMTY3LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIEJsb2NrTm9kZSB7CiAgICAgcHVibGljOgot
ICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFj
ayosIEZ1bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9v
bCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOworICAgICAg
ICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVk
c0Nsb3N1cmUsIGJvb2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1Rf
Q0FMTDsKIAotICAgICAgICBpbnQgc291cmNlSWQoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIG1fc291cmNlSWQ7IH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKCkgY29u
c3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAg
ICAgCisgICAgICAgIHZvaWQgc2V0U291cmNlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkgeyBt
X3NvdXJjZSA9IHNvdXJjZTsgfQorICAgICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2VV
UkwoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPnVy
bCgpOyB9CisgICAgICAgIGludHB0cl90IHNvdXJjZUlkKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UucHJvdmlkZXIoKS0+YXNJZCgpOyB9CisKICAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KICAgICAgICAgYm9vbCBuZWVkc0Nsb3N1cmUoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzQ2xvc3VyZTsgfQogICAgICAgICBib29sIHVzZXNBcmd1bWVudHMo
KSBjb25zdCB7IHJldHVybiBtX3VzZXNBcmd1bWVudHM7IH0KQEAgLTIxOTMsOCArMjE5Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvblN0YWNrIG1fZnVuY3Rpb25TdGFjazsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFVTdHJpbmcgbV9zb3VyY2VVUkw7Ci0gICAgICAgIGlu
dCBtX3NvdXJjZUlkOworICAgICAgICBTb3VyY2VDb2RlIG1fc291cmNlOwogICAgICAgICBib29s
IG1fdXNlc0V2YWw7CiAgICAgICAgIGJvb2wgbV9uZWVkc0Nsb3N1cmU7CiAgICAgICAgIGJvb2wg
bV91c2VzQXJndW1lbnRzOwpAQCAtMjIwMyw3ICsyMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBQcm9ncmFtTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFByb2dyYW1Ob2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBTb3VyY2VQcm92aWRlciosIGJv
b2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBu
dW1Db25zdGFudHMpIEpTQ19GQVNUX0NBTEw7CisgICAgICAgIHN0YXRpYyBQcm9ncmFtTm9kZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlv
blN0YWNrKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9z
dXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpIEpTQ19GQVNUX0NBTEw7
CiAKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgYnl0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4pIEpTQ19GQVNUX0NBTEwKICAgICAgICAgewpAQCAtMjIxMyw3ICsyMjE1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dy
YW1Ob2RlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlv
blN0YWNrKiwgU291cmNlUHJvdmlkZXIqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwor
ICAgICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0
YWNrKiwgRnVuY3Rpb25TdGFjayosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIHVzZXNFdmFsLCBi
b29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBK
U0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2Rl
KikgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjIyMSwx
NCArMjIyMywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPHNpemVfdD4gbV92
YXJJbmRleGVzOyAvLyBTdG9yYWdlIGluZGV4ZXMgYmVsb25naW5nIHRvIHRoZSBub2RlcyBpbiBt
X3ZhclN0YWNrLiAoUmVjb3JkZWQgdG8gYXZvaWQgZG91YmxlIGxvb2t1cC4pCiAgICAgICAgIFZl
Y3RvcjxzaXplX3Q+IG1fZnVuY3Rpb25JbmRleGVzOyAvLyBTdG9yYWdlIGluZGV4ZXMgYmVsb25n
aW5nIHRvIHRoZSBub2RlcyBpbiBtX2Z1bmN0aW9uU3RhY2suIChSZWNvcmRlZCB0byBhdm9pZCBk
b3VibGUgbG9va3VwLikKIAotICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNl
UHJvdmlkZXI7Ci0KICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKICAg
ICB9OwogCiAgICAgY2xhc3MgRXZhbE5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBFdmFsTm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgU291cmNlUHJvdmlkZXIqLCBi
b29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQg
bnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOworICAgICAgICBzdGF0aWMgRXZhbE5vZGUqIGNy
ZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwog
CiAgICAgICAgIEV2YWxDb2RlQmxvY2smIGJ5dGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluKSBKU0NfRkFTVF9DQUxMCiAgICAgICAgIHsKQEAgLTIyMzgsMjIgKzIyMzgsMjIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV2YWxOb2Rl
KEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNr
KiwgU291cmNlUHJvdmlkZXIqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSwgYm9v
bCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOworICAgICAg
ICBFdmFsTm9kZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRz
Q2xvc3VyZSwgYm9vbCB1c2VzQXJndW1lbnRzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9D
QUxMOwogCiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKikgSlNDX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICAKLSAgICAgICAg
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZVByb3ZpZGVyOwotCiAgICAgICAgIE93blB0
cjxFdmFsQ29kZUJsb2NrPiBtX2NvZGU7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQm9k
eU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBG
dW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBTb3VyY2VQcm92aWRlciosIGJvb2wgdXNlc0V2YWws
IGJvb2wgbmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMp
IEpTQ19GQVNUX0NBTEw7CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUo
SlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sq
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUsIGJv
b2wgdXNlc0FyZ3VtZW50cywgaW50IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKICAgICAg
ICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJvb2wg
bmVlZHNDbG9zdXJlLCBib29sIHVzZXNBcmd1bWVudHMsIGludCBudW1Db25zdGFudHMpIEpTQ19G
QVNUX0NBTEw7CisgICAgICAgIH5GdW5jdGlvbkJvZHlOb2RlKCk7CiAKLSAgICAgICAgVmVjdG9y
PElkZW50aWZpZXI+JiBwYXJhbWV0ZXJzKCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX3BhcmFt
ZXRlcnM7IH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogcGFyYW1ldGVycygpIGNvbnN0IEpT
Q19GQVNUX0NBTEwgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgICAgIHNpemVfdCBwYXJh
bWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KICAgICAgICAgVVN0cmlu
ZyBwYXJhbVN0cmluZygpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0Nf
RkFTVF9DQUxMOwpAQCAtMjI3Niw4ICsyMjc2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZvaWQgbWFyaygpOwogCi0gICAgICAgIHZvaWQgc2V0U291cmNlKGNvbnN0IFNvdXJjZVJh
bmdlJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0gCi0gICAgICAgIFVTdHJpbmcgdG9T
b3VyY2VTdHJpbmcoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIFVTdHJpbmcoInsiKSAr
IG1fc291cmNlLnRvU3RyaW5nKCkgKyBVU3RyaW5nKCJ9Iik7IH0KKyAgICAgICAgdm9pZCBmaW5p
c2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKik7CisgICAgICAgIHZv
aWQgZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiwgSWRlbnRpZmllciogcGFyYW1ldGVy
cywgc2l6ZV90IHBhcmFtZXRlckNvdW50KTsKKyAgICAgICAgCisgICAgICAgIFVTdHJpbmcgdG9T
b3VyY2VTdHJpbmcoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIFVTdHJpbmcoInsiKSAr
IHNvdXJjZSgpLnRvU3RyaW5nKCkgKyBVU3RyaW5nKCJ9Iik7IH0KIAogICAgICAgICAvLyBUaGVz
ZSBvYmplY3RzIGFyZSByZWYvZGVyZWYnZCBhIGxvdCBpbiB0aGUgc2NvcGUgY2hhaW4sIHNvIHRo
aXMgaXMgYSBmYXN0ZXIgcmVmL2RlcmVmLgogICAgICAgICAvLyBJZiB0aGUgdmlydHVhbCBtYWNo
aW5lIGNoYW5nZXMgc28gdGhpcyBkb2Vzbid0IGhhcHBlbiBhcyBtdWNoIHdlIGNhbiBjaGFuZ2Ug
YmFjay4KQEAgLTIyOTgsMjQgKzIzMDAsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEpTQ19GQVNU
X0NBTEw7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9wYXJhbWV0ZXJz
OworCisgICAgICAgIElkZW50aWZpZXIqIG1fcGFyYW1ldGVyczsKKyAgICAgICAgc2l6ZV90IG1f
cGFyYW1ldGVyQ291bnQ7CiAgICAgICAgIFN5bWJvbFRhYmxlIG1fc3ltYm9sVGFibGU7CiAgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fY29kZTsKLSAgICAgICAgU291cmNlUmFuZ2UgbV9zb3Vy
Y2U7CiAgICAgICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1
bmNFeHByTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBGdW5jRXhwck5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlUmFuZ2UmIHNvdXJj
ZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVyID0gMCkgSlNDX0ZBU1RfQ0FMTAorICAgICAgICBG
dW5jRXhwck5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIgPSAwKSBKU0NfRkFTVF9DQUxMCiAgICAgICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEpCiAgICAgICAgICAgICAsIG1faWRlbnQoaWRlbnQp
CiAgICAgICAgICAgICAsIG1fcGFyYW1ldGVyKHBhcmFtZXRlcikKICAgICAgICAgICAgICwgbV9i
b2R5KGJvZHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGFkZFBhcmFtcygpOwotICAgICAgICAg
ICAgbV9ib2R5LT5zZXRTb3VyY2Uoc291cmNlKTsKKyAgICAgICAgICAgIG1fYm9keS0+ZmluaXNo
UGFyc2luZyhzb3VyY2UsIG1fcGFyYW1ldGVyLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKQEAgLTIzMjcsOCArMjMyOCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KCkgeyByZXR1cm4gbV9ib2R5LmdldCgp
OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGFkZFBhcmFtcygpIEpTQ19GQVNUX0NB
TEw7Ci0KICAgICAgICAgLy8gVXNlZCBmb3Igc3RyZWFtVG8KICAgICAgICAgZnJpZW5kIGNsYXNz
IFByb3BlcnR5Tm9kZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMjMzOCwxNCAr
MjMzNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmNEZWNsTm9kZSA6IHB1
YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmNEZWNsTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlv
bkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlLCBQYXJhbWV0ZXJOb2Rl
KiBwYXJhbWV0ZXIgPSAwKSBKU0NfRkFTVF9DQUxMCisgICAgICAgIEZ1bmNEZWNsTm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbkJv
ZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIHBh
cmFtZXRlciA9IDApIEpTQ19GQVNUX0NBTEwKICAgICAgICAgICAgIDogU3RhdGVtZW50Tm9kZShn
bG9iYWxEYXRhKQogICAgICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAgICAgLCBt
X3BhcmFtZXRlcihwYXJhbWV0ZXIpCiAgICAgICAgICAgICAsIG1fYm9keShib2R5KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBhZGRQYXJhbXMoKTsKLSAgICAgICAgICAgIG1fYm9keS0+c2V0U291
cmNlKHNvdXJjZSk7CisgICAgICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBt
X3BhcmFtZXRlci5nZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NB
TEw7CkBAIC0yMzU4LDggKzIzNTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSgpIHsgcmV0dXJuIG1fYm9keS5nZXQoKTsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgdm9pZCBhZGRQYXJhbXMoKSBKU0NfRkFTVF9DQUxMOwotCiAgICAgICAgIFJl
ZlB0cjxQYXJhbWV0ZXJOb2RlPiBtX3BhcmFtZXRlcjsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IG1fYm9keTsKICAgICB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEx
ICs1NywxMSBAQCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxlR2VuZXJhdG9yKGNvbnN0CiB2b2lk
IFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvbGVTdGFydChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgaW50IGxpbmVOdW1iZXI7Ci0gICAgaW50IHNvdXJjZUlEOworICAgIGludHB0
cl90IHNvdXJjZUlkOwogICAgIFVTdHJpbmcgc291cmNlVVJMOwogICAgIEpTVmFsdWUqIGZ1bmN0
aW9uOwogCi0gICAgZXhlYy0+bWFjaGluZSgpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgbGlu
ZU51bWJlciwgc291cmNlSUQsIHNvdXJjZVVSTCwgZnVuY3Rpb24pOworICAgIGV4ZWMtPm1hY2hp
bmUoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3Vy
Y2VVUkwsIGZ1bmN0aW9uKTsKICAgICBtX2N1cnJlbnROb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0
ZShQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24gPyBmdW5jdGlv
bi0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9oZWFk
LmdldCgpLCBtX2hlYWQuZ2V0KCkpOwogICAgIG1faGVhZC0+aW5zZXJ0Tm9kZShtX2N1cnJlbnRO
b2RlLmdldCgpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDM3MTc5KQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNyArODkw
LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBidWZmZXIgPSBzdGF0aWNfY2FzdDxU
Kj4oZmFzdE1hbGxvYyhieXRlcykpOwogICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSgp
LCBieXRlcyk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CiAgICAgICAgIG1f
c2l6ZSA9IDA7CiAgICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgfQpJbmRleDogSmF2YVNjcmlw
dEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwko
cmV2aXNpb24gMzcxNzkpCisrKyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOC0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogSlNSdW4uY3BwOgorICAgICAgICAoSlNSdW46OkV2YWx1YXRlKToKKyAgICAgICAgKEpT
UnVuOjpDaGVja1N5bnRheCk6IFByb3ZpZGUgYSBTb3VyY2VDb2RlIHRvIHRoZSBJbnRlcnByZXRl
ciwgc2luY2UKKyAgICAgICAgb3RoZXIgQVBJcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKwog
MjAwOC0wOS0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IE5vdCByZXZpZXdlZC4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgSmF2YVNj
cmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiSlNSdW4uaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2NvbXBsZXRpb24uaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VSYW5nZS5oPgogCiBKU1J1bjo6SlNSdW4o
Q0ZTdHJpbmdSZWYgc291cmNlLCBKU0ZsYWdzIGluRmxhZ3MpCiAgICAgOiAgIEpTQmFzZShrSlNS
dW5UeXBlSUQpLApAQCAtNjAsMTAgKzYxLDEwIEBAIEpTR2xvYmFsT2JqZWN0KiBKU1J1bjo6R2xv
YmFsT2JqZWN0KCkgY28KIAogQ29tcGxldGlvbiBKU1J1bjo6RXZhbHVhdGUoKQogewotICAgIHJl
dHVybiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBm
R2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIFVTdHJpbmcoKSwgMCwgZlNvdXJjZSk7
CisgICAgcmV0dXJuIEludGVycHJldGVyOjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGZHbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291
cmNlKSk7CiB9CiAKIGJvb2wgSlNSdW46OkNoZWNrU3ludGF4KCkKIHsKLSAgICByZXR1cm4gSW50
ZXJwcmV0ZXI6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgVVN0cmlu
ZygpLCAwLCBmU291cmNlKS5jb21wbFR5cGUoKSAhPSBUaHJvdzsKKyAgICByZXR1cm4gSW50ZXJw
cmV0ZXI6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShmU291cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CiB9CkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzcxNzkpCisr
KyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDA4
LTEwLTAxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNF
UyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgVXBkYXRlZCBmb3IgSmF2YVNjcmlwdENvcmUg
QVBJIGNoYW5nZXM6IHVzZSBhIFNvdXJjZUNvZGUgaW5zdGVhZCBvZgorICAgICAgICBicm9rZW4g
b3V0IHBhcmFtZXRlcnM7IHRyZWF0IHNvdXJjZUlkIGFzIGludHB0cl90LgorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVJhbmdlLmg6IENvcGllZCBmcm9tIEZvcndhcmRp
bmdIZWFkZXJzL2tqcy9Tb3VyY2VQcm92aWRlci5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6c2VuZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5n
U291cmNlUHJvdmlkZXI6OlN0cmluZ1NvdXJjZVByb3ZpZGVyKToKKworICAgICAgICAoV2ViQ29y
ZTo6bWFrZVNvdXJjZSk6IEFkZGVkIGEgbWFrZVNvdXJjZSBmdW5jdGlvbiBmb3IgY29udmVuaWVu
Y2UuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJy
aWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAg
KiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2Fs
bCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0
OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAg
ICAoSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIpOgorCisgICAgICAgICogYnJpZGdlL2puaS9q
bmlfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6b3BlcmF0
b3IgVVN0cmluZyk6IFJlcGxhY2VkIHRoZSBleHBsaWNpdAorICAgICAgICB1c3RyaW5nKCkgZnVu
Y3Rpb24gd2l0aCBhbiBpbXBsaWNpdCBvcGVyYXRvciBiZWNhdXNlIHRoaXMgY2xhc3MgYWxyZWFk
eQorICAgICAgICBob2xkcyBhIFVTdHJpbmc6OnJlcC4KKworICAgICAgICAqIHBhZ2UvQ29uc29s
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZUxhc3RDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uc29sZTo6dHJhY2UpOgorICAgICAgICAqIHBhZ2UvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ1JlZik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZmFpbGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAg
ICogcGFnZS9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6Okph
dmFTY3JpcHRDYWxsRnJhbWUpOgorICAgICAgICAqIHBhZ2UvSmF2YVNjcmlwdENhbGxGcmFtZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OnNvdXJjZUlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dXBkYXRlKToKKyAgICAgICAgKiBw
YWdlL0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyLmg6CisgICAgICAgICogcGFnZS9KYXZhU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVy
OjphZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hEaWRQYXJz
ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJy
ZWFrcG9pbnQpOgorICAgICAgICAqIHBhZ2UvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6CisKIDIw
MDgtMTAtMDEgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tq
cy9Tb3VyY2VSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
a2pzL1NvdXJjZVJhbmdlLmgJKHJldmlzaW9uIDM3MDg1KQkoZnJvbSBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2tqcy9Tb3VyY2VQcm92aWRlci5oOjM3MDg1KQorKysgV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ranMvU291cmNlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBA
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlUHJvdmlkZXIuaD4KSW5kZXg6IFdlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL1NvdXJjZVJhbmdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvU291cmNlUmFuZ2UuaAkocmV2aXNpb24gMzcwODUp
CisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9Tb3VyY2VSYW5nZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xICsxIEBACi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlUHJvdmlk
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VSYW5nZS5oPgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lv
biAzNzE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBS
ZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0CiAgICAgfQogCiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7
Ci0gICAgaW50IHNvdXJjZUlEOworICAgIGludHB0cl90IHNvdXJjZUlEOwogICAgIFVTdHJpbmcg
c291cmNlVVJMOwogICAgIEpTVmFsdWUqIGZ1bmN0aW9uOwogICAgIGV4ZWMtPm1hY2hpbmUoKS0+
cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGZ1bmN0aW9uKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMzcxNzkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgSlNWYWx1ZSog
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29ucwogICAgIG1fZnJhbWUtPmtlZXBBbGl2ZSgp
OwogCiAgICAgbV93aW5kb3dTaGVsbC0+d2luZG93KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0g
ICAgQ29tcGxldGlvbiBjb21wID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VVUkwsIGJhc2VM
aW5lLCBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHN0ciksIG1fd2luZG93U2hlbGwpOwor
ICAgIENvbXBsZXRpb24gY29tcCA9IEludGVycHJldGVyOjpldmFsdWF0ZShleGVjLCBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzdHIs
IHNvdXJjZVVSTCwgYmFzZUxpbmUpLCBtX3dpbmRvd1NoZWxsKTsKICAgICBtX3dpbmRvd1NoZWxs
LT53aW5kb3coKS0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgaWYgKGNvbXAuY29tcGxUeXBl
KCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDM3
MTc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwyNCArMjksMzIgQEAKICNpZm5kZWYgU3RyaW5nU291cmNlUHJvdmlk
ZXJfaAogI2RlZmluZSBTdHJpbmdTb3VyY2VQcm92aWRlcl9oCiAKLSNpbmNsdWRlIDxranMvU291
cmNlUHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxranMvU291cmNlUmFuZ2UuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RyaW5nU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgSlND
OjpTb3VyY2VQcm92aWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc291cmNlKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU3RyaW5nU291cmNlUHJvdmlkZXIoc291cmNlKSk7IH0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nU291cmNlUHJvdmlkZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dHJpbmdTb3VyY2VQcm92aWRlcihzb3VyY2UsIHVybCkpOyB9CiAKICAgICAgICAgSlNDOjpVU3Ry
aW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QgeyByZXR1cm4gSlNDOjpVU3Ry
aW5nKG1fc291cmNlLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBlbmQgLSBzdGFydCk7IH0KICAgICAg
ICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJz
KCk7IH0KICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0
aCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmdTb3VyY2VQcm92aWRlcihjb25z
dCBTdHJpbmcmIHNvdXJjZSkgOiBtX3NvdXJjZShzb3VyY2UpIHt9CisgICAgICAgIFN0cmluZ1Nv
dXJjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCkKKyAg
ICAgICAgICAgIDogU291cmNlUHJvdmlkZXIodXJsKQorICAgICAgICAgICAgLCBtX3NvdXJjZShz
b3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3RyaW5nIG1f
c291cmNlOwogICAgIH07CiAKLQorICAgIGlubGluZSBKU0M6OlNvdXJjZUNvZGUgbWFrZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmwgPSBKU0M6OlVT
dHJpbmcoKSwgaW50IGZpcnN0TGluZSA9IDEpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
b3VyY2VDb2RlKFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwpLCBmaXJz
dExpbmUpOworICAgIH0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDM3MTc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDEyIEBA
CiAjaW1wb3J0ICJKU0RPTVdpbmRvdy5oIgogI2ltcG9ydCAiSlNET01XaW5kb3dDdXN0b20uaCIK
ICNpbXBvcnQgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW1wb3J0ICJTdHJpbmdTb3VyY2VQcm92aWRl
ci5oIgogI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKICNpbXBvcnQgIm9iamNfaW5zdGFu
Y2UuaCIKLSNpbXBvcnQgInJ1bnRpbWVfcm9vdC5oIgogI2ltcG9ydCAicnVudGltZS5oIgogI2lt
cG9ydCAicnVudGltZV9vYmplY3QuaCIKKyNpbXBvcnQgInJ1bnRpbWVfcm9vdC5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2ltcG9ydCA8a2pzL0V4ZWNTdGF0ZS5oPgog
I2ltcG9ydCA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC0zMjksNyArMzMwLDcgQEAgc3RhdGlj
IHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5zdGFydFRp
bWVvdXRDaGVjaygpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpl
dmFsdWF0ZShbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
VVN0cmluZygpLCAxLCBTdHJpbmcoc2NyaXB0KSk7CisgICAgQ29tcGxldGlvbiBjb21wbGV0aW9u
ID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSk7CiAgICAgW3NlbGYg
X3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAgIENv
bXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKICAgICAKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgV2ViQ29yZS9icmlkZ2UvTlBfanNv
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTlBf
anNvYmplY3QuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3Ry
aW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJjX3V0aWxpdHkuaCIKICNpbmNsdWRlICJu
cHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9wcml2LmgiCkBAIC0zOCwxMCAr
MzksMTIgQEAKICNpbmNsdWRlIDxranMvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxranMv
SlNMb2NrLmg+CiAjaW5jbHVkZSA8a2pzL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8
a2pzL1NvdXJjZVJhbmdlLmg+CiAjaW5jbHVkZSA8a2pzL2NvbXBsZXRpb24uaD4KICNpbmNsdWRl
IDxranMvaW50ZXJwcmV0ZXIuaD4KIAogdXNpbmcgV2ViQ29yZTo6U3RyaW5nOwordXNpbmcgV2Vi
Q29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcg
bmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7CiAKQEAgLTE5Nyw3ICsyMDAsNyBAQCBib29sIF9OUE5f
RXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywgTlBTCiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYo
cyk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdGFydFRpbWVvdXRDaGVj
aygpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVh
dGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgVVN0cmluZygpLCAxLCBzY3JpcHRT
dHJpbmcpOworICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZh
bHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRT
dHJpbmcpKTsKICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0b3BUaW1lb3V0
Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgp
OwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNpb24g
MzcxNzkpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8a2pzL2NvbXBsZXRpb24uaD4KICNpbmNs
dWRlIDxranMvaW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPGtqcy9Tb3VyY2VQcm92aWRlci5oPgogCiB1c2luZyBXZWJDb3JlOjpGcmFtZTsKIApA
QCAtMjkxLDcgKzI5Miw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0
aG8KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKLSAgICBJZGVudGlmaWVy
IGlkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZXRob2ROYW1lKS51c3RyaW5nKCkpOworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpKTsKICAg
ICBKU1ZhbHVlKiBmdW5jdGlvbiA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRD
YWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMjEsNyArMzIyLDcgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmV2YWwoanN0cmluZyBzY3JpcAogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgIENvbXBsZXRpb24g
Y29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2Nv
cGVDaGFpbigpLCBVU3RyaW5nKCksIDEsIEphdmFTdHJpbmcoc2NyaXB0KS51c3RyaW5nKCkpOwor
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShyb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0KSkp
OwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdG9wVGltZW91dENoZWNrKCk7CiAg
ICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwogICAgIApAQCAtMzQ2
LDcgKzM0Nyw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBfaW1wLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUp
LnVzdHJpbmcoKSkpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkpKTsKIAogICAgIHJldHVybiBjb252
ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KQEAgLTM2Myw3ICszNjQsNyBAQCB2b2lkIEph
dmFKU09iamVjdDo6c2V0TWVtYmVyKGpzdHJpbmcgbWVtCiAKICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgX2ltcC0+cHV0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS51c3RyaW5nKCkpLCBjb252ZXJ0Sk9i
amVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBzbG90KTsKKyAgICBfaW1wLT5wdXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpKSwgY29udmVydEpPYmplY3RUb1Zh
bHVlKGV4ZWMsIHZhbHVlKSwgc2xvdCk7CiB9CiAKIApAQCAtMzc3LDcgKzM3OCw3IEBAIHZvaWQg
SmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwotICAgIF9pbXAtPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS51c3RyaW5nKCkpKTsKKyAgICBfaW1wLT5kZWxl
dGVQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkp
KTsKIH0KIAogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkocmV2aXNpb24gMzcxNzkp
CisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIGNvbnN0IGpjaGFyICp1Y2hhcnMoKSBj
b25zdCB7IHJldHVybiAoY29uc3QgamNoYXIgKilfcmVwLT5kYXRhKCk7IH0KICAgICBpbnQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gX3JlcC0+c2l6ZSgpOyB9Ci0gICAgVVN0cmluZyB1c3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gVVN0cmluZyhfcmVwKTsgfQorICAgIG9wZXJhdG9yIFVTdHJpbmco
KSBjb25zdCB7IHJldHVybiBVU3RyaW5nKF9yZXApOyB9CiAKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFVTdHJpbmc6OlJlcD4gX3JlcDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysg
V2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcg
QEAgc3RhdGljIHZvaWQgcHJpbnRUb1N0YW5kYXJkT3V0KE1lc3NhZ2VMZQogc3RhdGljIGlubGlu
ZSB2b2lkIHJldHJpZXZlTGFzdENhbGxlcihFeGVjU3RhdGUqIGV4ZWMsIEtVUkwmIHVybCwgdW5z
aWduZWQmIGxpbmVOdW1iZXIpCiB7CiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7Ci0gICAgaW50
IHNvdXJjZUlkZW50aWZlcjsKKyAgICBpbnRwdHJfdCBzb3VyY2VJZGVudGlmZXI7CiAgICAgVVN0
cmluZyB1cmxTdHJpbmc7CiAgICAgSlNWYWx1ZSogZnVuY3Rpb247CiAKQEAgLTI4Myw3ICsyODMs
NyBAQCB2b2lkIENvbnNvbGU6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7Ci0gICAgaW50IHNvdXJjZUlkZW50aWZlcjsK
KyAgICBpbnRwdHJfdCBzb3VyY2VJZGVudGlmZXI7CiAgICAgVVN0cmluZyB1cmxTdHJpbmc7CiAg
ICAgSlNWYWx1ZSogZnVuYzsKIApJbmRleDogV2ViQ29yZS9wYWdlL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMzcxNzkpCisrKyBXZWJDb3JlL3BhZ2UvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBqc1N0cmluZwogICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4o
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cikpOwogfQogCi1zdGF0aWMg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nUmVmKGNvbnN0IFNvdXJjZVByb3ZpZGVy
JiBzdHIpCitzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nUmVmKGNvbnN0
IFNvdXJjZUNvZGUmIHN0cikKIHsKICAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKHN0ci5kYXRhKCksIHN0ci5sZW5n
dGgoKSkpOwogfQpAQCAtMjM5MiwxMiArMjM5MiwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnN0ZXBPdXRPZkZ1bmN0CiAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5z
dGVwT3V0T2ZGdW5jdGlvbigpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZEJy
ZWFrcG9pbnQoaW50IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyKQogewogICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRkQnJl
YWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlQnJlYWtwb2ludChpbnQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIp
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQoaW50cHRyX3Qgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCiB7CiAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKIH0KQEAg
LTI1NzAsMjggKzI1NzAsMjggQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVFeGNl
cHRpbwogCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZVByb3ZpZGVyJiBzb3VyY2UsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IHNvdXJjZUlEKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRQYXJzZVNvdXJjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
IHsKLSAgICBKU1ZhbHVlUmVmIHNvdXJjZUlEVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3Nj
cmlwdENvbnRleHQsIHNvdXJjZUlEKTsKLSAgICBKU1ZhbHVlUmVmIHNvdXJjZVVSTFZhbHVlID0g
SlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihzb3VyY2VVUkwp
LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIHNvdXJjZUlEVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJl
cihtX3NjcmlwdENvbnRleHQsIHNvdXJjZS5wcm92aWRlcigpLT5hc0lkKCkpOworICAgIEpTVmFs
dWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQs
IGpzU3RyaW5nUmVmKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkuZ2V0KCkpOwogICAgIEpTVmFs
dWVSZWYgc291cmNlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpz
U3RyaW5nUmVmKHNvdXJjZSkuZ2V0KCkpOwotICAgIEpTVmFsdWVSZWYgc3RhcnRpbmdMaW5lTnVt
YmVyVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3NjcmlwdENvbnRleHQsIHN0YXJ0aW5nTGlu
ZU51bWJlcik7CisgICAgSlNWYWx1ZVJlZiBmaXJzdExpbmVWYWx1ZSA9IEpTVmFsdWVNYWtlTnVt
YmVyKG1fc2NyaXB0Q29udGV4dCwgc291cmNlLmZpcnN0TGluZSgpKTsKIAogICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyBzb3VyY2VJ
RFZhbHVlLCBzb3VyY2VVUkxWYWx1ZSwgc291cmNlVmFsdWUsIHN0YXJ0aW5nTGluZU51bWJlclZh
bHVlIH07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgc291cmNlSURWYWx1ZSwgc291
cmNlVVJMVmFsdWUsIHNvdXJjZVZhbHVlLCBmaXJzdExpbmVWYWx1ZSB9OwogICAgIGNhbGxGdW5j
dGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAicGFyc2VkU2NyaXB0U291cmNl
IiwgNCwgYXJndW1lbnRzLCBleGNlcHRpb24pOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VQcm92
aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZmFpbGVkVG9QYXJzZVNvdXJjZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYg
ZXJyb3JNZXNzYWdlKQogewotICAgIEpTVmFsdWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVl
TWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZVVSTCkuZ2V0KCkp
OworICAgIEpTVmFsdWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3Nj
cmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkuZ2V0KCkp
OwogICAgIEpTVmFsdWVSZWYgc291cmNlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3Njcmlw
dENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZS5kYXRhKCkpLmdldCgpKTsKLSAgICBKU1ZhbHVl
UmVmIHN0YXJ0aW5nTGluZU51bWJlclZhbHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIobV9zY3JpcHRD
b250ZXh0LCBzdGFydGluZ0xpbmVOdW1iZXIpOworICAgIEpTVmFsdWVSZWYgZmlyc3RMaW5lVmFs
dWUgPSBKU1ZhbHVlTWFrZU51bWJlcihtX3NjcmlwdENvbnRleHQsIHNvdXJjZS5maXJzdExpbmUo
KSk7CiAgICAgSlNWYWx1ZVJlZiBlcnJvckxpbmVWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKG1f
c2NyaXB0Q29udGV4dCwgZXJyb3JMaW5lKTsKICAgICBKU1ZhbHVlUmVmIGVycm9yTWVzc2FnZVZh
bHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihlcnJv
ck1lc3NhZ2UpLmdldCgpKTsKIAogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyBzb3VyY2VVUkxWYWx1ZSwgc291cmNlVmFsdWUsIHN0
YXJ0aW5nTGluZU51bWJlclZhbHVlLCBlcnJvckxpbmVWYWx1ZSwgZXJyb3JNZXNzYWdlVmFsdWUg
fTsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyBzb3VyY2VVUkxWYWx1ZSwgc291cmNl
VmFsdWUsIGZpcnN0TGluZVZhbHVlLCBlcnJvckxpbmVWYWx1ZSwgZXJyb3JNZXNzYWdlVmFsdWUg
fTsKICAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImZh
aWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UiLCA1LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGFnZS9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0luc3BlY3RvckNvbnRyb2xsZXIuaAkocmV2aXNpb24gMzcxNzkpCisrKyBX
ZWJDb3JlL3BhZ2UvSW5zcGVjdG9yQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYs
OCArMTY2LDggQEAgcHVibGljOgogCiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENh
bGxGcmFtZSgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRCcmVha3BvaW50KGludCBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlcik7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGludCBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBhZGRCcmVha3BvaW50KGludHB0
cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwogCiAgICAgYm9v
bCBwYXVzZU9uRXhjZXB0aW9ucygpOwogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoYm9v
bCBwYXVzZSk7CkBAIC0yMjQsOCArMjI0LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2hvd1dp
bmRvdygpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHNvdXJjZUlEKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6U291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3Qg
SlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmFp
bGVkVG9QYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYs
IGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUGF1c2UoKTsKIAogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysg
V2ViQ29yZS9wYWdlL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZShjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gY2FsbGVyLCBpbnQgc291cmNlSUQsIGludCBsaW5lKQorSmF2YVNjcmlwdENhbGxGcmFt
ZTo6SmF2YVNjcmlwdENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJf
dCBzb3VyY2VJRCwgaW50IGxpbmUpCiAgICAgOiBtX2RlYnVnZ2VyQ2FsbEZyYW1lKGRlYnVnZ2Vy
Q2FsbEZyYW1lKQogICAgICwgbV9jYWxsZXIoY2FsbGVyKQogICAgICwgbV9zb3VyY2VJRChzb3Vy
Y2VJRCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0phdmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gMzcxNzkp
CisrKyBXZWJDb3JlL3BhZ2UvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEphdmFTY3Jp
cHRDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxKYXZhU2NyaXB0Q2FsbEZyYW1lPiB7CiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1l
PiBjcmVhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUs
IFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnQgc291cmNlSUQsIGlu
dCBsaW5lKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBj
cmVhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBh
c3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwg
aW50IGxpbmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2
YVNjcmlwdENhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSwgY2FsbGVyLCBzb3VyY2VJRCwgbGlu
ZSkpOwogICAgICAgICB9CkBAIC00Nyw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsZXIoKTsKIAotICAgICAgICBpbnQgc291
cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSUQ7IH0KKyAgICAgICAgaW50
cHRyX3Qgc291cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSUQ7IH0KICAg
ICAgICAgaW50IGxpbmUoKSBjb25zdCB7IHJldHVybiBtX2xpbmU7IH0KLSAgICAgICAgdm9pZCB1
cGRhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGlu
dCBzb3VyY2VJRCwgaW50IGxpbmUpCisgICAgICAgIHZvaWQgdXBkYXRlKGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50
IGxpbmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1
Z2dlckNhbGxGcmFtZTsKICAgICAgICAgICAgIG1fbGluZSA9IGxpbmU7CkBAIC02NCw3ICs2NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBldmFsdWF0ZShj
b25zdCBKU0M6OlVTdHJpbmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25z
dDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSmF2YVNjcmlwdENhbGxGcmFtZShj
b25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZy
YW1lPiBjYWxsZXIsIGludCBzb3VyY2VJRCwgaW50IGxpbmUpOworICAgICAgICBKYXZhU2NyaXB0
Q2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQYXNzUmVmUHRyPEphdmFT
Y3JpcHRDYWxsRnJhbWU+IGNhbGxlciwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lKTsKIAog
ICAgICAgICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CiAgICAg
ICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2NhbGxlcjsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oCShyZXZpc2lvbiAzNzE3OSkKKysrIFdlYkNvcmUv
cGFnZS9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKICAg
ICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgU291cmNlUHJvdmlkZXI7CisgICAgY2xhc3Mg
U291cmNlQ29kZTsKICAgICBjbGFzcyBVU3RyaW5nOwogfQogCkBAIC00NSw4ICs0NSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkphdmFTY3Jp
cHREZWJ1Z0xpc3RlbmVyKCkgeyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291
cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBp
bnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50
IHNvdXJjZUlEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQg
c3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGVy
cm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2UpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFy
c2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwg
aW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKCkgPSAwOwogICAgIH07CiAKSW5kZXg6IFdlYkNv
cmUvcGFnZS9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAzNzE3OSkKKysrIFdlYkNv
cmUvcGFnZS9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAs
NyArMTUwLDcgQEAgYm9vbCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0xpc3RlbmVycwogICAg
IHJldHVybiBtX3BhZ2VMaXN0ZW5lcnNNYXAuY29udGFpbnMocGFnZSk7CiB9CiAKLXZvaWQgSmF2
YVNjcmlwdERlYnVnU2VydmVyOjphZGRCcmVha3BvaW50KGludCBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlcikKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjphZGRCcmVha3BvaW50KGlu
dHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQogewogICAgIEhhc2hTZXQ8dW5z
aWduZWQ+KiBsaW5lcyA9IG1fYnJlYWtwb2ludHMuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAoIWxp
bmVzKSB7CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmFk
ZEJyZWFrcG9pbgogICAgIGxpbmVzLT5hZGQobGluZU51bWJlcik7CiB9CiAKLXZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGludCBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlcikKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50
KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQogewogICAgIEhhc2hTZXQ8
dW5zaWduZWQ+KiBsaW5lcyA9IG1fYnJlYWtwb2ludHMuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAo
IWxpbmVzKQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpy
ZW1vdmVCcmVha3AKICAgICBkZWxldGUgbGluZXM7CiB9CiAKLWJvb2wgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpoYXNCcmVha3BvaW50KGludCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikg
Y29uc3QKK2Jvb2wgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSBjb25zdAogewogICAgIEhhc2hTZXQ8dW5z
aWduZWQ+KiBsaW5lcyA9IG1fYnJlYWtwb2ludHMuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAoIWxp
bmVzKQpAQCAtMjQzLDIwICsyNDMsMjAgQEAgSmF2YVNjcmlwdENhbGxGcmFtZSogSmF2YVNjcmlw
dERlYnVnU2VydgogICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3Rl
bmVycywgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZVByb3ZpZGVyJiBzb3VyY2Us
IGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgc291
cmNlSUQpCitzdGF0aWMgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVy
U2V0JiBsaXN0ZW5lcnMsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UpCiB7CiAgICAgVmVjdG9yPEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gY29weTsKICAg
ICBjb3B5VG9WZWN0b3IobGlzdGVuZXJzLCBjb3B5KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvcHlbaV0tPmRpZFBhcnNlU291cmNlKGV4
ZWMsIHNvdXJjZSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUlEKTsKKyAg
ICAgICAgY29weVtpXS0+ZGlkUGFyc2VTb3VyY2UoZXhlYywgc291cmNlKTsKIH0KIAotc3RhdGlj
IHZvaWQgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0
ZW5lcnMsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50
IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBlcnJvckxp
bmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQorc3RhdGljIHZvaWQgZGlzcGF0Y2hGYWls
ZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBWZWN0b3I8SmF2YVNjcmlwdERlYnVnTGlzdGVuZXIq
PiBjb3B5OwogICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29weVtpXS0+ZmFpbGVk
VG9QYXJzZVNvdXJjZShleGVjLCBzb3VyY2UsIHN0YXJ0aW5nTGluZU51bWJlciwgc291cmNlVVJM
LCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIGNvcHlbaV0tPmZhaWxlZFRvUGFy
c2VTb3VyY2UoZXhlYywgc291cmNlLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKIHN0
YXRpYyBQYWdlKiB0b1BhZ2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTI2OCw3
ICsyNjgsNyBAQCBzdGF0aWMgUGFnZSogdG9QYWdlKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAg
cmV0dXJuIGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CiB9CiAKLXZvaWQgSmF2YVNjcmlwdERl
YnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBpbnQgc291cmNlSUQsIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgU291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50
IHN0YXJ0aW5nTGluZU51bWJlciwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JN
ZXNzYWdlKQordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3Qg
VVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIGlmIChtX2NhbGxpbmdMaXN0ZW5lcnMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NSwxNyArMjg1LDE3IEBAIHZvaWQgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzb3VyY2VQYXJzZWQKIAogICAgIGlmICghbV9saXN0ZW5lcnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgICAgICAgZGlzcGF0Y2hGYWlsZWRUb1BhcnNl
U291cmNlKG1fbGlzdGVuZXJzLCBleGVjLCBzb3VyY2UsIHN0YXJ0aW5nTGluZU51bWJlciwgc291
cmNlVVJMLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICBkaXNwYXRjaEZh
aWxlZFRvUGFyc2VTb3VyY2UobV9saXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSwgZXJyb3JMaW5lLCBl
cnJvck1lc3NhZ2UpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNl
U291cmNlKG1fbGlzdGVuZXJzLCBleGVjLCBzb3VyY2UsIHN0YXJ0aW5nTGluZU51bWJlciwgc291
cmNlVVJMLCBzb3VyY2VJRCk7CisgICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKG1f
bGlzdGVuZXJzLCBleGVjLCBzb3VyY2UpOwogICAgIH0KIAogICAgIGlmIChMaXN0ZW5lclNldCog
cGFnZUxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5nZXQocGFnZSkpIHsKICAgICAgICAg
QVNTRVJUKCFwYWdlTGlzdGVuZXJzLT5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoaXNFcnJvcikK
LSAgICAgICAgICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZSgqcGFnZUxpc3RlbmVycywg
ZXhlYywgc291cmNlLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZVVSTCwgZXJyb3JMaW5lLCBl
cnJvck1lc3NhZ2UpOworICAgICAgICAgICAgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKCpw
YWdlTGlzdGVuZXJzLCBleGVjLCBzb3VyY2UsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSgqcGFnZUxpc3Rl
bmVycywgZXhlYywgc291cmNlLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZVVSTCwgc291cmNl
SUQpOworICAgICAgICAgICAgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSgqcGFnZUxpc3RlbmVycywg
ZXhlYywgc291cmNlKTsKICAgICB9CiAKICAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsK
QEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5l
ZWRlCiAgICAgbV9wYXVzZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUs
IGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwg
aW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQogewogICAgIGlmIChtX3BhdXNlZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpjYWxsRXZlbnQoY28KICAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNh
bGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OmF0U3RhdGVtZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNh
bGxGcmFtZSwgaW50IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3ZvaWQgSmF2YVNjcmlwdERl
YnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKICAgICBpZiAo
bV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoCiAgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2Uo
ZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CiB9CiAKLXZvaWQgSmF2
YVNjcmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit2b2lkIEph
dmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7
CiAgICAgaWYgKG1fcGF1c2VkKQogICAgICAgICByZXR1cm47CkBAIC00NjQsNyArNDY0LDcgQEAg
dm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KAogICAgIG1fY3VycmVudENh
bGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7CiB9CiAKLXZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVn
Z2VyQ2FsbEZyYW1lLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQordm9pZCBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKICAgICBp
ZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4MCw3ICs0ODAsNyBAQCB2b2lkIEph
dmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKGNvCiAgICAgcGF1c2VJZk5lZWRlZCh0b1Bh
Z2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CiB9CiAKLXZvaWQg
SmF2YVNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJD
YWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KQordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBp
bnQgbGluZU51bWJlcikKIHsKICAgICBpZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ4OSw3ICs0ODksNyBAQCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQ
CiAgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2Jh
bE9iamVjdCgpKSk7CiB9CiAKLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRl
UHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludCBz
b3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlk
RXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1l
LCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7CiAgICAgaWYgKG1fcGF1c2Vk
KQogICAgICAgICByZXR1cm47CkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpZEV4ZWN1dGVQcgogICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVu
dENhbGxGcmFtZS0+Y2FsbGVyKCk7CiB9CiAKLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpk
aWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZy
YW1lLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQordm9pZCBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKICAgICBp
ZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9KYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvSmF2YVNjcmlwdERl
YnVnU2VydmVyLmgJKHJldmlzaW9uIDM3MTc5KQorKysgV2ViQ29yZS9wYWdlL0phdmFTY3JpcHRE
ZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBhZGRMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdMaXN0ZW5l
ciosIFBhZ2UqKTsKICAgICAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdM
aXN0ZW5lciosIFBhZ2UqKTsKIAotICAgICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKLSAgICAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KGludCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7Ci0gICAgICAgIGJvb2wgaGFzQnJl
YWtwb2ludChpbnQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0OworICAgICAg
ICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIpOworICAgICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIpOworICAgICAgICBib29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qg
c291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0OwogICAgICAgICB2b2lkIGNsZWFy
QnJlYWtwb2ludHMoKTsKIAogICAgICAgICBib29sIHBhdXNlT25FeGNlcHRpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uczsgfQpAQCAtOTUsMTQgKzk1LDE0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMo
SmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrLCBQYWdlKik7CiAgICAgICAgIHZvaWQgcGF1c2VJ
Zk5lZWRlZChQYWdlKik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6
OkV4ZWNTdGF0ZSosIGludCBzb3VyY2VJRCwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VVUkws
IGNvbnN0IEpTQzo6U291cmNlUHJvdmlkZXImIHNvdXJjZSwgaW50IHN0YXJ0aW5nTGluZU51bWJl
ciwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1zZyk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGlu
dCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0
ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJRCwgaW50IGZp
cnN0TGluZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGlu
dCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4
ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNlSWQs
IGludCBsaW5lbm8pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oY29u
c3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubyk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubyk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
LCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6OlVTdHJpbmcmIGVycm9yTXNnKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50
cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0
U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGZpcnN0TGluZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25z
dCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVt
YmVyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2Vy
Q2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0
cl90IHNvdXJjZUlELCBpbnQgbGluZW5vKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWNo
QnJlYWtwb2ludChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNl
SUQsIGludCBsaW5lbm8pOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxQYWdlKiwgTGlzdGVu
ZXJTZXQqPiBQYWdlTGlzdGVuZXJzTWFwOwogICAgICAgICBQYWdlTGlzdGVuZXJzTWFwIG1fcGFn
ZUxpc3RlbmVyc01hcDsKQEAgLTExNSw3ICsxMTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIG1fcGF1c2VPbkNhbGxGcmFtZTsKICAgICAgICAg
UmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxGcmFtZTsKICAgICAgICAg
SGFzaE1hcDxSZWZQdHI8RnJhbWU+LCBQYXVzZWRUaW1lb3V0cyo+IG1fcGF1c2VkVGltZW91dHM7
Ci0gICAgICAgIEhhc2hNYXA8aW50LCBIYXNoU2V0PHVuc2lnbmVkPio+IG1fYnJlYWtwb2ludHM7
CisgICAgICAgIEhhc2hNYXA8aW50cHRyX3QsIEhhc2hTZXQ8dW5zaWduZWQ+Kj4gbV9icmVha3Bv
aW50czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MzcxNzkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI2IEBACisyMDA4LTEwLTAxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBm
b3IgSmF2YVNjcmlwdENvcmUgQVBJIGNoYW5nZXM6IHVzZSBhIFNvdXJjZUNvZGUgaW5zdGVhZCBv
ZgorICAgICAgICBicm9rZW4gb3V0IHBhcmFtZXRlcnM7IHRyZWF0IHNvdXJjZUlkIGFzIGludHB0
cl90LgorICAgICAgICAKKyAgICAgICAgV2Ugc3RpbGwgdHJlYXQgc291cmNlSWQgYXMgaW50IGlu
IHNvbWUgY2FzZXMgYmVjYXVzZSBvZiBEYXNoQ29kZS4gU2VlCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82MjYzMjkzPiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlIHNob3VsZCB1c2UgaW50cHRyX3Qg
Zm9yCisgICAgICAgIHNvdXJjZUlkLCBub3QgaW50LgorCisgICAgICAgICogV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z2dlci5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW06
CisgICAgICAgICh0b05TU3RyaW5nKToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpzb3Vy
Y2VQYXJzZWQpOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmNhbGxFdmVudCk6CisgICAg
ICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViU2NyaXB0
RGVidWdnZXI6OnJldHVybkV2ZW50KToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpleGNl
cHRpb24pOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3JhbSk6
CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViU2NyaXB0RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludCk6CisKIDIwMDgtMTAtMDEg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgcHJvaGliaXRz
U2Nyb2xsaW5nIGZyb20gdGhlIEZyYW1lIHRvIHRoZSBTY3JvbGxWaWV3LgpJbmRleDogV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHJldmlzaW9uIDM3MTc5KQorKysgV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0
ICs1MSwxNCBAQCBjbGFzcyBXZWJTY3JpcHREZWJ1Z2dlciA6IHB1YmxpYyBKU0M6OkRlCiBwdWJs
aWM6CiAgICAgV2ViU2NyaXB0RGVidWdnZXIoSlNDOjpKU0dsb2JhbE9iamVjdCopOwogCi0gICAg
dmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0ZSosIGludCBzb3VyY2VJRCwg
Y29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IEpTQzo6U291cmNlUHJvdmlkZXIm
IHNvdXJjZSwgaW50IGxpbmVOdW1iZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmlu
ZyYgZXJyb3JNc2cpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoY29uc3QgSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZSYsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwotICAgIHZpcnR1
YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNv
dXJjZUlELCBpbnQgbGluZU51bWJlcik7Ci0gICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJh
bWUmLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnQgc291cmNl
SWQsIGludCBsaW5lbm8pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25z
dCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50IHNvdXJjZUlkLCBpbnQgbGluZW5vKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxs
RnJhbWUmLCBpbnQgc291cmNlSWQsIGludCBsaW5lbm8pOworICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBpbnQgZXJy
b3JMaW5lLCBjb25zdCBKU0M6OlVTdHJpbmcmIGVycm9yTXNnKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVOdW1iZXIpOworICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7CisgICAgdmlydHVhbCB2
b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291
cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9n
cmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50
IGxpbmVubyk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6
RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9jYWxsaW5nRGVsZWdhdGU7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0
RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnZ2VyLm1tCShyZXZpc2lvbiAzNzE3OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJTY3Jp
cHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBOU1N0cmluZyAq
dG9OU1N0cmluZyhjb25zdCBVU3RyaW5nJiBzKQogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aENoYXJhY3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyKj4ocy5kYXRhKCkp
IGxlbmd0aDpzLnNpemUoKV07CiB9CiAKLU5TU3RyaW5nICp0b05TU3RyaW5nKGNvbnN0IFNvdXJj
ZVByb3ZpZGVyJiBzKQorTlNTdHJpbmcgKnRvTlNTdHJpbmcoY29uc3QgU291cmNlQ29kZSYgcykK
IHsKICAgICBpZiAoIXMubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC04NSw3ICs4
NSw3IEBAIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcihKU0cKIH0KIAogLy8g
Y2FsbGJhY2tzIC0gcmVsYXkgdG8gZGVsZWdhdGUKLXZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OnNv
dXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIGludCBzb3VyY2VJRCwgY29uc3QgVVN0cmluZyYg
dXJsLCBjb25zdCBTb3VyY2VQcm92aWRlciYgc291cmNlLCBpbnQgbGluZU51bWJlciwgaW50IGVy
cm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNc2cpCit2b2lkIFdlYlNjcmlwdERlYnVnZ2Vy
Ojpzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IGludCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTXNnKQogewogICAgIGlmIChtX2Nh
bGxpbmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTMsMTggKzkzLDE4IEBAIHZvaWQg
V2ViU2NyaXB0RGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGUKICAgICBtX2NhbGxpbmdEZWxlZ2F0
ZSA9IHRydWU7CiAKICAgICBOU1N0cmluZyAqbnNTb3VyY2UgPSB0b05TU3RyaW5nKHNvdXJjZSk7
Ci0gICAgTlNVUkwgKm5zVVJMID0gdG9OU1VSTCh1cmwpOworICAgIE5TVVJMICpuc1VSTCA9IHRv
TlNVUkwoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKIAogICAgIFdlYkZyYW1lICp3ZWJGcmFt
ZSA9IHRvV2ViRnJhbWUoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKICAgICBXZWJWaWV3
ICp3ZWJWaWV3ID0gW3dlYkZyYW1lIHdlYlZpZXddOwogICAgIGlmIChlcnJvckxpbmUgPT0gLTEp
IHsKLSAgICAgICAgW1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3OndlYlZpZXcgZGlkUGFyc2VTb3VyY2U6bnNTb3VyY2UgYmFzZUxpbmVOdW1iZXI6bGluZU51
bWJlciBmcm9tVVJMOm5zVVJMIHNvdXJjZUlkOnNvdXJjZUlEIGZvcldlYkZyYW1lOndlYkZyYW1l
XTsKLSAgICAgICAgW1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3OndlYlZpZXcgZGlkUGFyc2VTb3VyY2U6bnNTb3VyY2UgZnJvbVVSTDpbbnNVUkwgYWJzb2x1
dGVTdHJpbmddIHNvdXJjZUlkOnNvdXJjZUlEIGZvcldlYkZyYW1lOndlYkZyYW1lXTsgLy8gZGVw
cmVjYXRlZCBkZWxlZ2F0ZSBtZXRob2QKKyAgICAgICAgW1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkUGFyc2VTb3VyY2U6bnNTb3VyY2Ug
YmFzZUxpbmVOdW1iZXI6c291cmNlLmZpcnN0TGluZSgpIGZyb21VUkw6bnNVUkwgc291cmNlSWQ6
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2UucHJvdmlkZXIoKS0+YXNJZCgpKSBmb3JXZWJGcmFtZTp3
ZWJGcmFtZV07CisgICAgICAgIFtbd2ViVmlldyBfc2NyaXB0RGVidWdEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3IGRpZFBhcnNlU291cmNlOm5zU291cmNlIGZyb21VUkw6W25zVVJM
IGFic29sdXRlU3RyaW5nXSBzb3VyY2VJZDpzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZS5wcm92aWRl
cigpLT5hc0lkKCkpIGZvcldlYkZyYW1lOndlYkZyYW1lXTsgLy8gZGVwcmVjYXRlZCBkZWxlZ2F0
ZSBtZXRob2QKICAgICB9IGVsc2UgewogICAgICAgICBOU1N0cmluZyogbnNFcnJvck1lc3NhZ2Ug
PSB0b05TU3RyaW5nKGVycm9yTXNnKTsKICAgICAgICAgTlNEaWN0aW9uYXJ5ICppbmZvID0gW1tO
U0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6bnNFcnJvck1lc3NhZ2Us
IFdlYlNjcmlwdEVycm9yRGVzY3JpcHRpb25LZXksIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWdu
ZWRJbnQ6ZXJyb3JMaW5lXSwgV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmVyS2V5LCBuaWxdOwogICAg
ICAgICBOU0Vycm9yICplcnJvciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46V2Vi
U2NyaXB0RXJyb3JEb21haW4gY29kZTpXZWJTY3JpcHRHZW5lcmFsRXJyb3JDb2RlIHVzZXJJbmZv
OmluZm9dOwotICAgICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6d2ViVmlldyBmYWlsZWRUb1BhcnNlU291cmNlOm5zU291cmNlIGJhc2VMaW5lTnVt
YmVyOmxpbmVOdW1iZXIgZnJvbVVSTDpuc1VSTCB3aXRoRXJyb3I6ZXJyb3IgZm9yV2ViRnJhbWU6
d2ViRnJhbWVdOworICAgICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyBmYWlsZWRUb1BhcnNlU291cmNlOm5zU291cmNlIGJhc2VMaW5l
TnVtYmVyOnNvdXJjZS5maXJzdExpbmUoKSBmcm9tVVJMOm5zVVJMIHdpdGhFcnJvcjplcnJvciBm
b3JXZWJGcmFtZTp3ZWJGcmFtZV07CiAgICAgICAgIFtlcnJvciByZWxlYXNlXTsKICAgICAgICAg
W2luZm8gcmVsZWFzZV07CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgV2ViU2NyaXB0
RGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGUKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZhbHNl
OwogfQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJD
YWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnQgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6Y2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KQogewogICAgIGlmIChtX2NhbGxpbmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI0
LDEyICsxMjQsMTIgQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6Y2FsbEV2ZW50KGNvbnN0IAog
ICAgIG1fdG9wQ2FsbEZyYW1lLmFkb3B0TlMoW1tXZWJTY3JpcHRDYWxsRnJhbWUgYWxsb2NdIF9p
bml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZyYW1lKS0+c2NyaXB0KCktPndpbmRvd1Njcmlw
dE9iamVjdCgpIGNhbGxlcjptX3RvcENhbGxGcmFtZS5nZXQoKSBkZWJ1Z2dlckNhbGxGcmFtZTpk
ZWJ1Z2dlckNhbGxGcmFtZV0pOwogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFt3ZWJGcmFtZSB3
ZWJWaWV3XTsKLSAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkaWRFbnRlckNhbGxGcmFtZTptX3RvcENhbGxGcmFtZS5nZXQoKSBzb3Vy
Y2VJZDpzb3VyY2VJRCBsaW5lOmxpbmVOdW1iZXIgZm9yV2ViRnJhbWU6d2ViRnJhbWVdOworICAg
IFtbd2ViVmlldyBfc2NyaXB0RGVidWdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3
IGRpZEVudGVyQ2FsbEZyYW1lOm1fdG9wQ2FsbEZyYW1lLmdldCgpIHNvdXJjZUlkOnN0YXRpY19j
YXN0PGludD4oc291cmNlSUQpIGxpbmU6bGluZU51bWJlciBmb3JXZWJGcmFtZTp3ZWJGcmFtZV07
CiAKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZhbHNlOwogfQogCi12b2lkIFdlYlNjcmlwdERl
YnVnZ2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit2b2lkIFdlYlNjcmlwdERlYnVn
Z2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKICAgICBpZiAobV9jYWxs
aW5nRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MCwxMiArMTQwLDEyIEBAIHZvaWQg
V2ViU2NyaXB0RGVidWdnZXI6OmF0U3RhdGVtZW50KGNvbnMKICAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gW3dlYkZyYW1lIHdlYlZpZXddOwogCiAgICAgW21fdG9wQ2FsbEZyYW1lLmdldCgpIF9zZXRE
ZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV07Ci0gICAgW1t3ZWJWaWV3IF9zY3Jp
cHREZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgd2lsbEV4ZWN1dGVTdGF0
ZW1lbnQ6bV90b3BDYWxsRnJhbWUuZ2V0KCkgc291cmNlSWQ6c291cmNlSUQgbGluZTpsaW5lTnVt
YmVyIGZvcldlYkZyYW1lOndlYkZyYW1lXTsKKyAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVs
ZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyB3aWxsRXhlY3V0ZVN0YXRlbWVudDptX3Rv
cENhbGxGcmFtZS5nZXQoKSBzb3VyY2VJZDpzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUlEKSBsaW5l
OmxpbmVOdW1iZXIgZm9yV2ViRnJhbWU6d2ViRnJhbWVdOwogCiAgICAgbV9jYWxsaW5nRGVsZWdh
dGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnQgc291cmNlSUQsIGlu
dCBsaW5lTnVtYmVyKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoY29uc3Qg
RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwg
aW50IGxpbmVOdW1iZXIpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0RlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6cmV0dXJu
RXZlbnQoY29ucwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107CiAK
ICAgICBbbV90b3BDYWxsRnJhbWUuZ2V0KCkgX3NldERlYnVnZ2VyQ2FsbEZyYW1lOmRlYnVnZ2Vy
Q2FsbEZyYW1lXTsKLSAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6d2ViVmlldyB3aWxsTGVhdmVDYWxsRnJhbWU6bV90b3BDYWxsRnJhbWUuZ2V0KCkg
c291cmNlSWQ6c291cmNlSUQgbGluZTpsaW5lTnVtYmVyIGZvcldlYkZyYW1lOndlYkZyYW1lXTsK
KyAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyB3aWxsTGVhdmVDYWxsRnJhbWU6bV90b3BDYWxsRnJhbWUuZ2V0KCkgc291cmNlSWQ6c3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VJRCkgbGluZTpsaW5lTnVtYmVyIGZvcldlYkZyYW1lOndlYkZy
YW1lXTsKIAogICAgIFttX3RvcENhbGxGcmFtZS5nZXQoKSBfY2xlYXJEZWJ1Z2dlckNhbGxGcmFt
ZV07CiAgICAgbV90b3BDYWxsRnJhbWUgPSBbbV90b3BDYWxsRnJhbWUuZ2V0KCkgY2FsbGVyXTsK
QEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpyZXR1cm5FdmVudChj
b25zCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3JpcHRE
ZWJ1Z2dlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxG
cmFtZSwgaW50IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3ZvaWQgV2ViU2NyaXB0RGVidWdn
ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUs
IGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKICAgICBpZiAobV9jYWxsaW5n
RGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NSwyMCArMTc1LDIwIEBAIHZvaWQgV2Vi
U2NyaXB0RGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0g
W3dlYkZyYW1lIHdlYlZpZXddOwogICAgIFttX3RvcENhbGxGcmFtZS5nZXQoKSBfc2V0RGVidWdn
ZXJDYWxsRnJhbWU6ZGVidWdnZXJDYWxsRnJhbWVdOwogCi0gICAgW1t3ZWJWaWV3IF9zY3JpcHRE
ZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZXhjZXB0aW9uV2FzUmFpc2Vk
Om1fdG9wQ2FsbEZyYW1lLmdldCgpIHNvdXJjZUlkOnNvdXJjZUlEIGxpbmU6bGluZU51bWJlciBm
b3JXZWJGcmFtZTp3ZWJGcmFtZV07CisgICAgW1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0RlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZXhjZXB0aW9uV2FzUmFpc2VkOm1fdG9wQ2FsbEZy
YW1lLmdldCgpIHNvdXJjZUlkOnN0YXRpY19jYXN0PGludD4oc291cmNlSUQpIGxpbmU6bGluZU51
bWJlciBmb3JXZWJGcmFtZTp3ZWJGcmFtZV07CiAKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZh
bHNlOwogfQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnQgc291cmNlSWQsIGlu
dCBsaW5lbm8pCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVubykKIHsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6ZGlkRXhlY3V0
ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnQg
c291cmNlSWQsIGludCBsaW5lbm8pCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpkaWRFeGVjdXRl
UHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0
cl90IHNvdXJjZUlELCBpbnQgbGluZW5vKQogewogfQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2Vy
OjpkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkK
K3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYsIGludHB0cl90LCBpbnQpCiB7CiAgICAgcmV0dXJuOwogfQo=
</data>
<flag name="review"
          id="10850"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>