<?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>139334</bug_id>
          
          <creation_ts>2014-12-05 21:23:15 -0800</creation_ts>
          <short_desc>Get rid of error-prone ReleaseParsedCalcValueCondition argument in CSSParser</short_desc>
          <delta_ts>2014-12-21 17:52:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1052977</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-05 21:23:15 -0800</bug_when>
    <thetext>Get rid of error-prone ReleaseParsedCalcValueCondition argument in CSSParser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052988</commentid>
    <comment_count>1</comment_count>
      <attachid>242702</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-05 21:53:08 -0800</bug_when>
    <thetext>Created attachment 242702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052989</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-05 21:55:24 -0800</bug_when>
    <thetext>Attachment 242702 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1641:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:9357:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.h:705:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052991</commentid>
    <comment_count>3</comment_count>
      <attachid>242704</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-05 23:20:28 -0800</bug_when>
    <thetext>Created attachment 242704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052992</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-05 23:22:16 -0800</bug_when>
    <thetext>Attachment 242704 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1641:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:9358:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.h:705:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053037</commentid>
    <comment_count>5</comment_count>
      <attachid>242718</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-06 10:20:05 -0800</bug_when>
    <thetext>Created attachment 242718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053038</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-06 10:21:26 -0800</bug_when>
    <thetext>Attachment 242718 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1641:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:9358:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.h:705:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053611</commentid>
    <comment_count>7</comment_count>
      <attachid>242718</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-08 18:10:43 -0800</bug_when>
    <thetext>Comment on attachment 242718
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=242718&amp;action=review

&gt; Source/WebCore/ChangeLog:14
&gt; +        the parsed calculation value is not associated with its CSSParserValue.

&quot;is associated&quot; rather than is *not* associated

&gt; Source/WebCore/css/CSSParser.h:695
&gt; +class CSSParserValueWithState {

What does “with state” mean? I am having trouble coming up with a good name, but the current name does not make sense to me. Maybe: CSSParserValueOrCalculation, CSSParserValueAndCalculation, or CSSParserValueWithCalculation.

Maybe we should consider making this a member of the CSSParser class to make the class name shorter in most of the code.

&gt; Source/WebCore/css/CSSParser.h:704
&gt; +    CSSCalcValue* parsedCalculation() const { return m_parsedCalculation.get(); }

Why the word “parsed” here? I don’t see how the calculation is any more “parsed” than the value is.

&gt; Source/WebCore/css/CSSParser.h:705
&gt; +    void setParsedCalculation(RefPtr&lt;CSSCalcValue&gt; calculation) { m_parsedCalculation = calculation; }

This should take PassRefPtr or a raw pointer, or alternatively use WTF::move in the function body.

&gt; Source/WebCore/css/CSSParser.h:709
&gt; +    private:
&gt; +        CSSParserValue&amp; m_value;
&gt; +        RefPtr&lt;CSSCalcValue&gt; m_parsedCalculation;

This is not our normal indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053619</commentid>
    <comment_count>8</comment_count>
      <attachid>242718</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-08 19:01:11 -0800</bug_when>
    <thetext>Comment on attachment 242718
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=242718&amp;action=review

&gt;&gt; Source/WebCore/css/CSSParser.h:705
&gt;&gt; +    void setParsedCalculation(RefPtr&lt;CSSCalcValue&gt; calculation) { m_parsedCalculation = calculation; }
&gt; 
&gt; This should take PassRefPtr or a raw pointer, or alternatively use WTF::move in the function body.

I hear we are transitioning away from PassRefPtr, which is why I used a RefPtr&lt;&gt; argument. I will add the WTF::move().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053638</commentid>
    <comment_count>9</comment_count>
      <attachid>242877</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-08 21:07:55 -0800</bug_when>
    <thetext>Created attachment 242877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053639</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-08 21:09:56 -0800</bug_when>
    <thetext>Attachment 242877 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1641:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:9356:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.h:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056174</commentid>
    <comment_count>11</comment_count>
      <attachid>243402</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-16 16:08:18 -0800</bug_when>
    <thetext>Created attachment 243402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056177</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-16 16:11:04 -0800</bug_when>
    <thetext>Attachment 243402 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1641:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:9356:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056266</commentid>
    <comment_count>13</comment_count>
      <attachid>243402</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-16 21:32:24 -0800</bug_when>
    <thetext>Comment on attachment 243402
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=243402&amp;action=review

&gt; Source/WebCore/css/CSSParser.cpp:1584
&gt; +bool CSSParser::validCalculationUnit(ValueWithCalculation&amp; valueWithCalculation, Units unitflags)

I find this function very strange.

It’s name is “valid calculation unit”, so it should return a “calculation unit”. But also it has a side effect of filling in the calculation. That’s really unclear from the name of the function. I have the same problem with the function validUnit and the many other functions that store the calculation into the ValueWithCalculation as a side effect. I think these functions should be named “validate” instead of “valid”, but also, I think they may want to be more explicit about how they fill in the calculation.

It’s also wrong capitalization to have an argument named “unitflags” with all lower case.

&gt; Source/WebCore/css/CSSParser.cpp:1711
&gt; +        ASSERT(isCalculation(valueWithCalculation));

Seems to me that this assertion should be moved into the ValueWithCalculation class instead of done at this call site.

&gt; Source/WebCore/css/CSSParser.cpp:1781
&gt; +    if (isCalculation(valueWithCalculation))

I think this maybe should be checking valueWithCalculation.calculation() for null instead of calling isCalculation.

&gt; Source/WebCore/css/CSSParser.h:90
&gt; +        CSSParserValue&amp; value() const { return m_value; }
&gt; +        operator CSSParserValue&amp;() { return m_value; }

There’s no reason for the CSSParserValue&amp; operator to be non-const. It should be const too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057283</commentid>
    <comment_count>14</comment_count>
      <attachid>243608</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-20 13:41:01 -0800</bug_when>
    <thetext>Created attachment 243608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057284</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-20 13:43:39 -0800</bug_when>
    <thetext>Attachment 243608 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1642:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:1651:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/CSSParser.cpp:9359:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057285</commentid>
    <comment_count>16</comment_count>
      <attachid>243609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-20 14:02:52 -0800</bug_when>
    <thetext>Created attachment 243609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057286</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-20 14:05:02 -0800</bug_when>
    <thetext>Attachment 243609 did not pass style-queue:


ERROR: Source/WebCore/css/CSSParser.cpp:1642:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSParser.cpp:1651:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/CSSParser.cpp:9359:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057295</commentid>
    <comment_count>18</comment_count>
      <attachid>243609</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-20 18:56:26 -0800</bug_when>
    <thetext>Comment on attachment 243609
Patch

Clearing flags on attachment: 243609

Committed r177623: &lt;http://trac.webkit.org/changeset/177623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057296</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-20 18:56:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057297</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-20 19:33:25 -0800</bug_when>
    <thetext>Chris, in the r177623 patch in ValueWithCalculation::setCalculation, it says isCalculation(m_value) where I think we wanted ASSERT(isCalculation(m_value)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057306</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-20 22:23:43 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057307</commentid>
    <comment_count>22</comment_count>
      <attachid>243612</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-20 22:23:46 -0800</bug_when>
    <thetext>Created attachment 243612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057308</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-20 22:25:39 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Chris, in the r177623 patch in ValueWithCalculation::setCalculation, it says
&gt; isCalculation(m_value) where I think we wanted
&gt; ASSERT(isCalculation(m_value)).

Yes indeed. Thanks for double checking and catching it. I uploaded a tiny patch to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057342</commentid>
    <comment_count>24</comment_count>
      <attachid>243612</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-21 17:52:28 -0800</bug_when>
    <thetext>Comment on attachment 243612
Patch

Clearing flags on attachment: 243612

Committed r177628: &lt;http://trac.webkit.org/changeset/177628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057343</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-21 17:52:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242702</attachid>
            <date>2014-12-05 21:53:08 -0800</date>
            <delta_ts>2014-12-05 23:20:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141205215343.patch</filename>
            <type>text/plain</type>
            <size>112911</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY1ODU2NTg4ODQxODBm
YTczZDY0YTdlZjNiNjAzMTY5YjU3NWI3Mi4uM2JiMzQ1OWZiZDQxN2VlOWVjZTc1NzVmYmExNzMz
N2M2M2M5NDNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJp
ZCBvZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50
IGluCisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENh
bGN1bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAg
SW5zdGVhZCwgaW50cm9kdWNlIGEgbmV3IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHR5cGUgd2hp
Y2ggd3JhcHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2Vk
IGNhbGN1bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxh
dGlvbiB2YWx1ZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3Vs
YXRpb24gdmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQ
SSBpcyBhbHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIg
bmVlZCB0byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91
bGQgYmUKKyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTEyLTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIHJlbW92ZSAiZW50ZXIgb3B0aW1pemVk
IGZ1bGxzY3JlZW4iIGdlc3R1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggYjQwYjU5
ZWMzZTY0YTQ1MTZhNDBmM2FmMmMyMmU2NjkyN2RiY2QxZi4uOGU1MTc0ZmFkYjkyMWRkMDU4MDEz
YjM3YjExOTMwMGIwN2M4MDI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE1ODEs
MjAgKzE1ODEsMjIgQEAgVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKIH0KIAot
Ym9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiB2YWx1
ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVh
c2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZh
bHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSwgVW5pdHMgdW5pdGZsYWdzKQogewogICAgIGJv
b2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0ZmxhZ3MgJiBGTm9uTmVnOwogCi0gICAgaWYgKCFw
YXJzZUNhbGN1bGF0aW9uKHZhbHVlLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpKQorICAgIGlmICghcGFyc2VDYWxj
dWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSwgbXVzdEJlTm9uTmVnYXRpdmUgPyBDYWxjdWxhdGlvblJh
bmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgQVNTRVJUKHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwor
ICAgIENTU0NhbGNWYWx1ZSYgcGFyc2VkQ2FsY3VsYXRpb24gPSAqdmFsdWVXaXRoU3RhdGUucGFy
c2VkQ2FsY3VsYXRpb24oKTsKICAgICBib29sIGIgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fcGFy
c2VkQ2FsY3VsYXRpb24tPmNhdGVnb3J5KCkpIHsKKyAgICBzd2l0Y2ggKHBhcnNlZENhbGN1bGF0
aW9uLmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6CiAgICAgICAgIGIgPSAodW5p
dGZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVn
ZXIpICYmIG1fcGFyc2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCisgICAgICAgIGlmICghYiAmJiAo
dW5pdGZsYWdzICYgRkludGVnZXIpICYmIHBhcnNlZENhbGN1bGF0aW9uLmlzSW50KCkpCiAgICAg
ICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAgaWYgKGIgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYg
bV9wYXJzZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICBpZiAoYiAmJiBtdXN0
QmVOb25OZWdhdGl2ZSAmJiBwYXJzZWRDYWxjdWxhdGlvbi5pc05lZ2F0aXZlKCkpCiAgICAgICAg
ICAgICBiID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY0xlbmd0aDoKQEAg
LTE2MDIsNyArMTYwNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6CiAgICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlBlcmNl
bnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBtX3BhcnNlZENhbGN1
bGF0aW9uLT5pc05lZ2F0aXZlKCkpCisgICAgICAgIGlmIChiICYmIG11c3RCZU5vbk5lZ2F0aXZl
ICYmIHBhcnNlZENhbGN1bGF0aW9uLmlzTmVnYXRpdmUoKSkKICAgICAgICAgICAgIGIgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoKQEAgLTE2MjMs
OCArMTYyNSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsCiAgICAgY2FzZSBDYWxjT3RoZXI6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWIgfHwgcmVsZWFzZUNhbGMgPT0gUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZSkKLSAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IG51bGxw
dHI7CisgICAgaWYgKCFiKQorICAgICAgICB2YWx1ZVdpdGhTdGF0ZS5zZXRQYXJzZWRDYWxjdWxh
dGlvbihudWxscHRyKTsKICAgICByZXR1cm4gYjsgICAgCiB9CiAKQEAgLTE2MzQsMjMgKzE2MzYs
MjMgQEAgaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHUKICAgICByZXR1cm4gKHVuaXRmbGFncyAmIChG
TGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJN
b2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2Rl
KTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUs
IFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBSZWxlYXNlUGFy
c2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlk
VW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUsIFVuaXRzIHVuaXRm
bGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewotICAgIGlmIChpc0NhbGN1bGF0
aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkQ2FsY3VsYXRpb25Vbml0KHZhbHVlLCB1
bml0ZmxhZ3MsIHJlbGVhc2VDYWxjKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhT
dGF0ZSkpCisgICAgICAgIHJldHVybiB2YWxpZENhbGN1bGF0aW9uVW5pdCh2YWx1ZVdpdGhTdGF0
ZSwgdW5pdGZsYWdzKTsKICAgICAgICAgCiAgICAgYm9vbCBiID0gZmFsc2U7Ci0gICAgc3dpdGNo
ICh2YWx1ZS51bml0KSB7CisgICAgc3dpdGNoICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQp
IHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgogICAgICAgICBiID0g
KHVuaXRmbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNjZXB0VW5p
dExlc3NWYWx1ZXModmFsdWUsIHVuaXRmbGFncywgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAg
ICAgIHZhbHVlLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYIDoKKyAgICAgICAgaWYgKCFiICYmIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVz
KHZhbHVlV2l0aFN0YXRlLCB1bml0ZmxhZ3MsIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAg
ICB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bml0ZmxhZ3MgJiBGQW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgOiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX01TKTsKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIHZhbHVlLmlzSW50KQor
ICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhTdGF0
ZS52YWx1ZSgpLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGlmICghYiAm
JiAodW5pdGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWUuaXNJbnQgJiYgdmFsdWUu
ZlZhbHVlID4gMCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0ZmxhZ3MgJiBGUG9zaXRpdmVJbnRl
Z2VyKSAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlzSW50ICYmIHZhbHVlV2l0aFN0YXRlLnZh
bHVlKCkuZlZhbHVlID4gMCkKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKQEAgLTE2OTYsMjAg
KzE2OTgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVnICYmIHZhbHVl
LmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIgPSBmYWxzZTsKLSAgICBpZiAo
YiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYgKGIgJiYgc3RkOjppc2luZih2
YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpCiAgICAgICAgIGIgPSBmYWxzZTsKICAgICBy
ZXR1cm4gYjsKIH0KIAotaW5saW5lIFBhc3NSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUpCiB7
Ci0gICAgaWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pIHsKLSAgICAgICAgQVNTRVJUKGlzQ2FsY3Vs
YXRpb24odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS5w
YXJzZWRDYWxjdWxhdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVl
V2l0aFN0YXRlKSk7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwogICAgIH0KIAorICAgIENTU1BhcnNl
clZhbHVlJiB2YWx1ZSA9IHZhbHVlV2l0aFN0YXRlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVT
T0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCiAgICAgQVNTRVJUKCh2
YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLnVuaXQg
PD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCiAgICAgICAgIHx8ICh2YWx1ZS51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfQ0hTKQpAQCAtMTczOSw0MyArMTc0Miw0NCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgcmV0
dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1
ZSA9PSAnLyc7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZFdpZHRoKENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZFdpZHRoKENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKIHsKLSAgICBpbnQgaWQgPSB2YWx1ZS5pZDsKKyAgICBpbnQg
aWQgPSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUlu
dHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZVdl
YmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50IHx8IGlkID09
IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpdENv
bnRlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiB9CiAKIC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgd2l0aCB2YWxpZFdpZHRoIHdoZW4gd2Ugc3Vw
cG9ydCBmaXQtY29udGVudCwgZXQgYWwsIGZvciBoZWlnaHRzLgotYm9vbCBDU1NQYXJzZXI6OnZh
bGlkSGVpZ2h0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZEhl
aWdodChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUpCiB7Ci0gICAgaW50
IGlkID0gdmFsdWUuaWQ7CisgICAgaW50IGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsK
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5JbnRy
aW5zaWMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGlmIChpZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIp
OwotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpOwotICAgIGlm
ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLnVu
aXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgIHJldHVybiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlKTsKLSAgICBpZiAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXICYm
IHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKworICAgIGlmICh2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7
CisgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19LSFopCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgaWYgKHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXICYmIHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgp
CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3Rh
dGUpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJ
T05fTUVESUFfUVVFUlkpCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBp
ZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RFBQWCAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUENNKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aFN0YXRlKTsKICNlbmRpZgotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1BhcnNlclZh
bHVlOjpRX0VNUykKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxv
d2luZ01hcmdpblF1aXJrKHZhbHVlLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMp
OwotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlm
ICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQor
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVp
cmsodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSkpCisgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1
bGF0aW9uKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzk4LDE5ICsxODAyLDEz
IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBpZiAoIW1fdmFs
dWVMaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgaWYgKCF2YWx1ZSkKKyAgICBpZiAo
IW1fdmFsdWVMaXN0IHx8ICFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBOb3RlOiBtX3BhcnNlZENhbGN1bGF0aW9uIGlzIHVzZWQgdG8gcGFz
cyB0aGUgY2FsYyB2YWx1ZSB0byB2YWxpZFVuaXQgYW5kIHRoZW4gY2xlYXJlZCBhdCB0aGUgZW5k
IG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdG8gYXZvaWQgaGF2aW5n
IHRvIHBhc3MgcGFyc2VkQ2FsYyB0byBhbGwgdmFsaWRVbml0IGNhbGxlcnMuCi0gICAgQVNTRVJU
KCFtX3BhcnNlZENhbGN1bGF0aW9uKTsKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHBhcnNpbmcgc3Rh
dGUuCisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpOwogICAgIAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7Cisg
ICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQ7CiAKICAgICB1bnNp
Z25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAKQEAg
LTE4NzQsNyArMTg3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAg
ICAgICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRvIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGlwU2hhcGUocHJvcElk
LCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsKIApAQCAtMTkzMiw3ICsxOTMwLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNw
YWNpbmc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5v
bk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwgaW5oZXJpdAogICAg
ICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlvbmFsIGtleXdvcmQu
CkBAIC0xOTg1LDYgKzE5ODMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIHpvb20taW4gfCB6b29t
LW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIHwgLXdl
YmtpdC16b29tLWluIHwKICAgICAgICAgLy8gLXdlYmtpdC16b29tLW91dCBdIF0gfCBpbmhlcml0
CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CisgICAgICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpOwogICAgICAgICB3aGlsZSAodmFs
dWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2U7CiAgICAgICAgICAgICBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIwMjcs
NyArMjAyNiw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsgLy8gY29tbWEKICAgICAgICAgfQogICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkgeyAvLyBubyB2YWx1ZSBhZnRlciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBh
dGliaWxpdHkpCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8g
bm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRpYmlsaXR5KQogICAgICAgICAg
ICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUhhbmQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCkBAIC0yMDM5
LDcgKzIwMzksOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZSkgewogICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAgICBp
ZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgeyAvLyBNU0lF
IDUgY29tcGF0aWJpbGl0eSA6LworICAgICAgICAgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBNU0lFIDUgY29t
cGF0aWJpbGl0eSA6LwogICAgICAgICAgICAgICAgIGlkID0gQ1NTVmFsdWVQb2ludGVyOwogICAg
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Vi
a2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVOb25lKQpAQCAtMjExMywxNyArMjExNCwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZykpOwog
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0dl
bmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJh
dGVkSW1hZ2VWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSkpIHsKICAgICAgICAgICAgIGlmIChwYXJzZUdl
bmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQogICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWltYWdlLXNl
dCgiKSkgeworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlV2l0aFN0
YXRlLnZhbHVlKCkuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWltYWdlLXNldCgiKSkgewogICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7CiAgICAgICAgICAgICBpZiAo
IXBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxNDYsMjEg
KzIxNDcsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVUaGluIHx8IGlk
ID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpOworICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBG
Tm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3Bh
Y2luZzogICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCBpbmhlcml0CiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1By
b3BlcnR5V29yZFNwYWNpbmc6ICAgICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCA8cGVyY2Vu
dGFnZT4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZM
ZW5ndGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRJbmRlbnQ6CkBAIC0yMTc1LDM3ICsyMTc2LDM3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFk
ZGluZ0JlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRoKCp2YWx1ZSkpOworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRXaWR0aCh2YWx1
ZVdpdGhTdGF0ZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5X
aWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkV2lkdGgoKnZhbHVlKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2lj
YWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0g
Q1NTVmFsdWVOb25lIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRIZWlnaHQodmFsdWVXaXRoU3RhdGUp
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KCp2YWx1ZSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRIZWlnaHQodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlIZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWln
aHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxp
ZEhlaWdodCgqdmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkSGVpZ2h0KHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgpAQCAtMjIyMSw3ICsyMjIyLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1
ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOiAg
ICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQK
QEAgLTIyMzksMTQgKzIyNDAsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwg
Rkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQg
JiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OiAgICAgICAgICAgICAgLy8g
YXV0byB8IDxpbnRlZ2VyPiB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRl
Z2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQg
JiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8aW50ZWdl
cj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9ydCBmb3IgYXV0byBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMjU0LDcgKzIyNTUsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CkBAIC0yMzA0LDcgKzIzMDUsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1
ZVJlc2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NT
dHJpY3RNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzog
Ly8gT25seSB1c2VkIHdpdGhpbiBAZm9udC1mYWNlIGFuZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNh
bm5vdCB1c2UgaW5oZXJpdCB8IGluaXRpYWwgb3IgYmUgIWltcG9ydGFudC4gVGhpcyBpcyBhIGxp
c3Qgb2YgdXJscyBvciBsb2NhbCByZWZlcmVuY2VzLgpAQCAtMjM3MCwxNyArMjM3MSwxNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7CiAg
ICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwg
RlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwogICAgICAgICBp
ZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7
CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAg
ICBpZiAobnVtID09IDIpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSBuZXh0VmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5uZXh0KCkpOworICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQobmV4dFZhbHVlV2l0aFN0YXRlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUy
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aFN0YXRl
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1
ZTE7CiAKQEAgLTIzODgsNyArMjM4OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25O
ZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0
aW86CiAgICAgICAgIHJldHVybiBwYXJzZUFzcGVjdFJhdGlvKGltcG9ydGFudCk7CkBAIC0yMzk2
LDcgKzIzOTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJh
ZGl1czoKICAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVyUmFkaXVzKHByb3BJZCwgaW1wb3J0YW50
KTsKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzogLy8gQ1NTMiBwcm9wZXJ0eSwgZHJvcHBl
ZCBpbiBDU1MyLjEsIGJhY2sgaW4gQ1NTMywgc28gdHJlYXQgYXMgQ1NTMwogICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3hTaGFkb3c6CkBAIC0yNDE5LDE3ICsyNDIwLDE3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVtICE9IDIpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKICAgICAg
ICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICAgICAgaWYgKG51bSA9PSAyKSB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAg
ICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbmV4dFZhbHVlV2l0aFN0YXRlKCptX3Zh
bHVlTGlzdC0+bmV4dCgpKTsKKyAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdChuZXh0VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVnZXIpOwogICAgICAgICAgICAg
ICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKICAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKHBhcnNlZFZh
bHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwpAQCAt
MjQ0NCwxNiArMjQ0NSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWZs
ZWN0KHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU9wYWNpdHk6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwg
Rk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveEZsZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51
bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOworICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9y
ZGluYWxHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlLT5mVmFsdWU7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8
IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgogI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCkBAIC0yNDk0LDE2ICsyNDk1LDE2IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAo
IWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsK
KyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hy
aW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIg
fCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIsIENT
U1N0cmljdE1vZGUpKSB7CisgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJ
bnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhl
IHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5k
IGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCi0gICAgICAgICAg
ICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1
ZSkpOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIDIsIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0
ZSkpOwogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTI1MTQsMTkgKzI1MTUsMTkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBpZCA9PSBDU1NWYWx1ZUxh
cmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9u
OgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJbnRlZ2VyIHwgRk5v
bk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
U3BlZWQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1
ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZUaW1lIHwgRkludGVnZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGVGltZSB8IEZJbnRlZ2Vy
IHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CkBAIC0yNTczLDggKzI1NzQsOCBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVlbGVzcyBudW1iZXJzIGlzIGEgcXVpcmsg
b2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCi0gICAgICAg
ICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnKSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7CisgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTQsMTkgKzI2OTUsMTkgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFsdWVUaGlj
aykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJl
ciB8IEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFp
ZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlk
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkdhcDogLy8gbm9ybWFsIHwgPGxlbmd0aD4KICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlzOgogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IGlkID09IENTU1ZhbHVlVmVydGljYWwg
fHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQpAQCAtMjcxOSw3ICsyNzIwLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAvLyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBk
cm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3BlcnR5KQogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwg
Rk5vbk5lZykgJiYgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkg
PT0gMSkgeworICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1i
ZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoU3RhdGUpID09IDEpIHsKICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI3MjksOSArMjcz
MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBpbiBz
dHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVuIHVz
ZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSAmJiBwYXJzZWREb3VibGUoKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRQ
cmltaXRpdmUpCi0gICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbi5jbGVhcigpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZM
ZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRo
U3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIC8vIEVuZCBvZiBDU1MzIHBy
b3BlcnRpZXMKQEAgLTI3NDEsNyArMjc0MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TGluZUNsYW1wOgogICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgbnVtYmVyIG9m
IGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUKICAgICAgICAgLy8gV2hlbiBz
cGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUgbm9uLW5lZ2F0aXZlIGludGVn
ZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVlLT5mVmFsdWUpICYmIHZhbGlk
VW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2Rl
KSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWVXaXRoU3RhdGUudmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50
ZWdlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVh
azsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFNpemVBZGp1c3Q6CkBAIC0yNzQ5LDM2ICsyNzQ4LDM2IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ugd2hlcmUgd2UgYWxsb3cgcmVs
YXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBG
UGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6
ICAgICAgICAgICAvLyA8bGVuZ3RoPgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGgpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2
YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0byB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgp
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRI
eXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xpbWl0
IHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkp
CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwgdmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgU3Ry
aW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKSB7CisgICAgICAgICAgICBTdHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFs
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORyksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yNzg2LDEzICsyNzg1LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjog
Ly8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+Ci0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVO
b25lKQorICAgICAgICBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICByZXR1
cm4gcGFyc2VEYXNoYm9hcmRSZWdpb25zKHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKQEAgLTI5NTYsMTUgKzI5NTUsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBwYXJz
ZWRWYWx1ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVz
RW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW1hZ2VUaHJlc2hv
bGQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIpKTsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxp
ZFVuaXQoKnZhbHVlLCBGQW5nbGUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZBbmdsZSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpAQCAtMzExNCwxMCArMzExMywxMCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgfQogCiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgKnZhbHVlKTsKKyAgICAgICAgcGFy
c2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhTdGF0ZSk7CiAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIEFTU0VSVCghbV9wYXJzZWRDYWxj
dWxhdGlvbik7CisKICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgaWYgKCFtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpIHx8IGluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwpAQCAtMzIyMCwx
NiArMzIxOSwxNyBAQCBib29sIENTU1BhcnNlcjo6dXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9y
dGhhbmRCZWhhdmlvcigpIGNvbnN0CiBib29sIENTU1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25h
cFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWwsIEZQZXJjZW50IHwgRkxlbmd0
aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoKnZhbCkpOwotICAgICAgICBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OkZ1bmN0aW9uCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAg
ICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgZXF1
YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgewotICAgICAg
ICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbCA9ICp2YWwtPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpLT5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0KHBhcnNlclZhbCwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShwYXJzZXJWYWwpKSkpOworICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIGlmICh2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpCisgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpKTsKKyAg
ICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisg
ICAgICAgICAgICAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MKKyAgICAgICAgICAgICYmIHZhbHVl
LT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgeworICAgICAgICAgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKnZhbHVlLT5mdW5jdGlv
bi0+YXJncy5nZXQoKS0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoYXJn
dW1lbnRXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNy
ZWF0ZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKSkpOwog
ICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTMyNTIsMTUgKzMyNTIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25h
cERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbiA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSAhPSAyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1clBhcnNlclZhbCA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKmN1clBhcnNlclZhbCwgRlBlcmNl
bnQgfCBGTGVuZ3RoKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVhXaXRoU3Rh
dGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVlWFdp
dGhTdGF0ZSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KCpjdXJQYXJzZXJWYWwpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgY3VyUGFyc2Vy
VmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbGlkVW5pdCgqY3VyUGFy
c2VyVmFsLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWFdpdGhTdGF0ZSk7CisKKyAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVlXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5u
ZXh0KCkpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVlWVdpdGhTdGF0ZSwgRlBlcmNlbnQgfCBG
TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZhbHVlWVdpdGhTdGF0ZSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwb3NpdGlvbiwgaW1wb3J0YW50KTsKQEAg
LTMyNzIsMTUgKzMyNzIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3Jk
aW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgcGFyc2VkVmFsdWVYID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Cisg
ICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlWFdpdGhTdGF0ZSgqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CiAgICAgICAgIC8vIERvbid0IGFjY2VwdCBvZGQtbGVuZ3RoIGxpc3Rz
IG9mIGNvb3JkaW5hdGVzLgogICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZWRWYWx1
ZVkgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQocGFy
c2VkVmFsdWVYLCBGUGVyY2VudCB8IEZMZW5ndGgpIHx8ICF2YWxpZFVuaXQocGFyc2VkVmFsdWVZ
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2
YWx1ZVlXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgICAgICBpZiAoIXZh
bGlkVW5pdCh2YWx1ZVhXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkgfHwgIXZhbGlkVW5p
dCh2YWx1ZVlXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShwYXJzZWRWYWx1ZVgpKTsKLSAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlZFZhbHVlWSkpOworICAgICAgICBwb3NpdGlvbnMt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVYV2l0aFN0YXRlKSk7Cisg
ICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVlXaXRoU3RhdGUpKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAgICAg
aWYgKHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKQEAgLTM3NzIsMTIgKzM3NzIsMTQgQEAgQ1NTUGFy
c2VyOjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NW
YWx1ZUxpc3QmIHBhcnNlZFYKICAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1U
eXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7Ci0gICAgICAgICAgICBw
YXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSkpOwor
ICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdp
dGhTdGF0ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwg
cHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBw
ZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuIExlbmd0aDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKKyAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgfQpAQCAtMzk3Myw4
ICszOTc1LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3Np
dGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQg
PSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxp
ZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkp
OworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZUxpc3Qu
Y3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8
IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMzk4OSw4ICszOTky
LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblko
Q1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsK
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQo
KnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZUxpc3QuY3VycmVu
dCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDAyNiwxOSArNDAzMCwxNyBA
QCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0
aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbAogCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2Vu
dCB8IEZMZW5ndGgpKSB7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3Rh
dGUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3Rh
dGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKICAgICAgICAgaWYgKCFjdW11bGF0aXZlRmxhZ3Mp
IHsKICAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9uOwogICAgICAg
ICAgICAgaW5kaXZpZHVhbEZsYWcgPSBYRmlsbFBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgaWYg
KGN1bXVsYXRpdmVGbGFncyAmIChYRmlsbFBvc2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBvc2l0aW9u
KSkgewogICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247CiAgICAg
ICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRDYWxjdWxhdGlvbikKLSAgICAgICAgICAgICAgICBt
X3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQpAQCAtNDIwMCw3ICs0MjAyLDEwIEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDCiAKIGlubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3RlbnRpYWxQb3NpdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gaXNGaWxsUG9zaXRpb25LZXl3
b3JkKHZhbHVlLmlkKSB8fCB2YWxpZFVuaXQodmFsdWUsIEZQZXJjZW50IHwgRkxlbmd0aCwgUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1
ZS5pZCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUGVyY2VudCB8IEZMZW5ndGgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQpAQCAtNDM2NCw5ICs0MzY5LDEwIEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCYgYWxsb3dDCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0
aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSgqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGFyc2VkVmFsdWUyOwpAQCAtNDM3NCwxMyArNDM4MCwxNCBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wmIGFsbG93QwogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9w
ZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQogICAgICAgICAgICAgYWxsb3dDb21tYSA9
IGZhbHNlOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVBdXRvKSB7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
KyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8
IEZQZXJjZW50KSkgewogICAgICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdCBpcyBhZHZhbmNlZCB3
ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgogICAgICAgICAgICAgICAgIG1fdmFsdWVM
aXN0LT5wcmV2aW91cygpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFy
c2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSkgewogICAgICAgICAvLyBG
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhl
IGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCkBAIC00NTgxLDkgKzQ1ODgsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5
SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmlt
YXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUpKQotICAgICAgICBy
ZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBDU1NQYXJzZXJW
YWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Cisg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRlRpbWUpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIApAQCAtNDU5Nyw5ICs0NjA0LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCiAKIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCiB7Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5p
dCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVX
aXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFs
dWVXaXRoU3RhdGUsIEZUaW1lIHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgIHJldHVybiBudWxscHRyOwog
fQogCkBAIC00NjE2LDggKzQ2MjMsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQogICAgIENTU1BhcnNlclZhbHVlJiB2YWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1
ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRk5v
bk5lZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUp
OworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAg
ICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjY3LDggKzQ2NzUsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dWUxLCBSZWZQdHI8QwogCiAgICAgLy8gbm93IGdldCB6CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgRkxlbmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCkpIHsKKyAgICAgICAgICAg
IHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KQEAgLTQ2ODAsMTYgKzQ2ODksMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRy
PEMKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7Ci0gICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhT
dGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0
YXRlLCBGTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHBhcnNl
ZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwotICAgIHZhbHVlID0gYXJn
cy5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkgeworICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZShh
cmd1bWVudFdpdGhTdGF0ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IGFyZ3Mu
bmV4dCgpOworICAgIGlmICghbmV4dFZhbHVlKSB7CiAgICAgICAgIC8vIFRoZSBsYXN0IG51bWJl
ciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3ZSdyZSBkb25lLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKKyAg
ICBpZiAoIWlzQ29tbWEobmV4dFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGFy
Z3MubmV4dCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDcxNywyMiArNDcyNiwyNCBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
KQogICAgICAgICBpbnQgbnVtU3RlcHM7CiAgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxz
ZTsKIAotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVu
dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGSW50ZWdlcikpCisg
ICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICAg
ICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsK
KyAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZJbnRlZ2VyKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9JbnRl
Z2VyKGN1cnJlbnRWYWx1ZS0+ZlZhbHVlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIG51bVN0ZXBzID0gY2xhbXBUb0lu
dGVnZXIoYXJndW1lbnQtPmZWYWx1ZSk7CiAgICAgICAgIGlmIChudW1TdGVwcyA8IDEpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4
dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAotICAgICAgICBpZiAoY3Vy
cmVudFZhbHVlKSB7CisgICAgICAgIGlmIChhcmd1bWVudCkgewogICAgICAgICAgICAgLy8gVGhl
cmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAg
ICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgaWYgKCFpc0Nv
bW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50
VmFsdWUtPmlkICE9IENTU1ZhbHVlU3RhcnQgJiYgY3VycmVudFZhbHVlLT5pZCAhPSBDU1NWYWx1
ZUVuZCkKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICAgICAg
aWYgKGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NW
YWx1ZUVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHN0
ZXBBdFN0YXJ0ID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVN0YXJ0OworICAgICAgICAg
ICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShu
dW1TdGVwcywgc3RlcEF0U3RhcnQpOwpAQCAtNDg5MywyMyArNDkwNCwyNSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWYWxpZEN1c3RvbUlkZW50KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
IC8vIFRoZSBmdW5jdGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBp
biA8Z3JpZC1saW5lPiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9yIHdpdGggJ3NwYW4nKS4K
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlv
bihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGSW50
ZWdlcikgJiYgdmFsdWUtPmZWYWx1ZSkgewotICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgaXNWYWxpZEN1c3RvbUlkZW50KCp2YWx1
ZSkpIHsKLSAgICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1Zh
bHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0
ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlk
VW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIpICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCku
ZlZhbHVlKSB7CisgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICBpZiAobmV4dFZhbHVlICYmIGlzVmFsaWRD
dXN0b21JZGVudCgqbmV4dFZhbHVlKSkgeworICAgICAgICAgICAgZ3JpZExpbmVOYW1lID0gY3Jl
YXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7CiAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGlmIChpc1ZhbGlkQ3VzdG9tSWRlbnQoKnZhbHVlKSkgewotICAgICAgICBncmlkTGluZU5h
bWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVl
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyKSAmJiB2YWx1ZS0+ZlZhbHVlKSB7Ci0gICAg
ICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVl
KTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgaWYgKGlzVmFsaWRDdXN0
b21JZGVudCh2YWx1ZVdpdGhTdGF0ZSkpIHsKKyAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRl
UHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgICAgICBpZiAoQ1NTUGFy
c2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIG5leHRWYWx1ZVdpdGhTdGF0ZSgqbmV4dFZhbHVlKTsK
KyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQobmV4dFZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlcikg
JiYgbmV4dFZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgICAgICAgICAg
bnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5leHRWYWx1ZVdpdGhT
dGF0ZSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MjkzLDEzICs1
MzA2LDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tM
aXN0KCkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1JlcGVhdEZ1bmN0aW9uKENTU1Zh
bHVlTGlzdCYgbGlzdCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJn
dW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFsaWRVbml0KCphcmd1bWVudHMt
PnZhbHVlQXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFs
dWVBdCgxKSkpCisgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5zaXplKCkgPCAzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJz
dFZhbHVlV2l0aFN0YXRlKCphcmd1bWVudHMtPnZhbHVlQXQoMCkpOworICAgIGlmICghdmFsaWRV
bml0KGZpcnN0VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFy
Z3VtZW50cy0+dmFsdWVBdCgxKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VS
VChhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSA+IDApOworICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIEFTU0VSVChmaXJzdFZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlID4gMCk7CiAgICAgLy8gSWYgYXJndW1lbnRzLT52YWx1
ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVuIHJlcGV0aXRpb25zIGJlY29tZXMgMCBkdXJp
bmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdoeSB3ZQogICAgIC8vIGNsYW1wIGl0IGRvd24g
dG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0eXBlIGNhc3RpbmcuCi0gICAgdW5zaWduZWQg
cmVwZXRpdGlvbnMgPSBjbGFtcFRvPHVuc2lnbmVkPihhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZW
YWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOworICAgIHVuc2lnbmVkIHJlcGV0aXRpb25zID0gY2xh
bXBUbzx1bnNpZ25lZD4oZmlyc3RWYWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgMCwga0dy
aWRNYXhUcmFja3MpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgYXJndW1lbnRzLT5u
ZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCkBAIC01MzczLDEzICs1MzkxLDEz
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tTaXplKENT
U1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0CiAgICAgcmV0dXJuIHBhcnNlR3JpZEJyZWFkdGgo
Y3VycmVudFZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUpCitQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFs
dWVXZWJraXRNaW5Db250ZW50IHx8IGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZVdlYmtpdE1h
eENvbnRlbnQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoY3VycmVudFZhbHVlLmlkKTsKKyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJr
aXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5p
ZCk7CiAKLSAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19GUikgewotICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gY3VycmVudFZhbHVlLmZWYWx1ZTsK
KyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKSB7CisgICAg
ICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CiAKICAgICAgICAgLy8gRnJhY3Rp
b25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KICAgICAgICAgaWYgKGZsZXhW
YWx1ZSA8PSAwKQpAQCAtNTM4OCwxMCArNTQwNiwxMSBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIGN1cnJl
bgogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZmxleFZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKICAgICB9CiAKLSAgICBpZiAoIXZhbGlkVW5pdChj
dXJyZW50VmFsdWUsIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgIENTU1BhcnNl
clZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZVdpdGhTdGF0ZSwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShjdXJyZW50VmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoU3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRBdXRv
Rmxvd0lkKENTU1ZhbHVlSUQgaWQpCkBAIC01NTYwLDExICs1NTc5LDEyIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAg
ICAgICBhcmcgPSBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKIAotICAgICAgICAg
ICAgICAgIHZhbGlkID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmcs
IEZMZW5ndGgpOworICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ1dp
dGhTdGF0ZSgqYXJnKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+aWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkVW5pdChhcmdXaXRoU3RhdGUsIEZMZW5ndGgpOwogICAgICAgICAgICAg
ICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1Zh
bHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmcpOworICAgICAgICAgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1
dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoU3RhdGUpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1v
dW50KTsKQEAgLTU3NDAsMTIgKzU3NjAsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNo
YXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBSZWZQdHI8UmVj
dD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwogICAgIGlu
dCBpID0gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVu
dCgpOwotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKLSAgICAgICAgdmFsaWQgPSBjdXJyZW50
VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxl
bmd0aCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwor
ICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBh
cmd1bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICB2YWxpZCA9IGFyZ3VtZW50LT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3Ro
KTsKICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYXJndW1lbnQtPmlkID09IENTU1Zh
bHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKTsKICAg
ICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNldFRvcChsZW5ndGgpOwogICAg
ICAgICBlbHNlIGlmIChpID09IDEpCkBAIC01NzU0LDEwICs1Nzc1LDEwIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obGVuZ3RoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmVjdC0+c2V0TGVmdChsZW5ndGgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgYXJncy0+c2l6ZSgpID09
IDcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlID09ICcsJykgewotICAgICAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykg
eworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgeworICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTgyNCwxMCArNTg0
NSwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJv
dW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaQogICAgICAgICBpZiAoaSAtIGluZGV4QWZ0
ZXJTbGFzaCA+PSA0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYg
KCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQorICAgICAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgICAg
IGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogCiAgICAgICAgIGlmICghaW5kZXhB
ZnRlclNsYXNoKQogICAgICAgICAgICAgcmFkaWlbMF1baV0gPSByYWRpdXM7CkBAIC01ODY0LDEw
ICs1ODg2LDExIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJh
c2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyCiAgICAgICAgIH0KIAogICAgICAg
ICBVbml0cyB1bml0RmxhZ3MgPSBGTGVuZ3RoIHwgRlBlcmNlbnQ7Ci0gICAgICAgIGlmICghdmFs
aWRVbml0KCphcmd1bWVudCwgdW5pdEZsYWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0
KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJn
dW1lbnQpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdEZs
YWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwogICAgICAgICBh
cmd1bWVudCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIApAQCAtNTkwMiwxMCArNTkyNSwxMSBAQCBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVSYWRpdXMo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUNsb3Nl
c3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RTaWRlKQogICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIAotICAg
IGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKKyAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgaWYg
KCF2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoU3RhdGUpOwogfQogCiBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKQEAg
LTYwMTksMTQgKzYwNDMsMTggQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6
OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0JgogICAgIENTU1BhcnNl
clZhbHVlKiBhcmd1bWVudFggPSBhcmd1bWVudDsKICAgICB3aGlsZSAoYXJndW1lbnRYKSB7CiAK
LSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50WCwgRkxlbmd0aCB8IEZQZXJjZW50KSkK
KyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRYV2l0aFN0YXRlKCphcmd1
bWVudFgpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFhXaXRoU3RhdGUsIEZMZW5n
dGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCphcmd1bWVudFgpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5n
dGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRYV2l0aFN0YXRlKTsKIAog
ICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0gYXJncy5uZXh0KCk7Ci0gICAgICAg
IGlmICghYXJndW1lbnRZIHx8ICF2YWxpZFVuaXQoKmFyZ3VtZW50WSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKKyAgICAgICAgaWYgKCFhcmd1bWVudFkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRZV2l0aFN0YXRlKCph
cmd1bWVudFkpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFlXaXRoU3RhdGUsIEZM
ZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKCphcmd1bWVudFkpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHlM
ZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0aFN0YXRlKTsK
IAogICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxlYXNlKCksIHlMZW5ndGgu
cmVsZWFzZSgpKTsKIApAQCAtNjA4MSw3ICs2MTA5LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkK
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICAgICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3hW
YWx1ZSh2YWx1ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewotICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFs
dWVJZCwgKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwpAQCAtNjEwMywxMyArNjEzMSwxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIAogICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1Zh
bHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
a2V5d29yZFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZTsK
IAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBrZXl3b3JkVmFs
dWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsIHZhbHVlKTsKICAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRWYWx1ZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJ
ZCk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwpAQCAtNjEyOSw3
ICs2MTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNsaXBQYXRo
KCkKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VWYWxpZFByaW1pdGl2ZSh2YWx1ZUlk
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWVJZCk7CiAgICAgfQogICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC02MzQ5
LDMxICs2Mzc0LDMxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNl
Rm9udEZhbWlseSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVIZWlnaHQoYm9vbCBpbXBv
cnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBD
U1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlk
UHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gbm9ybWFsIHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8
IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8
fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZSksIGltcG9ydGFudCk7CisgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFByaW1pdGl2ZShp
ZCwgdmFsdWVXaXRoU3RhdGUpLCBpbXBvcnRhbnQpOwogICAgIHJldHVybiB2YWxpZFByaW1pdGl2
ZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZl
ID0gZmFsc2U7CiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxl
bmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYgKGlkID49IENTU1ZhbHVlWHhT
bWFsbCAmJiBpZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgIGVsc2UKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUs
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNo
b3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFy
c2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdp
dGhTdGF0ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZlOwogfQogCkBA
IC02NDM5LDggKzY0NjQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCksIGltcG9ydGFudCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7Ci0gICAgICAgIGludCB3ZWlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNW
YWx1ZSkpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVl
KTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1F1aXJrc01vZGUpKSB7CisgICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAgICBpZiAoISh3ZWlnaHQgJSAx
MDApICYmIHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkgewogICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZCh3ZWlnaHQpKSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjkzNSwxMiArNjk2MSw5IEBAIGJv
b2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlw
ZSYgbmFtZSwgYm9vbCBzdHJpY3QpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAotaW5saW5l
IGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMpCitpbmxpbmUgZG91Ymxl
IENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdp
dGhTdGF0ZSkKIHsKLSAgICBkb3VibGUgcmVzdWx0ID0gbV9wYXJzZWRDYWxjdWxhdGlvbiA/IG1f
cGFyc2VkQ2FsY3VsYXRpb24tPmRvdWJsZVZhbHVlKCkgOiB2YWx1ZS5mVmFsdWU7Ci0gICAgaWYg
KHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpCi0gICAgICAgIG1fcGFyc2Vk
Q2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZh
bHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkgPyB2YWx1ZVdpdGhTdGF0ZS5wYXJzZWRD
YWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFs
dWU7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSkKQEAgLTY5NTIsMTYgKzY5NzUsMTYgQEAgYm9vbCBDU1NQYXJzZXI6OmlzQ2FsY3VsYXRp
b24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW1heCgiKSk7CiB9CiAKLWlubGluZSBp
bnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGJvb2wgaXNQZXJjZW50OwogICAgIAotICAg
IGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKQotICAgICAgICBpc1BlcmNlbnQgPSBtX3BhcnNlZENh
bGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OworICAgIGlmICh2YWx1ZVdpdGhT
dGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpKQorICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhT
dGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OwogICAg
IGVsc2UKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgICAgIGlzUGVyY2VudCA9IHZhbHVlV2l0aFN0YXRlLnZh
bHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CiAKLSAgICBj
b25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpOworICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNlZERvdWJs
ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgCiAgICAgaWYgKGRvdWJsZVZhbHVlIDw9IDAuMCkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC02OTgxLDM0ICs3MDA0LDM0IEBAIGlubGluZSBpbnQgQ1NTUGFy
c2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBpbnQqIGNv
bG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFy
Z3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3Vy
cmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IGZpcnN0QXJndW1lbnRXaXRoU3RhdGUoKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5p
dFR5cGUgPSBGVW5rbm93bjsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlw
ZQotICAgIGlmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1v
ZGUpKQorICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdpdGhTdGF0ZSwgRkludGVnZXIs
IENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJbnRlZ2VyOwotICAgIGVsc2Ug
aWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisg
ICAgZWxzZSBpZiAodmFsaWRVbml0KGZpcnN0QXJndW1lbnRXaXRoU3RhdGUsIEZQZXJjZW50LCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKICAgICBlbHNlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRG
cm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgY29sb3JBcnJheVswXSA9IGNvbG9ySW50RnJv
bVZhbHVlKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
MzsgaSsrKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3Vy
cmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0
b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50
LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZh
bHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZh
bHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVl
LCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlk
VW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9t
VmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZy
b21WYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAgICAgfQogICAgIGlmIChwYXJzZUFscGhhKSB7
Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJl
bnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVl
LT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVu
dCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcs
JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJn
cy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVy
LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1l
bnRXaXRoU3RhdGUoKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3Vt
ZW50V2l0aFN0YXRlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKCpjdXJy
ZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICBkb3VibGUgZG91Ymxl
VmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoU3RhdGUpOwogICAgICAgICAvLyBDb252
ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGlu
IHRoZSByYW5nZSBbMCwgMjU2KSwKICAgICAgICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRp
b24gYWNyb3NzIGFsbCAyNTYgdmFsdWVzLgogICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGlj
X2Nhc3Q8aW50PihzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91Ymxl
VmFsdWUpKSAqIG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CkBAIC03MDI0LDI5ICs3MDQ3LDI5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIGludCogY29sb3JBcnJheSwgYm9vCiBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0
ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNl
QWxwaGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1
cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdEFyZ3VtZW50V2l0aFN0
YXRlKCphcmdzLT5jdXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBp
ZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICBpZiAoIXZhbGlkVW5pdChmaXJzdEFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIG5vcm1hbGl6ZSB0aGUgSHVl
IHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFuZCAxLjAKLSAgICBjb2xvckFy
cmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUoKmN1cnJlbnRWYWx1ZSwg
UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwLjA7Cisg
ICAgY29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKGZpcnN0
QXJndW1lbnRXaXRoU3RhdGUpKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOwogICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlm
IChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9w
ZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlk
VW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOwor
ICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRlBlcmNlbnQsIENTU1N0
cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5
W2ldID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEwMCwgcGFyc2VkRG91
YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSkgLyAxMDAuMDsgLy8g
bmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKKyAgICAgICAgY29sb3JBcnJheVtp
XSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAsIHBhcnNlZERvdWJs
ZShhcmd1bWVudFdpdGhTdGF0ZSkpKSAvIDEwMC4wOyAvLyBuZWVkcyB0byBiZSB2YWx1ZSBiZXR3
ZWVuIDAgYW5kIDEuMAogICAgIH0KICAgICBpZiAocGFyc2VBbHBoYSkgewotICAgICAgICBjdXJy
ZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
IT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcs
JykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4
dCgpOworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9k
ZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCph
cmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwg
Rk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4o
MSwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSk7
CisgICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRv
dWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxNTgsOSArNzE4MSw5IEBAIHN0cnVjdCBTaGFkb3dQYXJzZUNv
bnRleHQgewogICAgICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJr
aXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21taXRMZW5ndGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQg
Y29tbWl0TGVuZ3RoKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKICAg
ICB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBt
X3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAgICBpZiAoYWxsb3dY
KSB7CiAgICAgICAgICAgICB4ID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwpAQCAtNzIzOCw2
ICs3MjYxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGFk
b3coQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIEMKICAgICBTaGFkb3dQYXJzZUNvbnRl
eHQgY29udGV4dChwcm9wSWQsICp0aGlzKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAg
ICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkpKSB7CisgICAgICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIC8vIENo
ZWNrIGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlWYWx1
ZSAhPSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewpAQCAtNzI1MCwyMiArNzI3NCwyMiBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJz
ZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCiAgICAgICAg
ICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0
KCp2YWx1ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKSB7CiAgICAg
ICAgICAgICAvLyBXZSByZXF1aXJlZCBhIGxlbmd0aCBhbmQgZGlkbid0IGdldCBvbmUuIEludmFs
aWQuCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWxsb3dMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQmx1ciByYWRpdXMgbXVzdCBi
ZSBub24tbmVnYXRpdmUuCi0gICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0JsdXIgJiYgIXZh
bGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEEgbGVuZ3RoIGlzIGFsbG93ZWQgaGVyZS4g
IENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQuY29t
bWl0TGVuZ3RoKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdExlbmd0aCh2YWx1
ZVdpdGhTdGF0ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5z
ZXQpIHsKICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd1N0eWxlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxlKCp2
YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxlKHZhbHVlV2l0aFN0YXRlKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG90aGVyIHR5cGUgb2Yg
dmFsdWUgdGhhdCdzIG9rIGlzIGEgY29sb3IgdmFsdWUuCiAgICAgICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlZENvbG9yOwpAQCAtNzMyNSw5ICs3MzQ5LDEwIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGlmICghY3VycmVudFZhbHVlKQogICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgY3VycmVudFZhbHVlV2l0aFN0
YXRlKCpjdXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWVX
aXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3VycmVudFZh
bHVlKTsKKyAgICAgICAgb2Zmc2V0ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGN1cnJl
bnRWYWx1ZVdpdGhTdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gTm93IGZvciB0aGUgbWFzay4KQEAg
LTczNTMsMjAgKzczNzgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChDU1NQYXJzZXJW
YWx1ZUxpc3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZmxleEJhc2lzOwogCiAgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9
IGFyZ3MuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTnVt
YmVyIHwgRk5vbk5lZykpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1l
bnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdChhcmd1bWVudFdp
dGhTdGF0ZSwgRk51bWJlciB8IEZOb25OZWcpKSB7CiAgICAgICAgICAgICBpZiAoZmxleEdyb3cg
PT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3JvdyA9IHBhcnNlZERvdWJsZSgq
YXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICAgICAgICAgIGZsZXhH
cm93ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGZsZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4U2hyaW5r
ID0gcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7Ci0gICAg
ICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENh
bGNWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gcGFyc2VkRG91YmxlKGFy
Z3VtZW50V2l0aFN0YXRlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFwYXJzZWREb3VibGUoYXJn
dW1lbnRXaXRoU3RhdGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gZmxleCBvbmx5IGFsbG93cyBh
IGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFs
dWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICBmbGV4QmFzaXMgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyAz
IG51bWJlcnMgd2l0aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2YWx1ZSBpcyAwLiBFLmcuLCBmbGV4
OjEgMSAxIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3VtZW50LT5pZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxleEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2
ZShhcmd1bWVudC0+aWQsICphcmd1bWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoIWZsZXhCYXNp
cyAmJiAoYXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
aWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkp
CisgICAgICAgICAgICBmbGV4QmFzaXMgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGFyZ3VtZW50V2l0
aFN0YXRlLnZhbHVlKCkuaWQsIGFyZ3VtZW50V2l0aFN0YXRlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBOb3QgYSB2YWxpZCBhcmcgZm9yIGZsZXguCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC03NjM1LDkgKzc2NjEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0Zp
bmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAg
ICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21t
aXROdW1iZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogICAgIHsK
LSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFy
c2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBpZiAoIW1fdG9wKQogICAg
ICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVsc2Ug
aWYgKCFtX3JpZ2h0KQpAQCAtNzcwMiw5ICs3NzI4LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUJvcmRlckltYWdlU2xpY2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NCb3JkZXJJ
bWFnCiAgICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0
aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIC8vIEZJWE1FIGNhbGMoKSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVlcyBhcmUgbm90IGNyZWF0ZWQgeWV0
LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9uKCp2
YWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQs
IENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcigqdmFs
dWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9u
KHZhbHVlV2l0aFN0YXRlKSAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJbnRlZ2VyIHwg
Rk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICAgICAgY29udGV4
dC5jb21taXROdW1iZXIodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRl
eHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRmlsbCkKICAgICAgICAgICAg
IGNvbnRleHQuY29tbWl0RmlsbCgpOwogICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkg
ewpAQCAtNzc0NiwxMyArNzc3MywxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0ZpbmFsQ29t
bWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAgICB2b2lk
IGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21taXROdW1i
ZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogICAgIHsKICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAgaWYg
KHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKyAgICAgICAg
aWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBy
aW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAgICBpZiAoIW1fdG9wKQogICAg
ICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CkBAIC03ODE0LDEwICs3
ODQxLDExIEBAIHByaXZhdGU6CiBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVF1YWQo
VW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQogewog
ICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwotICAgIHdoaWxlICgoY3VycmVudFZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIo
KSAmJiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUp
IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgewotICAgICAgICAgICAgY29u
dGV4dC5jb21taXROdW1iZXIoKmN1cnJlbnRWYWx1ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlOworICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgeworICAg
ICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqdmFsdWUpOworICAg
ICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICh2YWxpZFVuaXQodmFsdWVXaXRoU3Rh
dGUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1
dG8pKSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhTdGF0ZSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODc0LDEwICs3OTAyLDExIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGlmIChpIC0gaW5kZXhBZnRlclNsYXNoID49IDQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1
ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRl
KTsKIAogICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewogICAgICAgICAgICAgcmFkaWlb
MF1baV0gPSByYWRpdXM7CkBAIC03OTIwLDIwICs3OTQ5LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQogICAgIGlmIChudW0gIT0gMykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUmIGx2YWx1ZSA9ICptX3ZhbHVl
TGlzdC0+dmFsdWVBdCgwKTsKICAgICBDU1NQYXJzZXJWYWx1ZSYgb3AgPSAqbV92YWx1ZUxpc3Qt
PnZhbHVlQXQoMSk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHJ2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+
dmFsdWVBdCgyKTsKIAogICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihvcCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghdmFsaWRVbml0KGx2YWx1ZSwgRk51bWJlciB8
IEZOb25OZWcpIHx8ICF2YWxpZFVuaXQocnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+dmFs
dWVBdCgwKSk7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgcnZhbHVlV2l0aFN0YXRlKCpt
X3ZhbHVlTGlzdC0+dmFsdWVBdCgyKSk7CisgICAgaWYgKCF2YWxpZFVuaXQobHZhbHVlV2l0aFN0
YXRlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChydmFsdWVXaXRoU3RhdGUsIEZO
dW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFsdmFs
dWUuZlZhbHVlIHx8ICFydmFsdWUuZlZhbHVlKQorICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
aGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIGlmICghbHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkuZlZhbHVlIHx8ICFydmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0
aW8sIENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGx2
YWx1ZS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZS5mVmFsdWUpKSwgaW1w
b3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBD
U1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChsdmFsdWVX
aXRoU3RhdGUudmFsdWUoKS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpLCBpbXBvcnRhbnQpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC04MTI3LDkgKzgxNTcsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRl
ZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAv
LyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IGEgbnVtZXJpYyByYWRp
dXMuCiAgICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQp
IHsKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMuCiAgICAgICAgIGlmICghYXJn
dW1lbnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdy
YWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJn
dW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhl
IGZpcnN0IHJhZGl1cy4KICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CkBAIC04MTY0
LDkgKzgxOTYsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENT
U1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KICAgICAgICAg
aWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwogICAgIH0KIAogICAgIC8vIFdl
IG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3BzICgwIG9yIG1vcmUpLgpAQCAtODIz
NiwxMSArODI3MCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkTGluZWFyR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBpZiAoIWFyZ3VtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRX
aXRoU3RhdGUoKmFyZ3VtZW50KTsKIAogICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAg
ICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkFuZ2xl
LCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICBpZiAodmFsaWRVbml0KGFyZ3VtZW50
V2l0aFN0YXRlLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0
QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAK
ICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CkBAIC04
Mzc3LDggKzg0MTIsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogCiAgICAgaWYgKCFzaGFwZVZhbHVlICYmICFz
aXplVmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IGhTaXplV2l0aFN0YXRlKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2YWxpZFVuaXQoaFNpemVX
aXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIGhvcml6b250YWxT
aXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhTaXplV2l0aFN0YXRlKTsKICAgICAg
ICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04Mzg2LDggKzg0MjIsOSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2
U2l6ZVdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICBpZiAodmFsaWRVbml0KHZTaXplV2l0
aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNpemUg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodlNpemVXaXRoU3RhdGUpOwogCiAgICAgICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQp
CkBAIC04NDE4LDI4ICs4NDU1LDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgaWYg
KCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENT
U1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWFyZ3Vt
ZW50KQorICAgIGlmICghYXJncy0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdEFyZ3VtZW50V2l0aFN0YXRlKCphcmdz
LT5jdXJyZW50KCkpOworCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExv
b2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0
cmljdE1vZGUpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdp
dGhTdGF0ZSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICByZXN1bHQtPnNldEFu
Z2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFyZ3VtZW50V2l0aFN0YXRlKSk7
CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UICYmIGVxdWFsSWdub3JpbmdDYXNlKCphcmd1bWVudCwgInRvIikpIHsKKyAgICB9IGVsc2Ug
aWYgKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmlyc3RBcmd1bWVudFdpdGhTdGF0
ZSwgInRvIikpIHsKICAgICAgICAgLy8gdG8gWyBbbGVmdCB8IHJpZ2h0XSB8fCBbdG9wIHwgYm90
dG9tXSBdCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFy
Z3VtZW50KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dEFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOworICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVuZFgsIGVuZFk7CiAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247CiAgICAgICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5
d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVG
cm9tU2lkZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYg
KCFsb2NhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQ0OCwxMSArODQ4
NiwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBlbmRZID0gbG9jYXRpb247CiAKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIG5leHRBcmd1bWVudCA9IGFyZ3MtPm5leHQo
KTsKKyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlz
SG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKm5l
eHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CiAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVuZFgpCkBA
IC04NTA2LDYgKzg1NDQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgIC8vIFsgZWxs
aXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0gXSB8CiAgICAgLy8gWyBbIGNp
cmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdp
dGhTdGF0ZSgqYXJndW1lbnQpOwogICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICAgICAgYm9vbCBiYWRJZGVudCA9IGZh
bHNlOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+aWQpIHsKQEAgLTg1MzMsMTggKzg1
NzIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KCphcmd1bWVudCwg
Rkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICB9IGVsc2UgaWYgKHZhbGlkVW5pdChhcmd1
bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogCiAgICAgICAgICAgICBpZiAo
c2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAKICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTaXpl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2U2l6ZVdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAg
ICAgICAgaWYgKHZhbGlkVW5pdCh2U2l6ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
eworICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2U2l6ZVdpdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAg
ICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgICAgIGlmICghYXJndW1l
bnQpCkBAIC04NjA4LDM4ICs4NjQ4LDM5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdy
YWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQsIGJvb2wgZXhwZWN0Q29tbWEp
CiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50
KCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKICAg
ICBib29sIHByZXZpb3VzU3RvcFdhc01pZHBvaW50ID0gdHJ1ZTsKIAogICAgIC8vIE5vdyBsb29r
IGZvciBjb2xvciBzdG9wcy4KLSAgICB3aGlsZSAoY3VycmVudFZhbHVlKSB7CisgICAgd2hpbGUg
KHZhbHVlKSB7CiAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQg
c3RvcC4KICAgICAgICAgaWYgKGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29t
bWEoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSB2
YWx1ZUxpc3QubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUpCisgICAgICAg
ICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDxj
b2xvci1zdG9wPiA9IDxjb2xvcj4gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdPwogICAgICAg
ICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwotICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJz
ZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICpjdXJyZW50VmFsdWUpOworICAgICAgICBz
dG9wLm1fY29sb3IgPSBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICp2YWx1ZSk7
CiAgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKSB7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNT
dG9wV2FzTWlkcG9pbnQpIC8vIDIgbWlkcG9pbnRzIGluIGEgcm93IGlzIG5vdCBhbGxvd2VkLiBU
aGlzIGFsc28gY2F0Y2hlcyBzdGFydGluZyB3aXRoIGEgbWlkcG9pbnQuCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBzdG9wLmlzTWlkcG9pbnQgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0
KCk7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CiAKICAgICAgICAgcHJl
dmlvdXNTdG9wV2FzTWlkcG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7CiAKLSAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFsdWUpOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgIGlmICh2YWx1ZSkg
eworICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKnZh
bHVlKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgICAgICAgICAgICAgIHZh
bHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcC5pc01p
ZHBvaW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtOTIx
OSwyOSArOTI2MCwzMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgIENTU1BhcnNlclZhbHVlKiBh
cmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICB1bnNpZ25lZCBhcmdOdW1iZXIgPSAwOwog
ICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBh
cmd1bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOwogICAgICAgICBDU1NQYXJzZXI6OlVuaXRzIHVu
aXQgPSBpbmZvLnVuaXQoKTsKIAogICAgICAgICBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9
PSAzKSB7CiAgICAgICAgICAgICAvLyA0dGggcGFyYW0gb2Ygcm90YXRlM2QoKSBpcyBhbiBhbmds
ZSByYXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVyLCB2YWxpZGF0ZSBpdCBhcyBzdWNoCi0gICAgICAg
ICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCisg
ICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkFuZ2xlLCBDU1NT
dHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBl
bHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
M0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDIpIHsKICAgICAgICAgICAgIC8v
IDNyZCBwYXJhbSBvZiB0cmFuc2xhdGUzZCgpIGNhbm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAg
ICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkp
CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCwg
Q1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewogICAgICAgICAgICAgLy8g
MXN0IHBhcmFtIG9mIHRyYW5zbGF0ZVooKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0gICAgICAg
ICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQor
ICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZMZW5ndGgsIENT
U1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAgICAgICAvLyAx
c3QgcGFyYW0gb2YgcGVyc3BlY3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciAo
ZGVwcmVjYXRlZCkgb3IgbGVuZ3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAg
ICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3Ro
IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIHVuaXQsIENTU1N0
cmljdE1vZGUpKQorICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3Rh
dGUsIHVuaXQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0
aW9uLgotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKTsKIAogICAgICAgICBh
cmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhcmd1bWVudCkKQEAgLTkzMTEs
MjEgKzkzNTMsMjIgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKQorICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3Rh
dGUoKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50
V2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRvdWJsZSBhbW91bnQgPSB2YWx1ZS5mVmFsdWU7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgICAgICBk
b3VibGUgYW1vdW50ID0gYXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWU7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFNhdHVyYXRlIGFuZCBDb250cmFzdCBhbGxvdyB2YWx1ZXMg
b3ZlciAxMDAlLgogICAgICAgICAgICAgaWYgKGZpbHRlclR5cGUgIT0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgJiYgZmlsdGVy
VHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb24pIHsK
LSAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dlZCA9IHZhbHVlLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMTAwLjAgOiAxLjA7CisgICAgICAgICAgICAg
ICAgZG91YmxlIG1heEFsbG93ZWQgPSBhcmd1bWVudFdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMTAwLjAgOiAxLjA7CiAgICAgICAg
ICAgICAgICAgaWYgKGFtb3VudCA+IG1heEFsbG93ZWQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGFtb3VudCwgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpKTsKKyAgICAgICAgICAgIGZp
bHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYW1vdW50LCBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPihhcmd1bWVudFdpdGhTdGF0ZS52
YWx1ZSgpLnVuaXQpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTMz
NSwxMSArOTM3OCwxMiBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqYXJncy5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdz
LmN1cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0
ZSwgRk51bWJlciB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBkb2Vzbid0IGhhbmRsZSBjYWxjdWxhdGVkIHZhbHVlcy4KKyAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYXJndW1lbnRXaXRoU3Rh
dGUudmFsdWUoKS5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXM+KGFyZ3VtZW50V2l0aFN0YXRlLnZhbHVlKCkudW5pdCkpKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC05MzQ5LDExICs5MzkzLDExIEBAIFBhc3NSZWZQdHI8V2ViS2l0
Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENT
U1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAgIGlm
IChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50ID0g
KmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQsIEZB
bmdsZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0
ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAotICAgICAgICAgICAgZmlsdGVy
VmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnQpKTsKKyAg
ICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtOTM2MywxMSArOTQwNywxMSBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsK
LSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBhcmd1bWVudCA9ICphcmdzLmN1cnJlbnQoKTsK
LSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50LCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1
bWVudFdpdGhTdGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnRXaXRoU3RhdGUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnQpKTsKKyAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z3VtZW50V2l0aFN0YXRlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
OTU0NCw4ICs5NTg4LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1P
cmlnaW5aOiB7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0KCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgICAgICBDU1NQYXJz
ZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CisgICAgICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoKSkKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhTdGF0ZSk7CiAgICAgICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTgwMSw4ICs5ODQ2LDkgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRleHRJbmRlbnQoKQogCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICB3aGls
ZSAodmFsdWUpIHsKLSAgICAgICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpKTsKKyAgICAgICAgQ1NTUGFy
c2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKnZhbHVlKTsKKyAgICAgICAgaWYgKCFo
YXNMZW5ndGhPclBlcmNlbnRhZ2UgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgICAgICBoYXNMZW5ndGhPclBl
cmNlbnRhZ2UgPSB0cnVlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKQEAgLTk5
NzgsMjEgKzEwMDI0LDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TGlnYXR1
cmVzKGJvb2wgaW1wb3J0YW50KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIENhbGN1bGF0aW9uUGVy
bWl0dGVkVmFsdWVSYW5nZSByYW5nZSkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSwgQ2FsY3VsYXRpb25QZXJt
aXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQogewotICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVl
KSk7CisgICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoU3RhdGUpKTsKICAgICAKLSAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
KyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoIW1fcGFyc2VkQ2FsY3VsYXRpb24pOwot
ICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mdW5j
dGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdlKTsKLSAgICAKLSAgICBpZiAoIW1fcGFyc2VkQ2FsY3Vs
YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIXZhbHVlV2l0aFN0YXRl
LnBhcnNlZENhbGN1bGF0aW9uKCkpOworICAgIHZhbHVlV2l0aFN0YXRlLnNldFBhcnNlZENhbGN1
bGF0aW9uKENTU0NhbGNWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZnVuY3Rp
b24tPm5hbWUsICphcmdzLCByYW5nZSkpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiAhIXZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCk7CiB9CiAKICNkZWZpbmUg
RU5EX1RPS0VOIDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAwZTI3NDQ5NDE2ZTViN2M3Y2Rh
MjA3OTRmNjc5ZDJjNzMwNzAyODQwLi44YzNkMGZhMmQ5Nzk0NWI1YmM4MDJhMmE2YWQwOGU4M2Zh
OWYwZWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC01Niw2ICs1Niw3IEBAIGNsYXNzIENT
U1ZhbHVlTGlzdDsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NCYXNpY1NoYXBlSW5z
ZXQ7CiBjbGFzcyBDU1NHcmlkTGluZU5hbWVzVmFsdWU7CitjbGFzcyBDU1NQYXJzZXJWYWx1ZVdp
dGhTdGF0ZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0YWJs
ZVN0eWxlUHJvcGVydGllczsKQEAgLTkyLDcgKzkzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3Qg
PSBmYWxzZSk7CiAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9y
LCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1Zh
bHVlTGlzdD4gcGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJ
RCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlJik7CiAgICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMqLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiwgU3R5
bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgc3RhdGljIFBhc3NSZWY8
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24oY29u
c3QgU3RyaW5nJiwgRWxlbWVudCopOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBw
YXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CkBAIC0yODAsNyArMjgxLDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVGV4dEluZGVudCgpOwogICAgIAogICAg
IGJvb2wgcGFyc2VMaW5lQm94Q29udGFpbihib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJz
ZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJh
bmdlKTsKKyAgICBib29sIHBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUm
LCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UpOwogCiAgICAgYm9vbCBwYXJzZUZvbnRG
ZWF0dXJlVGFnKENTU1ZhbHVlTGlzdCYpOwogICAgIGJvb2wgcGFyc2VGb250RmVhdHVyZVNldHRp
bmdzKGJvb2wgaW1wb3J0YW50KTsKQEAgLTQwMiw3ICs0MDMsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjcmVhdGVWaWV3cG9ydFJ1bGUoKTsKICNlbmRpZgogCi0g
ICAgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KENTU1BhcnNlclZhbHVlJik7CisgICAgUGFzc1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJik7CiAgICAgUGFz
c1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFy
c2VyVmFsdWUmKTsKIAogICAgIHN0YXRpYyBVUkwgY29tcGxldGVVUkwoY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsKTsKQEAgLTQ5Niw4ICs0OTcsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCB1bnNpZ25lZCBwcmVm
aXhMZW5ndGgsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWduZWQgc3Vm
Zml4TGVuZ3RoKTsKICAgICBib29sIGluU2hvcnRoYW5kKCkgY29uc3QgeyByZXR1cm4gbV9pblBh
cnNlU2hvcnRoYW5kOyB9CiAKLSAgICBib29sIHZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWUmKTsK
LSAgICBib29sIHZhbGlkSGVpZ2h0KENTU1BhcnNlclZhbHVlJik7CisgICAgYm9vbCB2YWxpZFdp
ZHRoKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJik7CisgICAgYm9vbCB2YWxpZEhlaWdodChDU1NQ
YXJzZXJWYWx1ZVdpdGhTdGF0ZSYpOwogCiAgICAgdm9pZCBkZWxldGVGb250RmFjZU9ubHlWYWx1
ZXMoKTsKIApAQCAtNTc2LDggKzU3Nyw2IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBtX3JlY3ljbGVk
U2VsZWN0b3JWZWN0b3I7CiAKLSAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBtX3BhcnNlZENhbGN1
bGF0aW9uOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gbV9zdXBw
b3J0c1J1bGVEYXRhU3RhY2s7CiAKICAgICAvLyBkZWZpbmVzIHVuaXRzIGFsbG93ZWQgZm9yIGEg
Y2VydGFpbiBwcm9wZXJ0eSwgdXNlZCBpbiBwYXJzZVVuaXQKQEAgLTYxMSwxNiArNjEwLDE2IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc0xvZ2dpbmdFcnJvcnMoKTsKICAgICB2b2lkIGxvZ0Vycm9y
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIpOwogCi0gICAgYm9vbCB2YWxp
ZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBSZWxlYXNlUGFyc2VkQ2Fs
Y1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVl
KTsKKyAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
JiwgVW5pdHMpOwogCiAgICAgYm9vbCBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJz
ZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKIAotICAgIGlubGluZSBib29sIHZhbGlk
VW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsZWFzZVBhcnNl
ZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYyA9IERvTm90UmVsZWFzZVBhcnNlZENhbGNW
YWx1ZSkgeyByZXR1cm4gdmFsaWRVbml0KHZhbHVlLCB1bml0ZmxhZ3MsIG1fY29udGV4dC5tb2Rl
LCByZWxlYXNlQ2FsYyk7IH0KLSAgICBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYsIFVu
aXRzLCBDU1NQYXJzZXJNb2RlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVh
c2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICBpbmxpbmUgYm9vbCB2
YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3Mp
IHsgcmV0dXJuIHZhbGlkVW5pdCh2YWx1ZSwgdW5pdGZsYWdzLCBtX2NvbnRleHQubW9kZSk7IH0K
KyAgICBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYsIFVuaXRzLCBDU1NQ
YXJzZXJNb2RlKTsKIAogICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMsIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLSAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoQ1NTUGFy
c2VyVmFsdWUmKTsKLSAgICBkb3VibGUgcGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVlJiwgUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYyA9IERvTm90UmVsZWFzZVBh
cnNlZENhbGNWYWx1ZSk7CisgICAgaW50IGNvbG9ySW50RnJvbVZhbHVlKENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlJik7CisgICAgZG91YmxlIHBhcnNlZERvdWJsZShDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSYpOwogICAgIAogICAgIGZyaWVuZCBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvOwog
ICAgIGZyaWVuZCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25JbmZvOwpAQCAtNjkzLDYgKzY5MiwyMyBA
QCBpbmxpbmUgaW50IGNzc3l5bGV4KHZvaWQqIHl5bHZhbCwgQ1NTUGFyc2VyKiBwYXJzZXIpCiAg
ICAgcmV0dXJuIHBhcnNlci0+bGV4KHl5bHZhbCk7CiB9CiAKK2NsYXNzIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0
ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
IH0KKworICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKyAgICBvcGVyYXRvciBDU1NQYXJzZXJWYWx1ZSYoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisK
KyAgICBDU1NDYWxjVmFsdWUqIHBhcnNlZENhbGN1bGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9w
YXJzZWRDYWxjdWxhdGlvbi5nZXQoKTsgfQorICAgIHZvaWQgc2V0UGFyc2VkQ2FsY3VsYXRpb24o
UmVmUHRyPENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRpb24pIHsgbV9wYXJzZWRDYWxjdWxhdGlvbiA9
IGNhbGN1bGF0aW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYg
bV92YWx1ZTsKKyAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9wYXJzZWRDYWxjdWxhdGlv
bjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU1BhcnNlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCmluZGV4IDg0NzlhZGQ0MGMyZjU3ZGMxNmIy
NzYwNWQ5ZjdmMjE0YTNkNTk3MWQuLjIxOTFkZmViZDM1YWNmYzZkNmY2Y2ZkMDZjZmI3NTNhZjg2
NTJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCkBAIC0zNSwxMSArMzUsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQorICAg
IGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKTsKIAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgQ1NTVmFsdWVJ
RCBpZCA9IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQ7CiAKICAgICBib29sIHZhbGlkX3ByaW1p
dGl2ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CkBAIC02Miw3
ICs2Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgaWQgPj0gQ1NTVmFsdWVTdXBlcikKICAg
ICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2Vu
dCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9k
ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eURvbWluYW50QmFzZWxp
bmU6CkBAIC04Nyw4ICs4Nyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5TWFz
azoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZywgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQog
ICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTEwMSw3
ICsxMDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+IHwgaW5oZXJpdAotICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZywg
U1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2
YWx1ZVdpdGhTdGF0ZSwgRk51bWJlciB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lam9pbjogICAvLyBt
aXRlciB8IHJvdW5kIHwgYmV2ZWwgfCBpbmhlcml0CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3RvcE9wYWNpdHk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGUGVyY2VudCwgU1ZH
QXR0cmlidXRlTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlT
aGFwZVJlbmRlcmluZzoKQEAgLTE2Nyw4ICsxNjcsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIEZB
TExUSFJPVUdIOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9u
dGFsOiAvLyA8YW5nbGU+IChyZXN0cmljdGVkIHRvIF9kZWdfIHBlciBTVkcgMS4xIHNwZWMpIHwg
aW5oZXJpdAotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19ERUcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsK
LSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyk7CisgICAgICAgIGlmICh2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwg
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
REVHKTsKIAogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CkBAIC0xODksMTYgKzE4OSwxNiBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7
CiAgICAgICAgICAgICBlbHNlIGlmICgoaWQgPj0gQ1NTVmFsdWVBY3RpdmVib3JkZXIgJiYgaWQg
PD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ29sb3IoUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5zeXN0ZW1Db2xvcihpZCkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50
OwogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LCBjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNy
ZWF0ZVVSSUFuZENvbG9yKHZhbHVlLT5zdHJpbmcsIGMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kQ29sb3IodmFsdWVXaXRoU3Rh
dGUudmFsdWUoKS5zdHJpbmcsIGMpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmROb25lKHZhbHVlLT5z
dHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6
Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSSh2YWx1ZS0+c3RyaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJ
KHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdQYWludCgpOwogCkBAIC0yMTIsNyAr
MjEyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgog
ICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3Rl
eHQpIHx8CiAgICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUFsaWNlYmx1ZSAmJiBpZCA8PSBDU1NW
YWx1ZVllbGxvd2dyZWVuKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHQ29sb3I6OmNy
ZWF0ZUZyb21TdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3RyaW5nKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuc3RyaW5n
KTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKICAgICAg
ICAgZWxzZSAvLyBUT0RPIDogc3ZnY29sb3IgKGljY0NvbG9yKQpAQCAtMjM2LDcgKzIzNiw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDogICAgICAgICAv
LyA8bGVuZ3RoPiB8IGluaGVyaXQKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNl
dDoKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0
ZU1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFy
cmF5OiAgICAgLy8gbm9uZSB8IDxkYXNoYXJyYXk+IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb25lKQpAQCAtMjUwLDE1ICsyNTAsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRl
TW9kZSk7CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDogICAgLy8gPHVyaT4gfCBub25lIHwgaW5oZXJpdAog
ICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5v
bmUpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcs
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgIGVs
c2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuc3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcykgdmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0KTsKICAgICAgICAgICAgIGlm
IChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICB9CkBAIC0zMDYsNyArMzA2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlSeToKICAgICBjYXNlIENTU1Byb3BlcnR5WDoKICAgICBjYXNlIENTU1Byb3BlcnR5WToKLSAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVu
aXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiB5b3UgY3Jhc2ggaGVyZSwgaXQncyBiZWNhdXNl
IHlvdSBhZGRlZCBhIGNzcyBwcm9wZXJ0eSBhbmQgYXJlIG5vdCBoYW5kbGluZyBpdApAQCAtMzE4
LDE0ICszMTgsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGlmICh2YWxpZF9wcmltaXRpdmUpIHsKICAg
ICAgICAgaWYgKGlkICE9IDApCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQg
PD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVu
aXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZS0+ZlZhbHVl
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgIGlmIChpc0NhbGN1bGF0aW9u
KCp2YWx1ZSkpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBlbHNlIGlmICh2
YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQpOworICAgICAgICBlbHNlIGlmICh2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIg
JiYgdmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
S0haKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcykgdmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0KTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKKyAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFy
Z2luUXVpcmsodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRU1TKTsKKyAgICAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoU3RhdGUpKQor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
V2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwogICAgIH0KICAgICBpZiAoIXBhcnNlZFZhbHVlIHx8IChtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpICYmICFpblNob3J0aGFuZCgpKSkKQEAgLTM0MSw5ICszNDEsMTEgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBib29sIHZhbGlk
X3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcs
IFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1
ZVdpdGhTdGF0ZSgqdmFsdWUpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIFNWR0F0dHJpYnV0
ZU1vZGUpOwogICAgICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQg
dmFsdWVzLgogICAgICAgICBpZiAodmFsdWUtPmlkICE9IDApCiAgICAgICAgICAgICByZXQtPmFw
cGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpKTsKICAg
ICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCkBAIC0zNTMs
NyArMzU1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9r
ZURhc2hhcnJheSgpCiAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgfQogICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242704</attachid>
            <date>2014-12-05 23:20:28 -0800</date>
            <delta_ts>2014-12-06 10:20:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141205232103.patch</filename>
            <type>text/plain</type>
            <size>113900</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY1ODU2NTg4ODQxODBm
YTczZDY0YTdlZjNiNjAzMTY5YjU3NWI3Mi4uM2JiMzQ1OWZiZDQxN2VlOWVjZTc1NzVmYmExNzMz
N2M2M2M5NDNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJp
ZCBvZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50
IGluCisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENh
bGN1bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAg
SW5zdGVhZCwgaW50cm9kdWNlIGEgbmV3IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHR5cGUgd2hp
Y2ggd3JhcHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2Vk
IGNhbGN1bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxh
dGlvbiB2YWx1ZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3Vs
YXRpb24gdmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQ
SSBpcyBhbHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIg
bmVlZCB0byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91
bGQgYmUKKyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTEyLTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIHJlbW92ZSAiZW50ZXIgb3B0aW1pemVk
IGZ1bGxzY3JlZW4iIGdlc3R1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggYjQwYjU5
ZWMzZTY0YTQ1MTZhNDBmM2FmMmMyMmU2NjkyN2RiY2QxZi4uMTA0OWU3ZDU4NTcxODQ0NGE3NjM0
ODBmZjkzYTBjNTczOGEzZmI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE1ODEs
MjAgKzE1ODEsMjIgQEAgVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKIH0KIAot
Ym9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiB2YWx1
ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVh
c2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZh
bHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSwgVW5pdHMgdW5pdGZsYWdzKQogewogICAgIGJv
b2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0ZmxhZ3MgJiBGTm9uTmVnOwogCi0gICAgaWYgKCFw
YXJzZUNhbGN1bGF0aW9uKHZhbHVlLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpKQorICAgIGlmICghcGFyc2VDYWxj
dWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSwgbXVzdEJlTm9uTmVnYXRpdmUgPyBDYWxjdWxhdGlvblJh
bmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgQVNTRVJUKHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwor
ICAgIENTU0NhbGNWYWx1ZSYgcGFyc2VkQ2FsY3VsYXRpb24gPSAqdmFsdWVXaXRoU3RhdGUucGFy
c2VkQ2FsY3VsYXRpb24oKTsKICAgICBib29sIGIgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fcGFy
c2VkQ2FsY3VsYXRpb24tPmNhdGVnb3J5KCkpIHsKKyAgICBzd2l0Y2ggKHBhcnNlZENhbGN1bGF0
aW9uLmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6CiAgICAgICAgIGIgPSAodW5p
dGZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVn
ZXIpICYmIG1fcGFyc2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCisgICAgICAgIGlmICghYiAmJiAo
dW5pdGZsYWdzICYgRkludGVnZXIpICYmIHBhcnNlZENhbGN1bGF0aW9uLmlzSW50KCkpCiAgICAg
ICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAgaWYgKGIgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYg
bV9wYXJzZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICBpZiAoYiAmJiBtdXN0
QmVOb25OZWdhdGl2ZSAmJiBwYXJzZWRDYWxjdWxhdGlvbi5pc05lZ2F0aXZlKCkpCiAgICAgICAg
ICAgICBiID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY0xlbmd0aDoKQEAg
LTE2MDIsNyArMTYwNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6CiAgICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlBlcmNl
bnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBtX3BhcnNlZENhbGN1
bGF0aW9uLT5pc05lZ2F0aXZlKCkpCisgICAgICAgIGlmIChiICYmIG11c3RCZU5vbk5lZ2F0aXZl
ICYmIHBhcnNlZENhbGN1bGF0aW9uLmlzTmVnYXRpdmUoKSkKICAgICAgICAgICAgIGIgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoKQEAgLTE2MjMs
OCArMTYyNSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsCiAgICAgY2FzZSBDYWxjT3RoZXI6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWIgfHwgcmVsZWFzZUNhbGMgPT0gUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZSkKLSAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IG51bGxw
dHI7CisgICAgaWYgKCFiKQorICAgICAgICB2YWx1ZVdpdGhTdGF0ZS5zZXRQYXJzZWRDYWxjdWxh
dGlvbihudWxscHRyKTsKICAgICByZXR1cm4gYjsgICAgCiB9CiAKQEAgLTE2MzQsMjMgKzE2MzYs
MjMgQEAgaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHUKICAgICByZXR1cm4gKHVuaXRmbGFncyAmIChG
TGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJN
b2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2Rl
KTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUs
IFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBSZWxlYXNlUGFy
c2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlk
VW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUsIFVuaXRzIHVuaXRm
bGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewotICAgIGlmIChpc0NhbGN1bGF0
aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkQ2FsY3VsYXRpb25Vbml0KHZhbHVlLCB1
bml0ZmxhZ3MsIHJlbGVhc2VDYWxjKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhT
dGF0ZSkpCisgICAgICAgIHJldHVybiB2YWxpZENhbGN1bGF0aW9uVW5pdCh2YWx1ZVdpdGhTdGF0
ZSwgdW5pdGZsYWdzKTsKICAgICAgICAgCiAgICAgYm9vbCBiID0gZmFsc2U7Ci0gICAgc3dpdGNo
ICh2YWx1ZS51bml0KSB7CisgICAgc3dpdGNoICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQp
IHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgogICAgICAgICBiID0g
KHVuaXRmbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNjZXB0VW5p
dExlc3NWYWx1ZXModmFsdWUsIHVuaXRmbGFncywgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAg
ICAgIHZhbHVlLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYIDoKKyAgICAgICAgaWYgKCFiICYmIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVz
KHZhbHVlV2l0aFN0YXRlLCB1bml0ZmxhZ3MsIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAg
ICB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bml0ZmxhZ3MgJiBGQW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgOiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX01TKTsKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIHZhbHVlLmlzSW50KQor
ICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhTdGF0
ZS52YWx1ZSgpLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGlmICghYiAm
JiAodW5pdGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWUuaXNJbnQgJiYgdmFsdWUu
ZlZhbHVlID4gMCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0ZmxhZ3MgJiBGUG9zaXRpdmVJbnRl
Z2VyKSAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlzSW50ICYmIHZhbHVlV2l0aFN0YXRlLnZh
bHVlKCkuZlZhbHVlID4gMCkKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKQEAgLTE2OTYsMjAg
KzE2OTgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVnICYmIHZhbHVl
LmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIgPSBmYWxzZTsKLSAgICBpZiAo
YiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYgKGIgJiYgc3RkOjppc2luZih2
YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpCiAgICAgICAgIGIgPSBmYWxzZTsKICAgICBy
ZXR1cm4gYjsKIH0KIAotaW5saW5lIFBhc3NSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUpCiB7
Ci0gICAgaWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pIHsKLSAgICAgICAgQVNTRVJUKGlzQ2FsY3Vs
YXRpb24odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS5w
YXJzZWRDYWxjdWxhdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVl
V2l0aFN0YXRlKSk7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwogICAgIH0KIAorICAgIENTU1BhcnNl
clZhbHVlJiB2YWx1ZSA9IHZhbHVlV2l0aFN0YXRlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVT
T0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCiAgICAgQVNTRVJUKCh2
YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLnVuaXQg
PD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCiAgICAgICAgIHx8ICh2YWx1ZS51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfQ0hTKQpAQCAtMTczOSw0MyArMTc0Miw0NCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgcmV0
dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1
ZSA9PSAnLyc7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZFdpZHRoKENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZFdpZHRoKENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKIHsKLSAgICBpbnQgaWQgPSB2YWx1ZS5pZDsKKyAgICBpbnQg
aWQgPSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUlu
dHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZVdl
YmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50IHx8IGlkID09
IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpdENv
bnRlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiB9CiAKIC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgd2l0aCB2YWxpZFdpZHRoIHdoZW4gd2Ugc3Vw
cG9ydCBmaXQtY29udGVudCwgZXQgYWwsIGZvciBoZWlnaHRzLgotYm9vbCBDU1NQYXJzZXI6OnZh
bGlkSGVpZ2h0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZEhl
aWdodChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRoU3RhdGUpCiB7Ci0gICAgaW50
IGlkID0gdmFsdWUuaWQ7CisgICAgaW50IGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsK
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5JbnRy
aW5zaWMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGlmIChpZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIp
OwotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpOwotICAgIGlm
ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLnVu
aXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgIHJldHVybiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlKTsKLSAgICBpZiAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXICYm
IHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKworICAgIGlmICh2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7
CisgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19LSFopCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgaWYgKHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXICYmIHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgp
CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3Rh
dGUpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJ
T05fTUVESUFfUVVFUlkpCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBp
ZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RFBQWCAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUENNKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aFN0YXRlKTsKICNlbmRpZgotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1BhcnNlclZh
bHVlOjpRX0VNUykKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxv
d2luZ01hcmdpblF1aXJrKHZhbHVlLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMp
OwotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlm
ICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQor
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVp
cmsodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSkpCisgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1
bGF0aW9uKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzk4LDE5ICsxODAyLDEz
IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBpZiAoIW1fdmFs
dWVMaXN0KQorICAgIGlmICghbV92YWx1ZUxpc3QgfHwgIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBOb3RlOiBtX3BhcnNlZENhbGN1bGF0aW9uIGlzIHVzZWQgdG8gcGFz
cyB0aGUgY2FsYyB2YWx1ZSB0byB2YWxpZFVuaXQgYW5kIHRoZW4gY2xlYXJlZCBhdCB0aGUgZW5k
IG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdG8gYXZvaWQgaGF2aW5n
IHRvIHBhc3MgcGFyc2VkQ2FsYyB0byBhbGwgdmFsaWRVbml0IGNhbGxlcnMuCi0gICAgQVNTRVJU
KCFtX3BhcnNlZENhbGN1bGF0aW9uKTsKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHBhcnNpbmcgc3Rh
dGUuCisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpOwogICAgIAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7Cisg
ICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQ7CiAKICAgICB1bnNp
Z25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAKQEAg
LTE4NzQsNyArMTg3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAg
ICAgICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRvIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGlwU2hhcGUocHJvcElk
LCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsKIApAQCAtMTkzMiw3ICsxOTMwLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNw
YWNpbmc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5v
bk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwgaW5oZXJpdAogICAg
ICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlvbmFsIGtleXdvcmQu
CkBAIC0xOTg1LDYgKzE5ODMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIHpvb20taW4gfCB6b29t
LW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIHwgLXdl
YmtpdC16b29tLWluIHwKICAgICAgICAgLy8gLXdlYmtpdC16b29tLW91dCBdIF0gfCBpbmhlcml0
CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CisgICAgICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpOwogICAgICAgICB3aGlsZSAodmFs
dWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2U7CiAgICAgICAgICAgICBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIwMjcs
NyArMjAyNiw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsgLy8gY29tbWEKICAgICAgICAgfQogICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkgeyAvLyBubyB2YWx1ZSBhZnRlciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBh
dGliaWxpdHkpCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8g
bm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRpYmlsaXR5KQogICAgICAgICAg
ICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUhhbmQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCkBAIC0yMDM5
LDcgKzIwMzksOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZSkgewogICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAgICBp
ZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgeyAvLyBNU0lF
IDUgY29tcGF0aWJpbGl0eSA6LworICAgICAgICAgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBNU0lFIDUgY29t
cGF0aWJpbGl0eSA6LwogICAgICAgICAgICAgICAgIGlkID0gQ1NTVmFsdWVQb2ludGVyOwogICAg
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Vi
a2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVOb25lKQpAQCAtMjExMywxNyArMjExNCwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZykpOwog
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0dl
bmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJh
dGVkSW1hZ2VWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSkpIHsKICAgICAgICAgICAgIGlmIChwYXJzZUdl
bmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQogICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWltYWdlLXNl
dCgiKSkgeworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlV2l0aFN0
YXRlLnZhbHVlKCkuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWltYWdlLXNldCgiKSkgewogICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7CiAgICAgICAgICAgICBpZiAo
IXBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxNDYsMjEg
KzIxNDcsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVUaGluIHx8IGlk
ID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpOworICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBG
Tm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3Bh
Y2luZzogICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCBpbmhlcml0CiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1By
b3BlcnR5V29yZFNwYWNpbmc6ICAgICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCA8cGVyY2Vu
dGFnZT4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZM
ZW5ndGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRJbmRlbnQ6CkBAIC0yMTc1LDM3ICsyMTc2LDM3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFk
ZGluZ0JlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRoKCp2YWx1ZSkpOworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRXaWR0aCh2YWx1
ZVdpdGhTdGF0ZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5X
aWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkV2lkdGgoKnZhbHVlKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2lj
YWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0g
Q1NTVmFsdWVOb25lIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRIZWlnaHQodmFsdWVXaXRoU3RhdGUp
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KCp2YWx1ZSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRIZWlnaHQodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlIZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWln
aHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxp
ZEhlaWdodCgqdmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkSGVpZ2h0KHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgpAQCAtMjIyMSw3ICsyMjIyLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1
ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOiAg
ICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQK
QEAgLTIyMzksMTQgKzIyNDAsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwg
Rkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQg
JiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OiAgICAgICAgICAgICAgLy8g
YXV0byB8IDxpbnRlZ2VyPiB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRl
Z2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQg
JiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8aW50ZWdl
cj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9ydCBmb3IgYXV0byBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMjU0LDcgKzIyNTUsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CkBAIC0yMzA0LDcgKzIzMDUsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1
ZVJlc2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NT
dHJpY3RNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzog
Ly8gT25seSB1c2VkIHdpdGhpbiBAZm9udC1mYWNlIGFuZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNh
bm5vdCB1c2UgaW5oZXJpdCB8IGluaXRpYWwgb3IgYmUgIWltcG9ydGFudC4gVGhpcyBpcyBhIGxp
c3Qgb2YgdXJscyBvciBsb2NhbCByZWZlcmVuY2VzLgpAQCAtMjM3MCwxNyArMjM3MSwxNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7CiAg
ICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwg
RlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwogICAgICAgICBp
ZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7
CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAg
ICBpZiAobnVtID09IDIpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSBuZXh0VmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5uZXh0KCkpOworICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQobmV4dFZhbHVlV2l0aFN0YXRlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUy
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aFN0YXRl
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1
ZTE7CiAKQEAgLTIzODgsNyArMjM4OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25O
ZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0
aW86CiAgICAgICAgIHJldHVybiBwYXJzZUFzcGVjdFJhdGlvKGltcG9ydGFudCk7CkBAIC0yMzk2
LDcgKzIzOTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJh
ZGl1czoKICAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVyUmFkaXVzKHByb3BJZCwgaW1wb3J0YW50
KTsKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzogLy8gQ1NTMiBwcm9wZXJ0eSwgZHJvcHBl
ZCBpbiBDU1MyLjEsIGJhY2sgaW4gQ1NTMywgc28gdHJlYXQgYXMgQ1NTMwogICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3hTaGFkb3c6CkBAIC0yNDE5LDE3ICsyNDIwLDE3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVtICE9IDIpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKICAgICAg
ICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICAgICAgaWYgKG51bSA9PSAyKSB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAg
ICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbmV4dFZhbHVlV2l0aFN0YXRlKCptX3Zh
bHVlTGlzdC0+bmV4dCgpKTsKKyAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdChuZXh0VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVnZXIpOwogICAgICAgICAgICAg
ICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKICAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKHBhcnNlZFZh
bHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwpAQCAt
MjQ0NCwxNiArMjQ0NSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWZs
ZWN0KHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU9wYWNpdHk6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwg
Rk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveEZsZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51
bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOworICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9y
ZGluYWxHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlLT5mVmFsdWU7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8
IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgogI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCkBAIC0yNDk0LDE2ICsyNDk1LDE2IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAo
IWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsK
KyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hy
aW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIg
fCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIsIENT
U1N0cmljdE1vZGUpKSB7CisgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJ
bnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhl
IHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5k
IGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCi0gICAgICAgICAg
ICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1
ZSkpOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIDIsIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0
ZSkpOwogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTI1MTQsMTkgKzI1MTUsMTkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBpZCA9PSBDU1NWYWx1ZUxh
cmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9u
OgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJbnRlZ2VyIHwgRk5v
bk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
U3BlZWQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1
ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZUaW1lIHwgRkludGVnZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGVGltZSB8IEZJbnRlZ2Vy
IHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CkBAIC0yNTczLDggKzI1NzQsOCBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVlbGVzcyBudW1iZXJzIGlzIGEgcXVpcmsg
b2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCi0gICAgICAg
ICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnKSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7CisgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTQsMTkgKzI2OTUsMTkgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFsdWVUaGlj
aykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJl
ciB8IEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFp
ZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlk
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkdhcDogLy8gbm9ybWFsIHwgPGxlbmd0aD4KICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlzOgogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IGlkID09IENTU1ZhbHVlVmVydGljYWwg
fHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQpAQCAtMjcxOSw3ICsyNzIwLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAvLyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBk
cm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3BlcnR5KQogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwg
Rk5vbk5lZykgJiYgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkg
PT0gMSkgeworICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1i
ZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoU3RhdGUpID09IDEpIHsKICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI3MjksOSArMjcz
MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBpbiBz
dHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVuIHVz
ZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSAmJiBwYXJzZWREb3VibGUoKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRQ
cmltaXRpdmUpCi0gICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbi5jbGVhcigpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZM
ZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRo
U3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIC8vIEVuZCBvZiBDU1MzIHBy
b3BlcnRpZXMKQEAgLTI3NDEsNyArMjc0MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TGluZUNsYW1wOgogICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgbnVtYmVyIG9m
IGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUKICAgICAgICAgLy8gV2hlbiBz
cGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUgbm9uLW5lZ2F0aXZlIGludGVn
ZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVlLT5mVmFsdWUpICYmIHZhbGlk
VW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2Rl
KSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWVXaXRoU3RhdGUudmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50
ZWdlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVh
azsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFNpemVBZGp1c3Q6CkBAIC0yNzQ5LDM2ICsyNzQ4LDM2IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ugd2hlcmUgd2UgYWxsb3cgcmVs
YXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBG
UGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6
ICAgICAgICAgICAvLyA8bGVuZ3RoPgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGgpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2
YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0byB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgp
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRI
eXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xpbWl0
IHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkp
CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwgdmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgU3Ry
aW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKSB7CisgICAgICAgICAgICBTdHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFs
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORyksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yNzg2LDEzICsyNzg1LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjog
Ly8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+Ci0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVO
b25lKQorICAgICAgICBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICByZXR1
cm4gcGFyc2VEYXNoYm9hcmRSZWdpb25zKHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKQEAgLTI5NTYsMTUgKzI5NTUsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBwYXJz
ZWRWYWx1ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVz
RW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW1hZ2VUaHJlc2hv
bGQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIpKTsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxp
ZFVuaXQoKnZhbHVlLCBGQW5nbGUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZBbmdsZSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpAQCAtMzExNCwxMCArMzExMywxMCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgfQogCiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgKnZhbHVlKTsKKyAgICAgICAgcGFy
c2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhTdGF0ZSk7CiAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIEFTU0VSVCghbV9wYXJzZWRDYWxj
dWxhdGlvbik7CisKICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgaWYgKCFtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpIHx8IGluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwpAQCAtMzIyMCwx
NiArMzIxOSwxNyBAQCBib29sIENTU1BhcnNlcjo6dXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9y
dGhhbmRCZWhhdmlvcigpIGNvbnN0CiBib29sIENTU1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25h
cFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWwsIEZQZXJjZW50IHwgRkxlbmd0
aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoKnZhbCkpOwotICAgICAgICBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OkZ1bmN0aW9uCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAg
ICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgZXF1
YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgewotICAgICAg
ICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbCA9ICp2YWwtPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpLT5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0KHBhcnNlclZhbCwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShwYXJzZXJWYWwpKSkpOworICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIGlmICh2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpCisgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpKTsKKyAg
ICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisg
ICAgICAgICAgICAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MKKyAgICAgICAgICAgICYmIHZhbHVl
LT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgeworICAgICAgICAgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKnZhbHVlLT5mdW5jdGlv
bi0+YXJncy5nZXQoKS0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoYXJn
dW1lbnRXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNy
ZWF0ZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKSkpOwog
ICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTMyNTIsMTUgKzMyNTIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25h
cERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbiA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSAhPSAyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1clBhcnNlclZhbCA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKmN1clBhcnNlclZhbCwgRlBlcmNl
bnQgfCBGTGVuZ3RoKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVhXaXRoU3Rh
dGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVlWFdp
dGhTdGF0ZSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KCpjdXJQYXJzZXJWYWwpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgY3VyUGFyc2Vy
VmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbGlkVW5pdCgqY3VyUGFy
c2VyVmFsLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWFdpdGhTdGF0ZSk7CisKKyAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVlXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5u
ZXh0KCkpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVlWVdpdGhTdGF0ZSwgRlBlcmNlbnQgfCBG
TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZhbHVlWVdpdGhTdGF0ZSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwb3NpdGlvbiwgaW1wb3J0YW50KTsKQEAg
LTMyNzIsMTUgKzMyNzIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3Jk
aW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgcGFyc2VkVmFsdWVYID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Cisg
ICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlWFdpdGhTdGF0ZSgqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CiAgICAgICAgIC8vIERvbid0IGFjY2VwdCBvZGQtbGVuZ3RoIGxpc3Rz
IG9mIGNvb3JkaW5hdGVzLgogICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZWRWYWx1
ZVkgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQocGFy
c2VkVmFsdWVYLCBGUGVyY2VudCB8IEZMZW5ndGgpIHx8ICF2YWxpZFVuaXQocGFyc2VkVmFsdWVZ
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2
YWx1ZVlXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgICAgICBpZiAoIXZh
bGlkVW5pdCh2YWx1ZVhXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkgfHwgIXZhbGlkVW5p
dCh2YWx1ZVlXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShwYXJzZWRWYWx1ZVgpKTsKLSAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlZFZhbHVlWSkpOworICAgICAgICBwb3NpdGlvbnMt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVYV2l0aFN0YXRlKSk7Cisg
ICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVlXaXRoU3RhdGUpKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAgICAg
aWYgKHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKQEAgLTM3NzIsMTIgKzM3NzIsMTQgQEAgQ1NTUGFy
c2VyOjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NW
YWx1ZUxpc3QmIHBhcnNlZFYKICAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1U
eXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7Ci0gICAgICAgICAgICBw
YXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSkpOwor
ICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdp
dGhTdGF0ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwg
cHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBw
ZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuIExlbmd0aDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKKyAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgfQpAQCAtMzk3Myw4
ICszOTc1LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3Np
dGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQg
PSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxp
ZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkp
OworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZUxpc3Qu
Y3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8
IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMzk4OSw4ICszOTky
LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblko
Q1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsK
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQo
KnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZUxpc3QuY3VycmVu
dCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDAyNiwxOSArNDAzMCwxNyBA
QCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0
aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbAogCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2Vu
dCB8IEZMZW5ndGgpKSB7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3Rh
dGUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3Rh
dGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKICAgICAgICAgaWYgKCFjdW11bGF0aXZlRmxhZ3Mp
IHsKICAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9uOwogICAgICAg
ICAgICAgaW5kaXZpZHVhbEZsYWcgPSBYRmlsbFBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgaWYg
KGN1bXVsYXRpdmVGbGFncyAmIChYRmlsbFBvc2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBvc2l0aW9u
KSkgewogICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247CiAgICAg
ICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRDYWxjdWxhdGlvbikKLSAgICAgICAgICAgICAgICBt
X3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQpAQCAtNDIwMCw3ICs0MjAyLDEwIEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDCiAKIGlubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3RlbnRpYWxQb3NpdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gaXNGaWxsUG9zaXRpb25LZXl3
b3JkKHZhbHVlLmlkKSB8fCB2YWxpZFVuaXQodmFsdWUsIEZQZXJjZW50IHwgRkxlbmd0aCwgUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1
ZS5pZCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGUGVyY2VudCB8IEZMZW5ndGgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQpAQCAtNDM2NCw5ICs0MzY5LDEwIEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCYgYWxsb3dDCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0
aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSgqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGFyc2VkVmFsdWUyOwpAQCAtNDM3NCwxMyArNDM4MCwxNCBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wmIGFsbG93QwogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9w
ZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQogICAgICAgICAgICAgYWxsb3dDb21tYSA9
IGZhbHNlOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVBdXRvKSB7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
KyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8
IEZQZXJjZW50KSkgewogICAgICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdCBpcyBhZHZhbmNlZCB3
ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgogICAgICAgICAgICAgICAgIG1fdmFsdWVM
aXN0LT5wcmV2aW91cygpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFy
c2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSkgewogICAgICAgICAvLyBG
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhl
IGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCkBAIC00NTgxLDkgKzQ1ODgsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5
SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmlt
YXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUpKQotICAgICAgICBy
ZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBDU1NQYXJzZXJW
YWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Cisg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRlRpbWUpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIApAQCAtNDU5Nyw5ICs0NjA0LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCiAKIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCiB7Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5p
dCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVX
aXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFs
dWVXaXRoU3RhdGUsIEZUaW1lIHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgIHJldHVybiBudWxscHRyOwog
fQogCkBAIC00NjE2LDggKzQ2MjMsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQogICAgIENTU1BhcnNlclZhbHVlJiB2YWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1
ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRk5v
bk5lZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUp
OworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAg
ICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjY3LDggKzQ2NzUsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dWUxLCBSZWZQdHI8QwogCiAgICAgLy8gbm93IGdldCB6CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgRkxlbmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCkpIHsKKyAgICAgICAgICAg
IHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KQEAgLTQ2ODAsMTYgKzQ2ODksMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRy
PEMKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVl
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7Ci0gICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhT
dGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0
YXRlLCBGTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHBhcnNl
ZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwotICAgIHZhbHVlID0gYXJn
cy5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkgeworICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZShh
cmd1bWVudFdpdGhTdGF0ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IGFyZ3Mu
bmV4dCgpOworICAgIGlmICghbmV4dFZhbHVlKSB7CiAgICAgICAgIC8vIFRoZSBsYXN0IG51bWJl
ciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3ZSdyZSBkb25lLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKKyAg
ICBpZiAoIWlzQ29tbWEobmV4dFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGFy
Z3MubmV4dCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDcxNywyMiArNDcyNiwyNCBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
KQogICAgICAgICBpbnQgbnVtU3RlcHM7CiAgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxz
ZTsKIAotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVu
dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGSW50ZWdlcikpCisg
ICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICAg
ICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsK
KyAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZJbnRlZ2VyKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9JbnRl
Z2VyKGN1cnJlbnRWYWx1ZS0+ZlZhbHVlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIG51bVN0ZXBzID0gY2xhbXBUb0lu
dGVnZXIoYXJndW1lbnQtPmZWYWx1ZSk7CiAgICAgICAgIGlmIChudW1TdGVwcyA8IDEpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4
dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAotICAgICAgICBpZiAoY3Vy
cmVudFZhbHVlKSB7CisgICAgICAgIGlmIChhcmd1bWVudCkgewogICAgICAgICAgICAgLy8gVGhl
cmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAg
ICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgaWYgKCFpc0Nv
bW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50
VmFsdWUtPmlkICE9IENTU1ZhbHVlU3RhcnQgJiYgY3VycmVudFZhbHVlLT5pZCAhPSBDU1NWYWx1
ZUVuZCkKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICAgICAg
aWYgKGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NW
YWx1ZUVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHN0
ZXBBdFN0YXJ0ID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVN0YXJ0OworICAgICAgICAg
ICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShu
dW1TdGVwcywgc3RlcEF0U3RhcnQpOwpAQCAtNDg5MywyMyArNDkwNCwyNSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWYWxpZEN1c3RvbUlkZW50KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
IC8vIFRoZSBmdW5jdGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBp
biA8Z3JpZC1saW5lPiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9yIHdpdGggJ3NwYW4nKS4K
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlv
bihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGSW50
ZWdlcikgJiYgdmFsdWUtPmZWYWx1ZSkgewotICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgaXNWYWxpZEN1c3RvbUlkZW50KCp2YWx1
ZSkpIHsKLSAgICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1Zh
bHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0
ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlk
VW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIpICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCku
ZlZhbHVlKSB7CisgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICBpZiAobmV4dFZhbHVlICYmIGlzVmFsaWRD
dXN0b21JZGVudCgqbmV4dFZhbHVlKSkgeworICAgICAgICAgICAgZ3JpZExpbmVOYW1lID0gY3Jl
YXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7CiAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGlmIChpc1ZhbGlkQ3VzdG9tSWRlbnQoKnZhbHVlKSkgewotICAgICAgICBncmlkTGluZU5h
bWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVl
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyKSAmJiB2YWx1ZS0+ZlZhbHVlKSB7Ci0gICAg
ICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVl
KTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgaWYgKGlzVmFsaWRDdXN0
b21JZGVudCh2YWx1ZVdpdGhTdGF0ZSkpIHsKKyAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRl
UHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgICAgICBpZiAoQ1NTUGFy
c2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIG5leHRWYWx1ZVdpdGhTdGF0ZSgqbmV4dFZhbHVlKTsK
KyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQobmV4dFZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlcikg
JiYgbmV4dFZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgICAgICAgICAg
bnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5leHRWYWx1ZVdpdGhT
dGF0ZSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MjkzLDEzICs1
MzA2LDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tM
aXN0KCkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1JlcGVhdEZ1bmN0aW9uKENTU1Zh
bHVlTGlzdCYgbGlzdCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJn
dW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFsaWRVbml0KCphcmd1bWVudHMt
PnZhbHVlQXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFs
dWVBdCgxKSkpCisgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5zaXplKCkgPCAzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoYXJndW1lbnRzLT52YWx1ZUF0KDAp
LT5mVmFsdWUgPiAwKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdFZhbHVlV2l0
aFN0YXRlKCphcmd1bWVudHMtPnZhbHVlQXQoMCkpOworICAgIGlmICghdmFsaWRVbml0KGZpcnN0
VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+
dmFsdWVBdCgxKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIEFTU0VSVChmaXJzdFZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlID4gMCk7CiAgICAgLy8gSWYgYXJndW1lbnRzLT52YWx1
ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVuIHJlcGV0aXRpb25zIGJlY29tZXMgMCBkdXJp
bmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdoeSB3ZQogICAgIC8vIGNsYW1wIGl0IGRvd24g
dG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0eXBlIGNhc3RpbmcuCi0gICAgdW5zaWduZWQg
cmVwZXRpdGlvbnMgPSBjbGFtcFRvPHVuc2lnbmVkPihhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZW
YWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOworICAgIHVuc2lnbmVkIHJlcGV0aXRpb25zID0gY2xh
bXBUbzx1bnNpZ25lZD4oZmlyc3RWYWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgMCwga0dy
aWRNYXhUcmFja3MpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgYXJndW1lbnRzLT5u
ZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCkBAIC01MzczLDEzICs1MzkxLDEz
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tTaXplKENT
U1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0CiAgICAgcmV0dXJuIHBhcnNlR3JpZEJyZWFkdGgo
Y3VycmVudFZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUpCitQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFs
dWVXZWJraXRNaW5Db250ZW50IHx8IGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZVdlYmtpdE1h
eENvbnRlbnQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoY3VycmVudFZhbHVlLmlkKTsKKyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJr
aXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5p
ZCk7CiAKLSAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19GUikgewotICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gY3VycmVudFZhbHVlLmZWYWx1ZTsK
KyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKSB7CisgICAg
ICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CiAKICAgICAgICAgLy8gRnJhY3Rp
b25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KICAgICAgICAgaWYgKGZsZXhW
YWx1ZSA8PSAwKQpAQCAtNTM4OCwxMCArNTQwNiwxMSBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIGN1cnJl
bgogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZmxleFZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKICAgICB9CiAKLSAgICBpZiAoIXZhbGlkVW5pdChj
dXJyZW50VmFsdWUsIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgIENTU1BhcnNl
clZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZVdpdGhTdGF0ZSwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShjdXJyZW50VmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoU3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRBdXRv
Rmxvd0lkKENTU1ZhbHVlSUQgaWQpCkBAIC01NTYwLDExICs1NTc5LDEyIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAg
ICAgICBhcmcgPSBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKIAotICAgICAgICAg
ICAgICAgIHZhbGlkID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmcs
IEZMZW5ndGgpOworICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ1dp
dGhTdGF0ZSgqYXJnKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+aWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkVW5pdChhcmdXaXRoU3RhdGUsIEZMZW5ndGgpOwogICAgICAgICAgICAg
ICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1Zh
bHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmcpOworICAgICAgICAgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1
dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoU3RhdGUpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1v
dW50KTsKQEAgLTU3NDAsMTIgKzU3NjAsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNo
YXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBSZWZQdHI8UmVj
dD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwogICAgIGlu
dCBpID0gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVu
dCgpOwotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKLSAgICAgICAgdmFsaWQgPSBjdXJyZW50
VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxl
bmd0aCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwor
ICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBh
cmd1bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICB2YWxpZCA9IGFyZ3VtZW50LT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3Ro
KTsKICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYXJndW1lbnQtPmlkID09IENTU1Zh
bHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKTsKICAg
ICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNldFRvcChsZW5ndGgpOwogICAg
ICAgICBlbHNlIGlmIChpID09IDEpCkBAIC01NzU0LDEwICs1Nzc1LDEwIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obGVuZ3RoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmVjdC0+c2V0TGVmdChsZW5ndGgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgYXJncy0+c2l6ZSgpID09
IDcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlID09ICcsJykgewotICAgICAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykg
eworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgeworICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTgyNCwxMCArNTg0
NSwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJv
dW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaQogICAgICAgICBpZiAoaSAtIGluZGV4QWZ0
ZXJTbGFzaCA+PSA0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYg
KCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQorICAgICAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgICAg
IGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogCiAgICAgICAgIGlmICghaW5kZXhB
ZnRlclNsYXNoKQogICAgICAgICAgICAgcmFkaWlbMF1baV0gPSByYWRpdXM7CkBAIC01ODY0LDEw
ICs1ODg2LDExIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJh
c2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyCiAgICAgICAgIH0KIAogICAgICAg
ICBVbml0cyB1bml0RmxhZ3MgPSBGTGVuZ3RoIHwgRlBlcmNlbnQ7Ci0gICAgICAgIGlmICghdmFs
aWRVbml0KCphcmd1bWVudCwgdW5pdEZsYWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0
KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJn
dW1lbnQpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdEZs
YWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwogICAgICAgICBh
cmd1bWVudCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIApAQCAtNTkwMiwxMCArNTkyNSwxMSBAQCBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVSYWRpdXMo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUNsb3Nl
c3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RTaWRlKQogICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIAotICAg
IGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKKyAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgaWYg
KCF2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoU3RhdGUpOwogfQogCiBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKQEAg
LTYwMTksMTQgKzYwNDMsMTggQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6
OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0JgogICAgIENTU1BhcnNl
clZhbHVlKiBhcmd1bWVudFggPSBhcmd1bWVudDsKICAgICB3aGlsZSAoYXJndW1lbnRYKSB7CiAK
LSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50WCwgRkxlbmd0aCB8IEZQZXJjZW50KSkK
KyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRYV2l0aFN0YXRlKCphcmd1
bWVudFgpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFhXaXRoU3RhdGUsIEZMZW5n
dGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCphcmd1bWVudFgpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5n
dGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRYV2l0aFN0YXRlKTsKIAog
ICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0gYXJncy5uZXh0KCk7Ci0gICAgICAg
IGlmICghYXJndW1lbnRZIHx8ICF2YWxpZFVuaXQoKmFyZ3VtZW50WSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKKyAgICAgICAgaWYgKCFhcmd1bWVudFkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudFkpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdp
dGhTdGF0ZSBhcmd1bWVudFlXaXRoU3RhdGUoKmFyZ3VtZW50WSk7CisgICAgICAgIGlmICghdmFs
aWRVbml0KGFyZ3VtZW50WVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHlM
ZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0aFN0YXRlKTsK
IAogICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxlYXNlKCksIHlMZW5ndGgu
cmVsZWFzZSgpKTsKIApAQCAtNjA4MSw3ICs2MTA5LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkK
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICAgICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3hW
YWx1ZSh2YWx1ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewotICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFs
dWVJZCwgKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwpAQCAtNjEwMywxMyArNjEzMSwxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIAogICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1Zh
bHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
a2V5d29yZFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZTsK
IAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBrZXl3b3JkVmFs
dWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsIHZhbHVlKTsKICAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRWYWx1ZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJ
ZCk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwpAQCAtNjEyOSw3
ICs2MTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNsaXBQYXRo
KCkKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VWYWxpZFByaW1pdGl2ZSh2YWx1ZUlk
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWVJZCk7CiAgICAgfQogICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC02MzQ5
LDMxICs2Mzc0LDMxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNl
Rm9udEZhbWlseSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVIZWlnaHQoYm9vbCBpbXBv
cnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBD
U1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlk
UHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gbm9ybWFsIHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8
IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8
fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZSksIGltcG9ydGFudCk7CisgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFByaW1pdGl2ZShp
ZCwgdmFsdWVXaXRoU3RhdGUpLCBpbXBvcnRhbnQpOwogICAgIHJldHVybiB2YWxpZFByaW1pdGl2
ZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZl
ID0gZmFsc2U7CiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxl
bmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYgKGlkID49IENTU1ZhbHVlWHhT
bWFsbCAmJiBpZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgIGVsc2UKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUs
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNo
b3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFy
c2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdp
dGhTdGF0ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZlOwogfQogCkBA
IC02NDM5LDggKzY0NjQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCksIGltcG9ydGFudCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7Ci0gICAgICAgIGludCB3ZWlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNW
YWx1ZSkpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVl
KTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1F1aXJrc01vZGUpKSB7CisgICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAgICBpZiAoISh3ZWlnaHQgJSAx
MDApICYmIHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkgewogICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZCh3ZWlnaHQpKSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjkzNSwxMiArNjk2MSw5IEBAIGJv
b2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlw
ZSYgbmFtZSwgYm9vbCBzdHJpY3QpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAotaW5saW5l
IGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMpCitpbmxpbmUgZG91Ymxl
IENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdp
dGhTdGF0ZSkKIHsKLSAgICBkb3VibGUgcmVzdWx0ID0gbV9wYXJzZWRDYWxjdWxhdGlvbiA/IG1f
cGFyc2VkQ2FsY3VsYXRpb24tPmRvdWJsZVZhbHVlKCkgOiB2YWx1ZS5mVmFsdWU7Ci0gICAgaWYg
KHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpCi0gICAgICAgIG1fcGFyc2Vk
Q2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZh
bHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkgPyB2YWx1ZVdpdGhTdGF0ZS5wYXJzZWRD
YWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFs
dWU7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSkKQEAgLTY5NTIsMTYgKzY5NzUsMTYgQEAgYm9vbCBDU1NQYXJzZXI6OmlzQ2FsY3VsYXRp
b24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW1heCgiKSk7CiB9CiAKLWlubGluZSBp
bnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGJvb2wgaXNQZXJjZW50OwogICAgIAotICAg
IGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKQotICAgICAgICBpc1BlcmNlbnQgPSBtX3BhcnNlZENh
bGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OworICAgIGlmICh2YWx1ZVdpdGhT
dGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpKQorICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhT
dGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OwogICAg
IGVsc2UKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgICAgIGlzUGVyY2VudCA9IHZhbHVlV2l0aFN0YXRlLnZh
bHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CiAKLSAgICBj
b25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpOworICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNlZERvdWJs
ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgCiAgICAgaWYgKGRvdWJsZVZhbHVlIDw9IDAuMCkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC02OTgxLDM0ICs3MDA0LDM0IEBAIGlubGluZSBpbnQgQ1NTUGFy
c2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBpbnQqIGNv
bG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFy
Z3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3Vy
cmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IGZpcnN0QXJndW1lbnRXaXRoU3RhdGUoKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5p
dFR5cGUgPSBGVW5rbm93bjsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlw
ZQotICAgIGlmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1v
ZGUpKQorICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdpdGhTdGF0ZSwgRkludGVnZXIs
IENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJbnRlZ2VyOwotICAgIGVsc2Ug
aWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisg
ICAgZWxzZSBpZiAodmFsaWRVbml0KGZpcnN0QXJndW1lbnRXaXRoU3RhdGUsIEZQZXJjZW50LCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKICAgICBlbHNlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRG
cm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgY29sb3JBcnJheVswXSA9IGNvbG9ySW50RnJv
bVZhbHVlKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
MzsgaSsrKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3Vy
cmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0
b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50
LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZh
bHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZh
bHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVl
LCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlk
VW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9t
VmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZy
b21WYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAgICAgfQogICAgIGlmIChwYXJzZUFscGhhKSB7
Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJl
bnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVl
LT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVu
dCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcs
JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJn
cy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVy
LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1l
bnRXaXRoU3RhdGUoKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3Vt
ZW50V2l0aFN0YXRlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKCpjdXJy
ZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICBkb3VibGUgZG91Ymxl
VmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoU3RhdGUpOwogICAgICAgICAvLyBDb252
ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGlu
IHRoZSByYW5nZSBbMCwgMjU2KSwKICAgICAgICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRp
b24gYWNyb3NzIGFsbCAyNTYgdmFsdWVzLgogICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGlj
X2Nhc3Q8aW50PihzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91Ymxl
VmFsdWUpKSAqIG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CkBAIC03MDI0LDI5ICs3MDQ3LDI5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIGludCogY29sb3JBcnJheSwgYm9vCiBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0
ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNl
QWxwaGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1
cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdEFyZ3VtZW50V2l0aFN0
YXRlKCphcmdzLT5jdXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBp
ZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICBpZiAoIXZhbGlkVW5pdChmaXJzdEFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIG5vcm1hbGl6ZSB0aGUgSHVl
IHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFuZCAxLjAKLSAgICBjb2xvckFy
cmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUoKmN1cnJlbnRWYWx1ZSwg
UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwLjA7Cisg
ICAgY29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKGZpcnN0
QXJndW1lbnRXaXRoU3RhdGUpKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOwogICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlm
IChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9w
ZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlk
VW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOwor
ICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRlBlcmNlbnQsIENTU1N0
cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5
W2ldID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEwMCwgcGFyc2VkRG91
YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSkgLyAxMDAuMDsgLy8g
bmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKKyAgICAgICAgY29sb3JBcnJheVtp
XSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAsIHBhcnNlZERvdWJs
ZShhcmd1bWVudFdpdGhTdGF0ZSkpKSAvIDEwMC4wOyAvLyBuZWVkcyB0byBiZSB2YWx1ZSBiZXR3
ZWVuIDAgYW5kIDEuMAogICAgIH0KICAgICBpZiAocGFyc2VBbHBoYSkgewotICAgICAgICBjdXJy
ZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
IT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcs
JykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4
dCgpOworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9k
ZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCph
cmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwg
Rk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4o
MSwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSk7
CisgICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRv
dWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxNTgsOSArNzE4MSw5IEBAIHN0cnVjdCBTaGFkb3dQYXJzZUNv
bnRleHQgewogICAgICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJr
aXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21taXRMZW5ndGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQg
Y29tbWl0TGVuZ3RoKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKICAg
ICB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBt
X3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAgICBpZiAoYWxsb3dY
KSB7CiAgICAgICAgICAgICB4ID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwpAQCAtNzIzOCw2
ICs3MjYxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGFk
b3coQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIEMKICAgICBTaGFkb3dQYXJzZUNvbnRl
eHQgY29udGV4dChwcm9wSWQsICp0aGlzKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAg
ICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkpKSB7CisgICAgICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIC8vIENo
ZWNrIGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlWYWx1
ZSAhPSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewpAQCAtNzI1MCwyMiArNzI3NCwyMiBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJz
ZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCiAgICAgICAg
ICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0
KCp2YWx1ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKSB7CiAgICAg
ICAgICAgICAvLyBXZSByZXF1aXJlZCBhIGxlbmd0aCBhbmQgZGlkbid0IGdldCBvbmUuIEludmFs
aWQuCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWxsb3dMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQmx1ciByYWRpdXMgbXVzdCBi
ZSBub24tbmVnYXRpdmUuCi0gICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0JsdXIgJiYgIXZh
bGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEEgbGVuZ3RoIGlzIGFsbG93ZWQgaGVyZS4g
IENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQuY29t
bWl0TGVuZ3RoKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdExlbmd0aCh2YWx1
ZVdpdGhTdGF0ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5z
ZXQpIHsKICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd1N0eWxlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxlKCp2
YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxlKHZhbHVlV2l0aFN0YXRlKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG90aGVyIHR5cGUgb2Yg
dmFsdWUgdGhhdCdzIG9rIGlzIGEgY29sb3IgdmFsdWUuCiAgICAgICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlZENvbG9yOwpAQCAtNzMyNSw5ICs3MzQ5LDEwIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGlmICghY3VycmVudFZhbHVlKQogICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgY3VycmVudFZhbHVlV2l0aFN0
YXRlKCpjdXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWVX
aXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3VycmVudFZh
bHVlKTsKKyAgICAgICAgb2Zmc2V0ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGN1cnJl
bnRWYWx1ZVdpdGhTdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gTm93IGZvciB0aGUgbWFzay4KQEAg
LTczNTMsMjAgKzczNzgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChDU1NQYXJzZXJW
YWx1ZUxpc3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZmxleEJhc2lzOwogCiAgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9
IGFyZ3MuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTnVt
YmVyIHwgRk5vbk5lZykpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1l
bnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdChhcmd1bWVudFdp
dGhTdGF0ZSwgRk51bWJlciB8IEZOb25OZWcpKSB7CiAgICAgICAgICAgICBpZiAoZmxleEdyb3cg
PT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3JvdyA9IHBhcnNlZERvdWJsZSgq
YXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICAgICAgICAgIGZsZXhH
cm93ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGZsZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4U2hyaW5r
ID0gcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7Ci0gICAg
ICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENh
bGNWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gcGFyc2VkRG91YmxlKGFy
Z3VtZW50V2l0aFN0YXRlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFwYXJzZWREb3VibGUoYXJn
dW1lbnRXaXRoU3RhdGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gZmxleCBvbmx5IGFsbG93cyBh
IGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFs
dWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICBmbGV4QmFzaXMgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyAz
IG51bWJlcnMgd2l0aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2YWx1ZSBpcyAwLiBFLmcuLCBmbGV4
OjEgMSAxIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3VtZW50LT5pZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxleEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2
ZShhcmd1bWVudC0+aWQsICphcmd1bWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoIWZsZXhCYXNp
cyAmJiAoYXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
aWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkp
CisgICAgICAgICAgICBmbGV4QmFzaXMgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGFyZ3VtZW50V2l0
aFN0YXRlLnZhbHVlKCkuaWQsIGFyZ3VtZW50V2l0aFN0YXRlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBOb3QgYSB2YWxpZCBhcmcgZm9yIGZsZXguCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC03NjM1LDkgKzc2NjEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0Zp
bmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAg
ICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21t
aXROdW1iZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogICAgIHsK
LSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFy
c2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBpZiAoIW1fdG9wKQogICAg
ICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVsc2Ug
aWYgKCFtX3JpZ2h0KQpAQCAtNzcwMiw5ICs3NzI4LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUJvcmRlckltYWdlU2xpY2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NCb3JkZXJJ
bWFnCiAgICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0
aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIC8vIEZJWE1FIGNhbGMoKSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVlcyBhcmUgbm90IGNyZWF0ZWQgeWV0
LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9uKCp2
YWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQs
IENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcigqdmFs
dWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9u
KHZhbHVlV2l0aFN0YXRlKSAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZJbnRlZ2VyIHwg
Rk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICAgICAgY29udGV4
dC5jb21taXROdW1iZXIodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRl
eHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRmlsbCkKICAgICAgICAgICAg
IGNvbnRleHQuY29tbWl0RmlsbCgpOwogICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkg
ewpAQCAtNzc0NiwxMyArNzc3MywxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0ZpbmFsQ29t
bWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAgICB2b2lk
IGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21taXROdW1i
ZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogICAgIHsKICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAgaWYg
KHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKyAgICAgICAg
aWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBy
aW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAgICBpZiAoIW1fdG9wKQogICAg
ICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CkBAIC03ODE0LDEwICs3
ODQxLDExIEBAIHByaXZhdGU6CiBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVF1YWQo
VW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQogewog
ICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwotICAgIHdoaWxlICgoY3VycmVudFZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIo
KSAmJiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUp
IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgewotICAgICAgICAgICAgY29u
dGV4dC5jb21taXROdW1iZXIoKmN1cnJlbnRWYWx1ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlOworICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgeworICAg
ICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqdmFsdWUpOworICAg
ICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICh2YWxpZFVuaXQodmFsdWVXaXRoU3Rh
dGUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1
dG8pKSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhTdGF0ZSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODc0LDEwICs3OTAyLDExIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGlmIChpIC0gaW5kZXhBZnRlclNsYXNoID49IDQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1
ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRl
KTsKIAogICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewogICAgICAgICAgICAgcmFkaWlb
MF1baV0gPSByYWRpdXM7CkBAIC03OTIwLDIwICs3OTQ5LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQogICAgIGlmIChudW0gIT0gMykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUmIGx2YWx1ZSA9ICptX3ZhbHVl
TGlzdC0+dmFsdWVBdCgwKTsKICAgICBDU1NQYXJzZXJWYWx1ZSYgb3AgPSAqbV92YWx1ZUxpc3Qt
PnZhbHVlQXQoMSk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHJ2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+
dmFsdWVBdCgyKTsKIAogICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihvcCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghdmFsaWRVbml0KGx2YWx1ZSwgRk51bWJlciB8
IEZOb25OZWcpIHx8ICF2YWxpZFVuaXQocnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+dmFs
dWVBdCgwKSk7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgcnZhbHVlV2l0aFN0YXRlKCpt
X3ZhbHVlTGlzdC0+dmFsdWVBdCgyKSk7CisgICAgaWYgKCF2YWxpZFVuaXQobHZhbHVlV2l0aFN0
YXRlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChydmFsdWVXaXRoU3RhdGUsIEZO
dW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFsdmFs
dWUuZlZhbHVlIHx8ICFydmFsdWUuZlZhbHVlKQorICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
aGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIGlmICghbHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkuZlZhbHVlIHx8ICFydmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0
aW8sIENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGx2
YWx1ZS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZS5mVmFsdWUpKSwgaW1w
b3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBD
U1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChsdmFsdWVX
aXRoU3RhdGUudmFsdWUoKS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpLCBpbXBvcnRhbnQpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC04MTI3LDkgKzgxNTcsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRl
ZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAv
LyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IGEgbnVtZXJpYyByYWRp
dXMuCiAgICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQp
IHsKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMuCiAgICAgICAgIGlmICghYXJn
dW1lbnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdy
YWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJn
dW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhl
IGZpcnN0IHJhZGl1cy4KICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CkBAIC04MTY0
LDkgKzgxOTYsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENT
U1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KICAgICAgICAg
aWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwogICAgIH0KIAogICAgIC8vIFdl
IG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3BzICgwIG9yIG1vcmUpLgpAQCAtODIz
NiwxMSArODI3MCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkTGluZWFyR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBpZiAoIWFyZ3VtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRX
aXRoU3RhdGUoKmFyZ3VtZW50KTsKIAogICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAg
ICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkFuZ2xl
LCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICBpZiAodmFsaWRVbml0KGFyZ3VtZW50
V2l0aFN0YXRlLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0
QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAK
ICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CkBAIC04
Mzc3LDggKzg0MTIsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogCiAgICAgaWYgKCFzaGFwZVZhbHVlICYmICFz
aXplVmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
IGhTaXplV2l0aFN0YXRlKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2YWxpZFVuaXQoaFNpemVX
aXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIGhvcml6b250YWxT
aXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhTaXplV2l0aFN0YXRlKTsKICAgICAg
ICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04Mzg2LDggKzg0MjIsOSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2
U2l6ZVdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICBpZiAodmFsaWRVbml0KHZTaXplV2l0
aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNpemUg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodlNpemVXaXRoU3RhdGUpOwogCiAgICAgICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQp
CkBAIC04NDE4LDI4ICs4NDU1LDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgaWYg
KCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENT
U1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWFyZ3Vt
ZW50KQorICAgIGlmICghYXJncy0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdEFyZ3VtZW50V2l0aFN0YXRlKCphcmdz
LT5jdXJyZW50KCkpOworCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExv
b2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0
cmljdE1vZGUpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdp
dGhTdGF0ZSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICByZXN1bHQtPnNldEFu
Z2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFyZ3VtZW50V2l0aFN0YXRlKSk7
CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UICYmIGVxdWFsSWdub3JpbmdDYXNlKCphcmd1bWVudCwgInRvIikpIHsKKyAgICB9IGVsc2Ug
aWYgKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmlyc3RBcmd1bWVudFdpdGhTdGF0
ZSwgInRvIikpIHsKICAgICAgICAgLy8gdG8gWyBbbGVmdCB8IHJpZ2h0XSB8fCBbdG9wIHwgYm90
dG9tXSBdCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFy
Z3VtZW50KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dEFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOworICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVuZFgsIGVuZFk7CiAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247CiAgICAgICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5
d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVG
cm9tU2lkZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYg
KCFsb2NhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtODQ0OCwxMSArODQ4
NiwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBlbmRZID0gbG9jYXRpb247CiAKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIG5leHRBcmd1bWVudCA9IGFyZ3MtPm5leHQo
KTsKKyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlz
SG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKm5l
eHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CiAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVuZFgpCkBA
IC04NTA2LDYgKzg1NDQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgIC8vIFsgZWxs
aXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0gXSB8CiAgICAgLy8gWyBbIGNp
cmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdp
dGhTdGF0ZSgqYXJndW1lbnQpOwogICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICAgICAgYm9vbCBiYWRJZGVudCA9IGZh
bHNlOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+aWQpIHsKQEAgLTg1MzMsMTggKzg1
NzIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KCphcmd1bWVudCwg
Rkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICB9IGVsc2UgaWYgKHZhbGlkVW5pdChhcmd1
bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogCiAgICAgICAgICAgICBpZiAo
c2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAKICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTaXpl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2U2l6ZVdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAg
ICAgICAgaWYgKHZhbGlkVW5pdCh2U2l6ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
eworICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2U2l6ZVdpdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAg
ICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgICAgIGlmICghYXJndW1l
bnQpCkBAIC04NjA4LDM4ICs4NjQ4LDM5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdy
YWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQsIGJvb2wgZXhwZWN0Q29tbWEp
CiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50
KCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKICAg
ICBib29sIHByZXZpb3VzU3RvcFdhc01pZHBvaW50ID0gdHJ1ZTsKIAogICAgIC8vIE5vdyBsb29r
IGZvciBjb2xvciBzdG9wcy4KLSAgICB3aGlsZSAoY3VycmVudFZhbHVlKSB7CisgICAgd2hpbGUg
KHZhbHVlKSB7CiAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQg
c3RvcC4KICAgICAgICAgaWYgKGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29t
bWEoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSB2
YWx1ZUxpc3QubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUpCisgICAgICAg
ICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDxj
b2xvci1zdG9wPiA9IDxjb2xvcj4gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdPwogICAgICAg
ICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwotICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJz
ZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICpjdXJyZW50VmFsdWUpOworICAgICAgICBz
dG9wLm1fY29sb3IgPSBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICp2YWx1ZSk7
CiAgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKSB7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNT
dG9wV2FzTWlkcG9pbnQpIC8vIDIgbWlkcG9pbnRzIGluIGEgcm93IGlzIG5vdCBhbGxvd2VkLiBU
aGlzIGFsc28gY2F0Y2hlcyBzdGFydGluZyB3aXRoIGEgbWlkcG9pbnQuCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBzdG9wLmlzTWlkcG9pbnQgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0
KCk7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CiAKICAgICAgICAgcHJl
dmlvdXNTdG9wV2FzTWlkcG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7CiAKLSAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFsdWUpOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgIGlmICh2YWx1ZSkg
eworICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKnZh
bHVlKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgICAgICAgICAgICAgIHZh
bHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcC5pc01p
ZHBvaW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtODg0
MCwxNCArODg4MSwxNSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlSW1h
Z2VSZXNvbHV0aW9uKCkKIAogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIGlmICghaGF2ZUZyb21J
bWFnZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpIHsKICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlk
KSk7CiAgICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlm
ICghaGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25hcCkgewogICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKICAgICAgICAgICAgIGhhdmVTbmFwID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICgh
aGF2ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlJlc29sdXRpb24gfCBGTm9uTmVn
KSAmJiB2YWx1ZS0+ZlZhbHVlID4gMCkgewotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGF2
ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUmVzb2x1dGlvbiB8IEZO
b25OZWcpICYmIHZhbHVlLT5mVmFsdWUgPiAwKSB7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKSk7CiAgICAgICAgICAg
ICBoYXZlUmVzb2x1dGlvbiA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC05MjE5LDI5ICs5MjYxLDMwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAg
ICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwogICAgIHVuc2ln
bmVkIGFyZ051bWJlciA9IDA7CiAgICAgd2hpbGUgKGFyZ3VtZW50KSB7CisgICAgICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmd1bWVudCk7CiAgICAgICAg
IENTU1BhcnNlcjo6VW5pdHMgdW5pdCA9IGluZm8udW5pdCgpOwogCiAgICAgICAgIGlmIChpbmZv
LnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVy
YXRpb24gJiYgYXJnTnVtYmVyID09IDMpIHsKICAgICAgICAgICAgIC8vIDR0aCBwYXJhbSBvZiBy
b3RhdGUzZCgpIGlzIGFuIGFuZ2xlIHJhdGhlciB0aGFuIGEgYmFyZSBudW1iZXIsIHZhbGlkYXRl
IGl0IGFzIHN1Y2gKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgRkFuZ2xl
LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0
aFN0YXRlLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0g
MikgewogICAgICAgICAgICAgLy8gM3JkIHBhcmFtIG9mIHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJl
IGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVu
Z3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50
V2l0aFN0YXRlLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVy
KSB7CiAgICAgICAgICAgICAvLyAxc3QgcGFyYW0gb2YgdHJhbnNsYXRlWigpIGNhbm5vdCBiZSBh
IHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0
aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdp
dGhTdGF0ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIp
IHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiBwZXJzcGVjdGl2ZSgpIG11c3QgYmUgYSBu
b24tbmVnYXRpdmUgbnVtYmVyIChkZXByZWNhdGVkKSBvciBsZW5ndGguCi0gICAgICAgICAgICBp
ZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0
ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsaWRVbml0KCph
cmd1bWVudCwgdW5pdCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlk
VW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJy
ZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICB0cmFuc2Zv
cm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhT
dGF0ZSkpOwogCiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAo
IWFyZ3VtZW50KQpAQCAtOTMxMSwyMSArOTM1NCwyMiBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0Zp
bHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJz
ZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqYXJncy5jdXJyZW50KCk7
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwg
Rk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYg
KCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHZhbHVlLmZWYWx1ZTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGVkIHZh
bHVlcy4KKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBhcmd1bWVudFdpdGhTdGF0ZS52YWx1
ZSgpLmZWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2F0dXJhdGUgYW5kIENv
bnRyYXN0IGFsbG93IHZhbHVlcyBvdmVyIDEwMCUuCiAgICAgICAgICAgICBpZiAoZmlsdGVyVHlw
ZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb24KICAgICAg
ICAgICAgICAgICAmJiBmaWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFz
dEZpbHRlck9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhBbGxvd2VkID0g
dmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6
IDEuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dlZCA9IGFyZ3VtZW50V2l0aFN0
YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAx
MDAuMCA6IDEuMDsKICAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID4gbWF4QWxsb3dlZCkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYW1v
dW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0
KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+
KGFyZ3VtZW50V2l0aFN0YXRlLnZhbHVlKCkudW5pdCkpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC05MzM1LDExICs5Mzc5LDEyIEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NT
RmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1Bh
cnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYXJncy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICphcmdzLmN1cnJlbnQo
KTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQs
IENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJn
dW1lbnRXaXRoU3RhdGUoKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRV
bml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBmaWx0ZXJW
YWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVz
LgorICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShhcmd1bWVudFdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4oYXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS51bml0KSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNDksMTEgKzkzOTQsMTEg
QEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0
aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSYgYXJndW1lbnQgPSAqYXJncy5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXZh
bGlkVW5pdChhcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLmN1cnJlbnQoKSk7
CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkFuZ2xlLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC05MzYzLDExICs5NDA4LDExIEBAIFBhc3NSZWZQdHI8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRz
KENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAg
IGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50
ID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQs
IEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIENTU1BhcnNl
clZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLmN1cnJlbnQoKSk7CisgICAg
ICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC05NTQ0LDggKzk1ODksOSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VUcmFuc2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHBy
b3BJZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQo
Km1fdmFsdWVMaXN0LT5jdXJyZW50KCksIEZMZW5ndGgpKQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsK
KyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZMZW5ndGgpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSkKICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC05ODAxLDggKzk4NDcsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VGV4dEluZGVudCgpCiAKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwogICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBpZiAoIWhhc0xlbmd0aE9y
UGVyY2VudGFnZSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0g
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1
ZSkpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqdmFs
dWUpOworICAgICAgICBpZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFnZSAmJiB2YWxpZFVuaXQodmFs
dWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpKTsKICAgICAg
ICAgICAgIGhhc0xlbmd0aE9yUGVyY2VudGFnZSA9IHRydWU7CiAgICAgICAgIH0KICNpZiBFTkFC
TEUoQ1NTM19URVhUKQpAQCAtOTk3OCwyMSArMTAwMjUsMTggQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0
YXRlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCiB7Ci0gICAgQVNTRVJU
KGlzQ2FsY3VsYXRpb24odmFsdWUpKTsKKyAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbih2YWx1ZVdp
dGhTdGF0ZSkpOwogICAgIAotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1
bmN0aW9uLT5hcmdzLmdldCgpOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8
ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVCghbV9w
YXJzZWRDYWxjdWxhdGlvbik7Ci0gICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IENTU0NhbGNWYWx1
ZTo6Y3JlYXRlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAqYXJncywgcmFuZ2UpOwotICAgIAotICAg
IGlmICghbV9wYXJzZWRDYWxjdWxhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVCghdmFsdWVXaXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRpb24oKSk7CisgICAgdmFsdWVXaXRo
U3RhdGUuc2V0UGFyc2VkQ2FsY3VsYXRpb24oQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWVXaXRo
U3RhdGUudmFsdWUoKS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdlKSk7CiAgICAgCi0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuICEhdmFsdWVXaXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRp
b24oKTsKIH0KIAogI2RlZmluZSBFTkRfVE9LRU4gMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4
IDBlMjc0NDk0MTZlNWI3YzdjZGEyMDc5NGY2NzlkMmM3MzA3MDI4NDAuLjhjM2QwZmEyZDk3OTQ1
YjViYzgwMmEyYTZhZDA4ZTgzZmE5ZjBlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2
LDYgKzU2LDcgQEAgY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTQmFzaWNTaGFwZTsKIGNs
YXNzIENTU0Jhc2ljU2hhcGVJbnNldDsKIGNsYXNzIENTU0dyaWRMaW5lTmFtZXNWYWx1ZTsKK2Ns
YXNzIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVt
ZW50OwogY2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwpAQCAtOTIsNyArOTMsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBT
dHJpbmcmLCBib29sIHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3Rl
bUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJik7Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxp
ZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50LCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBp
ZGVudCwgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmKTsKICAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsK
ICAgICBzdGF0aWMgUGFzc1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5l
U3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKQEAgLTI4
MCw3ICsyODEsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUZXh0
SW5kZW50KCk7CiAgICAgCiAgICAgYm9vbCBwYXJzZUxpbmVCb3hDb250YWluKGJvb2wgaW1wb3J0
YW50KTsKLSAgICBib29sIHBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmLCBDYWxjdWxh
dGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UpOworICAgIGJvb2wgcGFyc2VDYWxjdWxhdGlvbihDU1NQ
YXJzZXJWYWx1ZVdpdGhTdGF0ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CiAK
ICAgICBib29sIHBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7CiAgICAgYm9vbCBw
YXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOwpAQCAtNDAyLDcgKzQwMyw3
IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZVZpZXdwb3J0
UnVsZSgpOwogI2VuZGlmCiAKLSAgICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBQYXNzUmVmPENTU1By
aW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUmKTsKICAgICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAgc3RhdGljIFVSTCBjb21wbGV0
ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAtNDk2
LDggKzQ5Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBw
cmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciog
c3VmZml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpOwogICAgIGJvb2wgaW5TaG9ydGhhbmQoKSBj
b25zdCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0KIAotICAgIGJvb2wgdmFsaWRXaWR0
aChDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgdmFsaWRIZWlnaHQoQ1NTUGFyc2VyVmFsdWUm
KTsKKyAgICBib29sIHZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmKTsKKyAgICBi
b29sIHZhbGlkSGVpZ2h0KENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJik7CiAKICAgICB2b2lkIGRl
bGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwogCkBAIC01NzYsOCArNTc3LDYgQEAgcHJpdmF0ZToK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4+IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsKIAotICAgIFJlZlB0cjxDU1NDYWxj
VmFsdWU+IG1fcGFyc2VkQ2FsY3VsYXRpb247Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNv
dXJjZURhdGFMaXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFjazsKIAogICAgIC8vIGRlZmluZXMg
dW5pdHMgYWxsb3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdApA
QCAtNjExLDE2ICs2MTAsMTYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTG9nZ2luZ0Vycm9ycygp
OwogICAgIHZvaWQgbG9nRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJl
cik7CiAKLSAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiwgVW5p
dHMsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGJvb2wgdmFsaWRDYWxjdWxhdGlvblVuaXQoQ1NT
UGFyc2VyVmFsdWVXaXRoU3RhdGUmLCBVbml0cyk7CiAKICAgICBib29sIHNob3VsZEFjY2VwdFVu
aXRMZXNzVmFsdWVzKENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCi0g
ICAgaW5saW5lIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5p
dGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9O
b3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSB7IHJldHVybiB2YWxpZFVuaXQodmFsdWUsIHVuaXRm
bGFncywgbV9jb250ZXh0Lm1vZGUsIHJlbGVhc2VDYWxjKTsgfQotICAgIGJvb2wgdmFsaWRVbml0
KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUsIFJlbGVhc2VQYXJzZWRDYWxj
VmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUp
OworICAgIGlubGluZSBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFs
dWUsIFVuaXRzIHVuaXRmbGFncykgeyByZXR1cm4gdmFsaWRVbml0KHZhbHVlLCB1bml0ZmxhZ3Ms
IG1fY29udGV4dC5tb2RlKTsgfQorICAgIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlV2l0
aFN0YXRlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCiAgICAgYm9vbCBwYXJzZUJvcmRlcklt
YWdlUXVhZChVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBjb2xv
ckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGRvdWJsZSBwYXJzZWREb3VibGUo
Q1NTUGFyc2VyVmFsdWUmLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VD
YWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICBpbnQgY29sb3JJbnRGcm9t
VmFsdWUoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmKTsKKyAgICBkb3VibGUgcGFyc2VkRG91Ymxl
KENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJik7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFRyYW5z
Zm9ybU9wZXJhdGlvbkluZm87CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRlck9wZXJhdGlvbkluZm87
CkBAIC02OTMsNiArNjkyLDIzIEBAIGlubGluZSBpbnQgY3NzeXlsZXgodm9pZCogeXlsdmFsLCBD
U1NQYXJzZXIqIHBhcnNlcikKICAgICByZXR1cm4gcGFyc2VyLT5sZXgoeXlsdmFsKTsKIH0KIAor
Y2xhc3MgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsgfQorCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIG9wZXJhdG9yIENTU1BhcnNlclZhbHVlJigpIHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworICAgIENTU0NhbGNWYWx1ZSogcGFyc2VkQ2FsY3VsYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3BhcnNlZENhbGN1bGF0aW9uLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRQYXJzZWRDYWxjdWxhdGlvbihSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxjdWxhdGlvbikgeyBt
X3BhcnNlZENhbGN1bGF0aW9uID0gY2FsY3VsYXRpb247IH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIENTU1BhcnNlclZhbHVlJiBtX3ZhbHVlOworICAgICAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVl
PiBtX3BhcnNlZENhbGN1bGF0aW9uOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gQ1NTUGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKaW5kZXgg
ODQ3OWFkZDQwYzJmNTdkYzE2YjI3NjA1ZDlmN2YyMTRhM2Q1OTcxZC4uMjE5MWRmZWJkMzVhY2Zj
NmQ2ZjZjZmQwNmNmYjc1M2FmODY1MmMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5j
cHAKQEAgLTM1LDExICszNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
IHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwot
ICAgIGlmICghdmFsdWUpCisgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3Rh
dGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwogCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVl
LT5pZDsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKIAog
ICAgIGJvb2wgdmFsaWRfcHJpbWl0aXZlID0gZmFsc2U7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZWRWYWx1ZTsKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICBpZCA+
PSBDU1NWYWx1ZVN1cGVyKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1
ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1By
b3BlcnR5RG9taW5hbnRCYXNlbGluZToKQEAgLTg3LDggKzg3LDggQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXNrOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRl
LnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRl
LnZhbHVlKCkuc3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAg
ICBpZiAocGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
ICAgICAgICAgfQpAQCAtMTAxLDcgKzEwMSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1Zh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTWl0ZXJsaW1pdDogICAvLyA8bWl0ZXJsaW1p
dD4gfCBpbmhlcml0Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUs
IEZOdW1iZXIgfCBGTm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRk5vbk5lZywgU1ZH
QXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0
cm9rZUxpbmVqb2luOiAgIC8vIG1pdGVyIHwgcm91bmQgfCBiZXZlbCB8IGluaGVyaXQKQEAgLTEx
OCw3ICsxMTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlTdG9wT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3BlcnR5
Rmxvb2RPcGFjaXR5OgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5p
dCgqdmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOworICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRk51
bWJlciB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVNoYXBlUmVuZGVyaW5nOgpAQCAtMTY3LDggKzE2Nyw4IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICAgICAgRkFMTFRIUk9VR0g7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5R2x5
cGhPcmllbnRhdGlvbkhvcml6b250YWw6IC8vIDxhbmdsZT4gKHJlc3RyaWN0ZWQgdG8gX2RlZ18g
cGVyIFNWRyAxLjEgc3BlYykgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVH
KTsKKyAgICAgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwogCiAgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUp
CiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTE4OSwxNiArMTg5LDE2
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50Ojpj
cmVhdGVDdXJyZW50Q29sb3IoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKChpZCA+PSBDU1NWYWx1
ZUFjdGl2ZWJvcmRlciAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1Zh
bHVlTWVudSkKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVD
b2xvcihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGlkKSk7Ci0gICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkgeworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgUkdCQTMyIGMg
PSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5u
ZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29sb3JGcm9tVmFsdWUoKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kQ29sb3IodmFsdWUtPnN0cmluZywgYyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklB
bmRDb2xvcih2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZywgYyk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0
ZVVSSUFuZE5vbmUodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmROb25lKHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkuc3RyaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3Jl
YXRlVVJJKHZhbHVlLT5zdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR1BhaW50OjpjcmVhdGVVUkkodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcpOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNWR1Bh
aW50KCk7CiAKQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIGlmICgoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlk
IDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwKICAgICAgICAgICAgKGlkID49IENTU1ZhbHVlQWxp
Y2VibHVlICYmIGlkIDw9IENTU1ZhbHVlWWVsbG93Z3JlZW4pKQotICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRlRnJvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKKyAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUZyb21TdHJpbmcodmFsdWVXaXRo
U3RhdGUudmFsdWUoKS5zdHJpbmcpOwogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUN1
cnJlbnRjb2xvcikKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUN1
cnJlbnRDb2xvcigpOwogICAgICAgICBlbHNlIC8vIFRPRE8gOiBzdmdjb2xvciAoaWNjQ29sb3Ip
CkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0
cm9rZVdpZHRoOiAgICAgICAgIC8vIDxsZW5ndGg+IHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VEYXNob2Zmc2V0OgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVu
aXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBG
UGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NT
UHJvcGVydHlTdHJva2VEYXNoYXJyYXk6ICAgICAvLyBub25lIHwgPGRhc2hhcnJheT4gfCBpbmhl
cml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCkBAIC0yNTAsMTUgKzI1MCwxNSBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NT
VmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoLCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRlTW9kZSk7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOiAgICAvLyA8dXJp
PiB8IG5vbmUgfCBpbmhlcml0CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKICAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRy
dWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUodmFsdWUtPnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVl
LT51bml0KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcs
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVu
aXQpOwogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgogICAgIGNhc2UgQ1NTUHJvcGVydHlYOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlZOgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpOworICAgICAgICB2YWxpZF9wcmltaXRp
dmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIElmIHlvdSBjcmFz
aCBoZXJlLCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEgY3NzIHByb3BlcnR5IGFuZCBhcmUgbm90
IGhhbmRsaW5nIGl0CkBAIC0zMTgsMTQgKzMxOCwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKHZh
bGlkX3ByaW1pdGl2ZSkgewogICAgICAgICBpZiAoaWQgIT0gMCkKICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykK
LSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZS0+c3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwot
ICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZh
bHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCi0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxvd2luZ01hcmdp
blF1aXJrKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKLSAgICAg
ICAgaWYgKGlzQ2FsY3VsYXRpb24oKnZhbHVlKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9uLnJlbGVhc2UoKSk7
CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZywgKENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCk7Cisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIChDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQpOwor
ICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2Vy
VmFsdWU6OlFfRU1TKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1
ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOworICAgICAgICBpZiAoaXNDYWxjdWxhdGlv
bih2YWx1ZVdpdGhTdGF0ZSkpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRpb24oKSk7CiAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQogICAgIGlmICghcGFyc2VkVmFsdWUgfHwg
KG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWluU2hvcnRoYW5kKCkpKQpAQCAtMzQxLDkgKzM0
MSwxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ryb2tlRGFz
aGFycmF5KCkKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwogICAgIGJvb2wgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICB3aGlsZSAodmFsdWUp
IHsKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIENTU1BhcnNl
clZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZl
KQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24n
dCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCiAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gMCkK
ICAgICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKHZhbHVlLT5pZCkpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0tIWikKQEAgLTM1Myw3ICszNTUsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKICAgICAgICAgICAgIHZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcmV0LnJl
bGVhc2UoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242718</attachid>
            <date>2014-12-06 10:20:05 -0800</date>
            <delta_ts>2014-12-08 21:07:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141206102041.patch</filename>
            <type>text/plain</type>
            <size>115817</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmNjNlMjA0M2U5ZjYx
Y2U0ZDc0ZmE3MGI5ZDE5NWU4NWFiNjQ1ZS4uNWVkY2VlOGRkMTFjMTU5YjIwMWU4MGI2MjE2ZjE2
ZjJlMzAyYWZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJp
ZCBvZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50
IGluCisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENh
bGN1bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAg
SW5zdGVhZCwgaW50cm9kdWNlIGEgbmV3IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHR5cGUgd2hp
Y2ggd3JhcHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2Vk
IGNhbGN1bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxh
dGlvbiB2YWx1ZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3Vs
YXRpb24gdmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQ
SSBpcyBhbHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIg
bmVlZCB0byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91
bGQgYmUKKyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTEyLTA1ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVp
emFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEkgY2Fubm90IGFjdGl2YXRlIGxpbmtzIG9u
IHRoZSBtb2JpbGUgdmVyc2lvbiBvZiBuZXdzLmdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKaW5kZXggMzUyYjEwZjBjMzA3YjQ1Njk0MzkxOWQxYWEzZDY2MWZiYWJiYzFmZS4uOWQ4
MWI1NjAxMjBjODg5NzJkZWFiOGQ5ZTk5OWIyZGU4Mzk5NTlmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKQEAgLTE1ODEsMjAgKzE1ODEsMjIgQEAgVVJMIENTU1BhcnNlcjo6Y29tcGxldGVV
UkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29u
dGV4dCwgdXJsKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENT
U1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1Zh
bHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRp
b25Vbml0KENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSwgVW5pdHMgdW5p
dGZsYWdzKQogewogICAgIGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0ZmxhZ3MgJiBGTm9u
TmVnOwogCi0gICAgaWYgKCFwYXJzZUNhbGN1bGF0aW9uKHZhbHVlLCBtdXN0QmVOb25OZWdhdGl2
ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpKQor
ICAgIGlmICghcGFyc2VDYWxjdWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSwgbXVzdEJlTm9uTmVnYXRp
dmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQVNTRVJUKHZhbHVlV2l0aFN0YXRlLnBhcnNl
ZENhbGN1bGF0aW9uKCkpOworICAgIENTU0NhbGNWYWx1ZSYgcGFyc2VkQ2FsY3VsYXRpb24gPSAq
dmFsdWVXaXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRpb24oKTsKICAgICBib29sIGIgPSBmYWxzZTsK
LSAgICBzd2l0Y2ggKG1fcGFyc2VkQ2FsY3VsYXRpb24tPmNhdGVnb3J5KCkpIHsKKyAgICBzd2l0
Y2ggKHBhcnNlZENhbGN1bGF0aW9uLmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6
CiAgICAgICAgIGIgPSAodW5pdGZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAo
dW5pdGZsYWdzICYgRkludGVnZXIpICYmIG1fcGFyc2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCisg
ICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIHBhcnNlZENhbGN1bGF0
aW9uLmlzSW50KCkpCiAgICAgICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAgaWYgKGIgJiYgbXVz
dEJlTm9uTmVnYXRpdmUgJiYgbV9wYXJzZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQorICAg
ICAgICBpZiAoYiAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBwYXJzZWRDYWxjdWxhdGlvbi5pc05l
Z2F0aXZlKCkpCiAgICAgICAgICAgICBiID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ2FsY0xlbmd0aDoKQEAgLTE2MDIsNyArMTYwNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxp
ZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywg
UmVsCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6CiAgICAgICAgIGIgPSAo
dW5pdGZsYWdzICYgRlBlcmNlbnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0QmVOb25OZWdhdGl2
ZSAmJiBtX3BhcnNlZENhbGN1bGF0aW9uLT5pc05lZ2F0aXZlKCkpCisgICAgICAgIGlmIChiICYm
IG11c3RCZU5vbk5lZ2F0aXZlICYmIHBhcnNlZENhbGN1bGF0aW9uLmlzTmVnYXRpdmUoKSkKICAg
ICAgICAgICAgIGIgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2Vu
dExlbmd0aDoKQEAgLTE2MjMsOCArMTYyNSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1
bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsCiAg
ICAgY2FzZSBDYWxjT3RoZXI6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWIgfHwg
cmVsZWFzZUNhbGMgPT0gUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkKLSAgICAgICAgbV9wYXJzZWRD
YWxjdWxhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKCFiKQorICAgICAgICB2YWx1ZVdpdGhTdGF0
ZS5zZXRQYXJzZWRDYWxjdWxhdGlvbihudWxscHRyKTsKICAgICByZXR1cm4gYjsgICAgCiB9CiAK
QEAgLTE2MzQsMjMgKzE2MzYsMjMgQEAgaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2Nl
cHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHUKICAgICByZXR1
cm4gKHVuaXRmbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZW
YWx1ZSB8fCBjc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9
PSBTVkdBdHRyaWJ1dGVNb2RlKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9v
bCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRo
U3RhdGUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkQ2FsY3Vs
YXRpb25Vbml0KHZhbHVlLCB1bml0ZmxhZ3MsIHJlbGVhc2VDYWxjKTsKKyAgICBpZiAoaXNDYWxj
dWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSkpCisgICAgICAgIHJldHVybiB2YWxpZENhbGN1bGF0aW9u
VW5pdCh2YWx1ZVdpdGhTdGF0ZSwgdW5pdGZsYWdzKTsKICAgICAgICAgCiAgICAgYm9vbCBiID0g
ZmFsc2U7Ci0gICAgc3dpdGNoICh2YWx1ZS51bml0KSB7CisgICAgc3dpdGNoICh2YWx1ZVdpdGhT
dGF0ZS52YWx1ZSgpLnVuaXQpIHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSOgogICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIg
JiYgc2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXModmFsdWUsIHVuaXRmbGFncywgY3NzUGFyc2Vy
TW9kZSkpIHsKLSAgICAgICAgICAgIHZhbHVlLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkg
PyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYIDoKKyAgICAgICAgaWYgKCFiICYmIHNob3VsZEFj
Y2VwdFVuaXRMZXNzVmFsdWVzKHZhbHVlV2l0aFN0YXRlLCB1bml0ZmxhZ3MsIGNzc1BhcnNlck1v
ZGUpKSB7CisgICAgICAgICAgICB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPSAodW5pdGZs
YWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bml0ZmxhZ3MgJiBGQW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ERUcgOiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TKTsKICAgICAgICAgICAgIGIgPSB0
cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIp
ICYmIHZhbHVlLmlzSW50KQorICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2Vy
KSAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7
Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFs
dWUuaXNJbnQgJiYgdmFsdWUuZlZhbHVlID4gMCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0Zmxh
Z3MgJiBGUG9zaXRpdmVJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlzSW50ICYm
IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlID4gMCkKICAgICAgICAgICAgIGIgPSB0cnVl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRToKQEAgLTE2OTYsMjAgKzE2OTgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3Mg
JiBGTm9uTmVnICYmIHZhbHVlLmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdGZsYWdzICYg
Rk5vbk5lZyAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIg
PSBmYWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYg
KGIgJiYgc3RkOjppc2luZih2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpCiAgICAgICAg
IGIgPSBmYWxzZTsKICAgICByZXR1cm4gYjsKIH0KIAotaW5saW5lIFBhc3NSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYg
dmFsdWVXaXRoU3RhdGUpCiB7Ci0gICAgaWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pIHsKLSAgICAg
ICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlm
ICh2YWx1ZVdpdGhTdGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpKSB7CisgICAgICAgIEFTU0VSVChp
c0NhbGN1bGF0aW9uKHZhbHVlV2l0aFN0YXRlKSk7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwogICAg
IH0KIAorICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9IHZhbHVlV2l0aFN0YXRlOwogI2lmIEVO
QUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVF
UlkpCiAgICAgQVNTRVJUKCh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCiAgICAgICAg
IHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51
bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQpAQCAtMTczOSw0MyArMTc0Miw0NCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAnLyc7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZFdp
ZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZFdpZHRoKENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKIHsKLSAgICBpbnQgaWQgPSB2
YWx1ZS5pZDsKKyAgICBpbnQgaWQgPSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlkOwogICAgIGlm
IChpZCA9PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8
fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRN
YXhDb250ZW50IHx8IGlkID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBD
U1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biAhaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsK
KyAgICByZXR1cm4gIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZyk7CiB9CiAKIC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgd2l0aCB2YWxp
ZFdpZHRoIHdoZW4gd2Ugc3VwcG9ydCBmaXQtY29udGVudCwgZXQgYWwsIGZvciBoZWlnaHRzLgot
Ym9vbCBDU1NQYXJzZXI6OnZhbGlkSGVpZ2h0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wg
Q1NTUGFyc2VyOjp2YWxpZEhlaWdodChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWVXaXRo
U3RhdGUpCiB7Ci0gICAgaW50IGlkID0gdmFsdWUuaWQ7CisgICAgaW50IGlkID0gdmFsdWVXaXRo
U3RhdGUudmFsdWUoKS5pZDsKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQg
PT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biAhaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsK
KyAgICByZXR1cm4gIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZyk7CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVy
LCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmll
ciwgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGlmIChp
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGlkZW50aWZpZXIpOwotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFs
dWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2
YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKLSAgICBpZiAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1ZXICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19W
TUFYKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsK
KworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1
ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgp
LnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCisgICAgICAgIHJldHVybiBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOworICAgIGlmICh2YWx1ZVdp
dGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0
ZSk7CisgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1ZXICYmIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1ZNQVgpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoU3RhdGUpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikg
fHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19EUENNKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlKTsKKyAgICBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICNlbmRpZgotICAgIGlmICh2YWx1ZS51
bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVBbGxvd2luZ01hcmdpblF1aXJrKHZhbHVlLmZWYWx1ZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19FTVMpOwotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5y
ZWxlYXNlKCkpOworICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFy
c2VyVmFsdWU6OlFfRU1TKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhT
dGF0ZSkpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0
aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBA
IC0xNzk4LDE5ICsxODAyLDEzIEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5
Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTCiAKIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
IHsKLSAgICBpZiAoIW1fdmFsdWVMaXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgaWYg
KCF2YWx1ZSkKKyAgICBpZiAoIW1fdmFsdWVMaXN0IHx8ICFtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBOb3RlOiBtX3BhcnNlZENhbGN1bGF0
aW9uIGlzIHVzZWQgdG8gcGFzcyB0aGUgY2FsYyB2YWx1ZSB0byB2YWxpZFVuaXQgYW5kIHRoZW4g
Y2xlYXJlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gRklYTUU6IFRoaXMg
aXMgdG8gYXZvaWQgaGF2aW5nIHRvIHBhc3MgcGFyc2VkQ2FsYyB0byBhbGwgdmFsaWRVbml0IGNh
bGxlcnMuCi0gICAgQVNTRVJUKCFtX3BhcnNlZENhbGN1bGF0aW9uKTsKKyAgICAvLyBLZWVwIHRy
YWNrIG9mIHBhcnNpbmcgc3RhdGUuCisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVX
aXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwogICAgIAotICAgIENTU1ZhbHVlSUQg
aWQgPSB2YWx1ZS0+aWQ7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aFN0YXRlLnZhbHVl
KCkuaWQ7CiAKICAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVM
aXN0LT5zaXplKCk7CiAKQEAgLTE4NzQsNyArMTg3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U1Byb3BlcnR5Q2xpcDogICAgICAgICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRvIHwgaW5oZXJp
dAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24pCisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCku
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gcGFy
c2VDbGlwU2hhcGUocHJvcElkLCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsKIApAQCAtMTkz
Miw3ICsxOTMwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
clZlcnRpY2FsU3BhY2luZzoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRV
bml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52
ZXJ0IHwgaW5oZXJpdAogICAgICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBh
ZGRpdGlvbmFsIGtleXdvcmQuCkBAIC0xOTg1LDYgKzE5ODMsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
IC8vIHpvb20taW4gfCB6b29tLW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Vi
a2l0LWdyYWJiaW5nIHwgLXdlYmtpdC16b29tLWluIHwKICAgICAgICAgLy8gLXdlYmtpdC16b29t
LW91dCBdIF0gfCBpbmhlcml0CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7Cisg
ICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpOwog
ICAgICAgICB3aGlsZSAodmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1h
Z2U7CiAgICAgICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpIHsKQEAgLTIwMjcsNyArMjAyNiw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPm5leHQoKTsgLy8gY29tbWEKICAgICAgICAgfQogICAgICAgICBpZiAo
bGlzdCkgewotICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeyAvLyBubyB2YWx1ZSBhZnRlciB1cmwg
bGlzdCAoTVNJRSA1IGNvbXBhdGliaWxpdHkpCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRp
YmlsaXR5KQogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluUXVp
cmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIC8vIE1TSUUgNSBjb21wYXRp
YmlsaXR5IDovCkBAIC0yMDM5LDcgKzIwMzksOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgaWQgPSB2YWx1ZS0+
aWQ7Ci0gICAgICAgICAgICBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1Zh
bHVlSGFuZCkgeyAvLyBNU0lFIDUgY29tcGF0aWJpbGl0eSA6LworICAgICAgICAgICAgaWYgKGlu
UXVpcmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBNU0lFIDUgY29tcGF0aWJpbGl0eSA6LwogICAgICAgICAgICAgICAgIGlkID0gQ1NT
VmFsdWVQb2ludGVyOwogICAgICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUt
PmlkIDw9IENTU1ZhbHVlV2Via2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29w
eSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQpAQCAtMjExMywxNyArMjExNCwxNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9uZSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2Ug
aWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1
ZS0+c3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdpdGhTdGF0ZS52
YWx1ZSgpLnN0cmluZykpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgeworICAgICAgICB9
IGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSkpIHsKICAgICAg
ICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUp
KQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENT
U19JTUFHRV9TRVQpCi0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbiAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICItd2Via2l0LWltYWdlLXNldCgiKSkgeworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhTdGF0
ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWlt
YWdlLXNldCgiKSkgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7
CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTIxNDYsMjEgKzIxNDcsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVUaGluIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhp
Y2spCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZO
b25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZMZW5ndGggfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENT
U1Byb3BlcnR5TGV0dGVyU3BhY2luZzogICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCBpbmhl
cml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6ICAgICAgICAgLy8gbm9ybWFsIHwg
PGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVu
Z3RoIHwgRlBlcmNlbnQpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6CkBAIC0yMTc1LDM3ICsyMTc2LDM3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGFkZGluZ0JlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UGFkZGluZ0FmdGVyOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0
KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1heFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRo
KCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUg
fHwgdmFsaWRXaWR0aCh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9n
aWNhbFdpZHRoOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkV2lkdGgoKnZhbHVlKTsK
KyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRlKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFdpZHRoKHZhbHVlV2l0aFN0YXRl
KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRIZWln
aHQodmFsdWVXaXRoU3RhdGUpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3Bl
cnR5TWluSGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0
OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KCp2YWx1ZSk7CisgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRIZWlnaHQodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWxpZEhlaWdodCgqdmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkSGVpZ2h0KHZhbHVlV2l0aFN0YXRlKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgpAQCAtMjIy
MSw3ICsyMjIyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVCYXNlbGlu
ZSAmJiBpZCA8PSBDU1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKQogICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0
YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENT
U1Byb3BlcnR5Qm90dG9tOiAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+
IHwgYXV0byB8IGluaGVyaXQKQEAgLTIyMzksMTQgKzIyNDAsMTQgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwg
RlBlcmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4
OiAgICAgICAgICAgICAgLy8gYXV0byB8IDxpbnRlZ2VyPiB8IGluaGVyaXQKICAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCgqdmFsdWUsIEZJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciwg
Q1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlP
cnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9y
dCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMjU0LDcgKzIyNTUs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyLCBD
U1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CkBAIC0y
MzA0LDcgKzIzMDUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1h
bCB8fCBpZCA9PSBDU1NWYWx1ZVJlc2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBl
cmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNl
bnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIHdpdGhpbiBAZm9udC1mYWNlIGFuZCBALXdl
YmtpdC1maWx0ZXIsIHNvIGNhbm5vdCB1c2UgaW5oZXJpdCB8IGluaXRpYWwgb3IgYmUgIWltcG9y
dGFudC4gVGhpcyBpcyBhIGxpc3Qgb2YgdXJscyBvciBsb2NhbCByZWZlcmVuY2VzLgpAQCAtMjM3
MCwxNyArMjM3MSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVJpZ2h0UmFkaXVzOiB7CiAgICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
KnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcpOwogICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUyOwogICAgICAgICBpZiAobnVtID09IDIpIHsKLSAgICAgICAgICAgIHZhbHVlID0g
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBuZXh0VmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5u
ZXh0KCkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQobmV4dFZhbHVl
V2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKICAgICAgICAgICAgIGlm
ICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7
CisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
bmV4dFZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwYXJzZWRW
YWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAKQEAgLTIzODgsNyArMjM4OSw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5v
bk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGSW50ZWdlciB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QXNwZWN0UmF0aW86CiAgICAgICAgIHJldHVybiBwYXJzZUFzcGVjdFJhdGlvKGlt
cG9ydGFudCk7CkBAIC0yMzk2LDcgKzIzOTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKICAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVyUmFkaXVz
KHByb3BJZCwgaW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzogLy8gQ1NT
MiBwcm9wZXJ0eSwgZHJvcHBlZCBpbiBDU1MyLjEsIGJhY2sgaW4gQ1NTMywgc28gdHJlYXQgYXMg
Q1NTMwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6CkBAIC0yNDE5LDE3ICsyNDIwLDE3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAobnVtICE9IDEgJiYg
bnVtICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUG9zaXRp
dmVJbnRlZ2VyKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICAgICAgaWYgKG51bSA9
PSAyKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZl
SW50ZWdlcik7CisgICAgICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbmV4dFZh
bHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+bmV4dCgpKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdChuZXh0VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVn
ZXIpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aFN0YXRlKTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNl
ZFZhbHVlMTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZl
VmFsdWVQYWlyKHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkp
LCBpbXBvcnRhbnQpOwpAQCAtMjQ0NCwxNiArMjQ0NSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VSZWZsZWN0KHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRV
bml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOworICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIg
fCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZh
bHVlLT5mVmFsdWU7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aFN0
YXRlLnZhbHVlKCkuZlZhbHVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0RmlsdGVyOgogI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCkBAIC0yNDk0LDE2ICsy
NDk1LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVy
Y2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbGV4U2hyaW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0KCp2
YWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIGlmICh2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAg
Ly8gV2UgcmVzdHJpY3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ug
d2UgdXNlIGludCBtaW4gYW5kIGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFz
aCBzZXQuCi0gICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVs
ZWFzZVBhcnNlZENhbGNWYWx1ZSkpOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6
bWF4PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIDIsIHBhcnNlZERv
dWJsZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTI1MTQs
MTkgKzI1MTUsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8
fCBpZCA9PSBDU1NWYWx1ZUxhcmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0
aCB8IEZQZXJjZW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25O
ZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoU3Rh
dGUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1h
bCB8fCBpZCA9PSBDU1NWYWx1ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZUaW1lIHwgRkludGVnZXIgfCBGTm9uTmVn
KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGVGltZSB8IEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJM
RShDU1NfUkVHSU9OUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CkBAIC0y
NTczLDggKzI1NzQsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVlbGVzcyBu
dW1iZXJzIGlzIGEgcXVpcmsgb2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUg
cHJvcGVydHkuCi0gICAgICAgICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZM
ZW5ndGggfCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
dmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7
CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIGlmICh2YWwpIHsK
ICAgICAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBp
bXBvcnRhbnQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTQsMTkg
KzI2OTUsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwg
aWQgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIg
fCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sdW1uQ291bnQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIs
IENTU1F1aXJrc01vZGUpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkdhcDogLy8gbm9ybWFs
IHwgPGxlbmd0aD4KICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3Ro
IHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5BeGlzOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IGlkID09
IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQpAQCAtMjcxOSw3ICsyNzIw
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAvLyBub25lIHwg
YWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3BlcnR5KQogICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQo
KnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykgJiYgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFz
ZVBhcnNlZENhbGNWYWx1ZSkgPT0gMSkgeworICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQodmFs
dWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRo
U3RhdGUpID09IDEpIHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1u
U3BhbiwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTI3MjksOSArMjczMCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBBbHdheXMgcGFyc2Ug
dGhpcyBwcm9wZXJ0eSBpbiBzdHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3Vz
IG90aGVyd2lzZSB3aGVuIHVzZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHku
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgg
fCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3VibGUoKnZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxj
dWxhdGlvbi5jbGVhcigpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJz
ZWREb3VibGUodmFsdWVXaXRoU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IC8vIEVuZCBvZiBDU1MzIHByb3BlcnRpZXMKQEAgLTI3NDEsNyArMjc0MCw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgogICAgICAgICAvLyBXaGVuIHNw
ZWNpZnlpbmcgbnVtYmVyIG9mIGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUK
ICAgICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUg
bm9uLW5lZ2F0aXZlIGludGVnZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVl
LT5mVmFsdWUpICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9u
TmVnLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAo
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSB8fCB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9k
ZSkpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6CkBAIC0yNzQ5LDM2ICsyNzQ4
LDM2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ug
d2hlcmUgd2UgYWxsb3cgcmVsYXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0
KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZvbnRTaXplRGVsdGE6ICAgICAgICAgICAvLyA8bGVuZ3RoPgotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgpOworICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
CiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0
KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb0xpbWl0IHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5l
ZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwg
dmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkg
ewotICAgICAgICAgICAgU3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWUtPnN0cmlu
Zyk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgICAgICBTdHJpbmcgbGluZUdyaWRW
YWx1ZSA9IFN0cmluZyh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAg
ICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yNzg2LDEzICsyNzg1LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOgotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAK
ICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dERhc2hib2FyZFJlZ2lvbjogLy8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdp
b24+Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24g
fHwgaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUo
KS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUp
CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VEYXNoYm9hcmRSZWdpb25zKHByb3BJZCwgaW1wb3J0
YW50KTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKQEAgLTI5NTYsMTUgKzI5NTUsMTUgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxl
ZCgpICYmICFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlSW1hZ2VUaHJlc2hvbGQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFp
ZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5h
YmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIpKTsKICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGQW5nbGUpOworICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZBbmdsZSk7CiAgICAg
ICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpAQCAt
MzExNCwxMCArMzExMywxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogCiAgICAgaWYgKHZhbGlkUHJpbWl0
aXZlKSB7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgKnZh
bHVlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1
ZVdpdGhTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIEFT
U0VSVCghbV9wYXJzZWRDYWxjdWxhdGlvbik7CisKICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAg
ICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpIHx8IGluU2hvcnRoYW5kKCkpIHsKICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZSgpLCBpbXBv
cnRhbnQpOwpAQCAtMzIyMCwxNiArMzIxOSwxNyBAQCBib29sIENTU1BhcnNlcjo6dXNlTGVnYWN5
QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpIGNvbnN0CiBib29sIENTU1BhcnNlcjo6
cGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFs
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWws
IEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbCkpOwotICAgICAgICBlbHNlIGlmICh2YWwtPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9u
LT5hcmdzCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQot
ICAgICAgICAgICAgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgInJl
cGVhdCgiKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbCA9ICp2YWwt
PmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRV
bml0KHBhcnNlclZhbCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZh
bHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3Jl
YXRlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShwYXJzZXJWYWwpKSkpOworICAgIHdoaWxl
IChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAg
ICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpCisg
ICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoU3RhdGUpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uCisgICAgICAgICAgICAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MKKyAg
ICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKKyAgICAgICAg
ICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgi
KSkgeworICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3Rh
dGUoKnZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKS0+Y3VycmVudCgpKTsKKyAgICAgICAgICAg
IGlmICh2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
KyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShMZW5ndGhSZXBlYXQ6OmNyZWF0ZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1l
bnRXaXRoU3RhdGUpKSkpOwogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNTIsMTUgKzMyNTIsMTUgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbiA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUo
KSAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1clBh
cnNlclZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKmN1
clBhcnNlclZhbCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSB2YWx1ZVhXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICgh
dmFsaWRVbml0KHZhbHVlWFdpdGhTdGF0ZSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgY3VyUGFyc2VyVmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAo
IXZhbGlkVW5pdCgqY3VyUGFyc2VyVmFsLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFJlZlB0
cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
WFdpdGhTdGF0ZSk7CisKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVlXaXRoU3Rh
dGUoKm1fdmFsdWVMaXN0LT5uZXh0KCkpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVlWVdpdGhT
dGF0ZSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpj
dXJQYXJzZXJWYWwpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWVdpdGhTdGF0ZSk7CiAgICAgcG9zaXRpb24tPmFwcGVu
ZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NW
YWx1ZVkucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwb3NpdGlv
biwgaW1wb3J0YW50KTsKQEAgLTMyNzIsMTUgKzMyNzIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VkVmFsdWVYID0gKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlWFdp
dGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgICAgIC8vIERvbid0IGFjY2Vw
dCBvZGQtbGVuZ3RoIGxpc3RzIG9mIGNvb3JkaW5hdGVzLgogICAgICAgICBpZiAoIW1fdmFsdWVM
aXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1BhcnNl
clZhbHVlJiBwYXJzZWRWYWx1ZVkgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAg
aWYgKCF2YWxpZFVuaXQocGFyc2VkVmFsdWVYLCBGUGVyY2VudCB8IEZMZW5ndGgpIHx8ICF2YWxp
ZFVuaXQocGFyc2VkVmFsdWVZLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICBDU1NQYXJz
ZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVlXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
OworICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVhXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxl
bmd0aCkgfHwgIXZhbGlkVW5pdCh2YWx1ZVlXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShwYXJzZWRWYWx1ZVgpKTsKLSAgICAgICAgcG9zaXRp
b25zLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlZFZhbHVlWSkpOwor
ICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVYV2l0aFN0YXRlKSk7CisgICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVlXaXRoU3RhdGUpKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKQEAgLTM3NzIsMTIg
KzM3NzIsMTQgQEAgQ1NTUGFyc2VyOjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNl
U2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QmIHBhcnNlZFYKICAgICAgICAgICAgIHJldHVybiBQ
YWdlU2l6ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDoKLSAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25O
ZWcpICYmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgp
KSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZSkpOworICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CisgICAgICAgIENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICAgICAgaWYg
KHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFy
YW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7CisgICAgICAgICAg
ICBwYXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhTdGF0ZSkpOwogICAgICAgICAgICAgcmV0dXJuIExlbmd0aDsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gTm9uZTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5vbmU7
CiAgICAgfQpAQCAtMzk3Myw4ICszOTc1LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUZpbGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAg
ICAgICAgICAgIHBlcmNlbnQgPSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAg
ICAgfQotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwg
Rkxlbmd0aCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZh
bHVlTGlzdC5jdXJyZW50KCkpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0
aFN0YXRlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0
aFN0YXRlLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtMzk4OSw4ICszOTkyLDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUZpbGxQb3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAg
ICAgIHBlcmNlbnQgPSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQot
ICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0
aCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlz
dC5jdXJyZW50KCkpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRl
KCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
NDAyNiwxOSArNDAzMCwxNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbAogCiAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3Qu
Y3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgpKSB7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUgdmFsdWVXaXRoU3RhdGUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIGlmICh2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKICAgICAgICAgaWYg
KCFjdW11bGF0aXZlRmxhZ3MpIHsKICAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmls
bFBvc2l0aW9uOwogICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBYRmlsbFBvc2l0aW9uOwog
ICAgICAgICB9IGVsc2UgaWYgKGN1bXVsYXRpdmVGbGFncyAmIChYRmlsbFBvc2l0aW9uIHwgQW1i
aWd1b3VzRmlsbFBvc2l0aW9uKSkgewogICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlG
aWxsUG9zaXRpb247CiAgICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxsUG9zaXRpb247
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRDYWxjdWxhdGlvbikK
LSAgICAgICAgICAgICAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0
ZSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNDIwMCw3ICs0MjAyLDEwIEBA
IHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDCiAKIGlubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3Rl
bnRpYWxQb3NpdGlvblZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
aXNGaWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLmlkKSB8fCB2YWxpZFVuaXQodmFsdWUsIEZQZXJj
ZW50IHwgRkxlbmd0aCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgaWYgKGlzRmlsbFBv
c2l0aW9uS2V5d29yZCh2YWx1ZS5pZCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICByZXR1cm4gdmFs
aWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGUGVyY2VudCB8IEZMZW5ndGgpOwogfQogCiB2b2lkIENT
U1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQpAQCAt
NDM2NCw5ICs0MzY5LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VG
aWxsU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCYgYWxsb3dDCiAgICAgaWYgKHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIGVsc2UgewotICAg
ICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAg
IENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAg
IGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgIH0KIAogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwpAQCAtNDM3NCwxMyArNDM4MCwx
NCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93QwogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQogICAgICAg
ICAgICAgYWxsb3dDb21tYSA9IGZhbHNlOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0g
Q1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZh
bHVlV2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdp
dGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogICAgICAgICAgICAgICAgIGlmICghaW5T
aG9ydGhhbmQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hl
biBpdCBpcyBhZHZhbmNlZCB3ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgogICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5wcmV2aW91cygpOwogICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
IXBhcnNlZFZhbHVlMiAmJiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6
ZSkgewogICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBz
ZWNvbmQgdmFsdWUgdG8gdGhlIGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCkBAIC00NTgxLDkgKzQ1
ODgsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZh
bHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwg
RlRpbWUpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRlRpbWUp
KQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0
YXRlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDU5Nyw5ICs0NjA0LDkgQEAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCiAK
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigp
CiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUGFyc2VyVmFs
dWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAg
IGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZUaW1lIHwgRk5vbk5lZykpCisgICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjE2LDggKzQ2MjMsOSBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQogICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2
YWx1ZS5pZCA9PSBDU1NWYWx1ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZh
bHVlLCBGTnVtYmVyIHwgRk5vbk5lZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0
aFN0YXRlKHZhbHVlKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVy
IHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoU3RhdGUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjY3LDggKzQ2
NzUsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVm
UHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8QwogCiAgICAgLy8gbm93IGdldCB6CiAgICAg
aWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRkxlbmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0
aCkpIHsKKyAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhTdGF0ZSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ2ODAsMTYgKzQ2ODksMTYgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1
ZT4mIHZhbHVlMSwgUmVmUHRyPEMKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgZG91YmxlJiByZXN1
bHQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy5jdXJyZW50KCk7Ci0gICAg
aWYgKCF2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhT
dGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJncy5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRV
bml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUp
OwotICAgIHZhbHVlID0gYXJncy5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkgeworICAgIHJlc3Vs
dCA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhTdGF0ZSk7CisgICAgQ1NTUGFyc2VyVmFsdWUq
IG5leHRWYWx1ZSA9IGFyZ3MubmV4dCgpOworICAgIGlmICghbmV4dFZhbHVlKSB7CiAgICAgICAg
IC8vIFRoZSBsYXN0IG51bWJlciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0
LCBzbyB3ZSdyZSBkb25lLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKCFp
c0NvbW1hKHZhbHVlKSkKKyAgICBpZiAoIWlzQ29tbWEobmV4dFZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGFyZ3MubmV4dCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDcxNywy
MiArNDcyNiwyNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oKQogICAgICAgICBpbnQgbnVtU3RlcHM7CiAgICAgICAgIGJvb2wg
c3RlcEF0U3RhcnQgPSBmYWxzZTsKIAotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZh
bHVlID0gYXJncy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZh
bHVlLCBGSW50ZWdlcikpCisgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mt
PmN1cnJlbnQoKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRo
U3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3Rh
dGUsIEZJbnRlZ2VyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1T
dGVwcyA9IGNsYW1wVG9JbnRlZ2VyKGN1cnJlbnRWYWx1ZS0+ZlZhbHVlKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIG51
bVN0ZXBzID0gY2xhbXBUb0ludGVnZXIoYXJndW1lbnQtPmZWYWx1ZSk7CiAgICAgICAgIGlmIChu
dW1TdGVwcyA8IDEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgY3VycmVu
dFZhbHVlID0gYXJncy0+bmV4dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
IAotICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7CisgICAgICAgIGlmIChhcmd1bWVudCkgewog
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBz
ZWNvbmQgdmFsdWUKLSAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAg
ICAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgICAgIGlmIChjdXJyZW50VmFsdWUtPmlkICE9IENTU1ZhbHVlU3RhcnQgJiYgY3VycmVudFZh
bHVlLT5pZCAhPSBDU1NWYWx1ZUVuZCkKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGFy
Z3VtZW50LT5pZCAhPSBDU1NWYWx1ZUVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIHN0ZXBBdFN0YXJ0ID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1
ZVN0YXJ0OworICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFs
dWVTdGFydDsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0
aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwpAQCAtNDg5MywyMyArNDkw
NCwyNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEN1c3RvbUlkZW50KGNvbnN0IENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSkKIC8vIFRoZSBmdW5jdGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwg
PGN1c3RvbS1pZGVudD4gXSBpbiA8Z3JpZC1saW5lPiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25l
IG9yIHdpdGggJ3NwYW4nKS4KIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlk
ZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFs
dWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSkKIHsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxp
ZFVuaXQoKnZhbHVlLCBGSW50ZWdlcikgJiYgdmFsdWUtPmZWYWx1ZSkgewotICAgICAgICBudW1l
cmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAg
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgaXNWYWxp
ZEN1c3RvbUlkZW50KCp2YWx1ZSkpIHsKLSAgICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0
ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NQ
YXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkludGVnZXIpICYmIHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhTdGF0ZSk7CisgICAgICAgIENTU1BhcnNl
clZhbHVlKiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICBpZiAobmV4
dFZhbHVlICYmIGlzVmFsaWRDdXN0b21JZGVudCgqbmV4dFZhbHVlKSkgeworICAgICAgICAgICAg
Z3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7CiAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGlmIChpc1ZhbGlkQ3VzdG9tSWRlbnQoKnZhbHVlKSkgewot
ICAgICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgaWYgKHZhbHVlICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyKSAmJiB2YWx1
ZS0+ZlZhbHVlKSB7Ci0gICAgICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Cisg
ICAgaWYgKGlzVmFsaWRDdXN0b21JZGVudCh2YWx1ZVdpdGhTdGF0ZSkpIHsKKyAgICAgICAgZ3Jp
ZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoU3RhdGUpOwor
ICAgICAgICBpZiAoQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCkpIHsKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIG5leHRWYWx1ZVdpdGhT
dGF0ZSgqbmV4dFZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQobmV4dFZhbHVlV2l0
aFN0YXRlLCBGSW50ZWdlcikgJiYgbmV4dFZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlKSB7
CisgICAgICAgICAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKG5leHRWYWx1ZVdpdGhTdGF0ZSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC01MjkzLDEzICs1MzA2LDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VHcmlkVHJhY2tMaXN0KCkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1Jl
cGVhdEZ1bmN0aW9uKENTU1ZhbHVlTGlzdCYgbGlzdCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3VtZW50cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwotICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFs
aWRVbml0KCphcmd1bWVudHMtPnZhbHVlQXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0Nv
bW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgxKSkpCisgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1l
bnRzLT5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJW
YWx1ZVdpdGhTdGF0ZSBmaXJzdFZhbHVlV2l0aFN0YXRlKCphcmd1bWVudHMtPnZhbHVlQXQoMCkp
OworICAgIGlmICghdmFsaWRVbml0KGZpcnN0VmFsdWVXaXRoU3RhdGUsIEZQb3NpdGl2ZUludGVn
ZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgxKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEFTU0VSVChhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSA+IDApOwor
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAg
IEFTU0VSVChmaXJzdFZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlID4gMCk7CiAgICAgLy8g
SWYgYXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVuIHJlcGV0aXRp
b25zIGJlY29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdoeSB3ZQogICAg
IC8vIGNsYW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0eXBlIGNhc3Rp
bmcuCi0gICAgdW5zaWduZWQgcmVwZXRpdGlvbnMgPSBjbGFtcFRvPHVuc2lnbmVkPihhcmd1bWVu
dHMtPnZhbHVlQXQoMCktPmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOworICAgIHVuc2lnbmVk
IHJlcGV0aXRpb25zID0gY2xhbXBUbzx1bnNpZ25lZD4oZmlyc3RWYWx1ZVdpdGhTdGF0ZS52YWx1
ZSgpLmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gcmVwZWF0ZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgYXJndW1lbnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCkBA
IC01MzczLDEzICs1MzkxLDEzIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VHcmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0CiAgICAgcmV0dXJu
IHBhcnNlR3JpZEJyZWFkdGgoY3VycmVudFZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiBj
dXJyZW50VmFsdWUpCitQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmIChjdXJyZW50
VmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGN1cnJlbnRWYWx1ZS5pZCA9
PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLmlkKTsKKyAgICBpZiAodmFsdWUu
aWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlV2Vi
a2l0TWF4Q29udGVudCkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAKLSAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19GUikgewotICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gY3Vy
cmVudFZhbHVlLmZWYWx1ZTsKKyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0ZSKSB7CisgICAgICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CiAK
ICAgICAgICAgLy8gRnJhY3Rpb25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4K
ICAgICAgICAgaWYgKGZsZXhWYWx1ZSA8PSAwKQpAQCAtNTM4OCwxMCArNTQwNiwxMSBAQCBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NT
UGFyc2VyVmFsdWUmIGN1cnJlbgogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoZmxleFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKICAgICB9CiAKLSAg
ICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKQorICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKHZhbHVlKTsK
KyAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRk5vbk5lZyB8IEZMZW5ndGggfCBG
UGVyY2VudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShjdXJyZW50VmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNWYWxpZEdyaWRBdXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQpCkBAIC01NTYwLDExICs1NTc5
LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5l
eHQoKTsKICAgICAgICAgICAgICAgICBhcmcgPSBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihh
cmdzKTsKIAotICAgICAgICAgICAgICAgIHZhbGlkID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgdmFsaWRVbml0KCphcmcsIEZMZW5ndGgpOworICAgICAgICAgICAgICAgIENTU1BhcnNlclZh
bHVlV2l0aFN0YXRlIGFyZ1dpdGhTdGF0ZSgqYXJnKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9
IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdChhcmdXaXRoU3RhdGUsIEZMZW5n
dGgpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQg
PSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmcp
OworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJn
LT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoU3Rh
dGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAg
cmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKQEAgLTU3NDAsMTIgKzU3NjAsMTMgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICBSZWZQdHI8UmVjdD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgIGJvb2wgdmFs
aWQgPSB0cnVlOwogICAgIGludCBpID0gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZh
bHVlID0gYXJncy0+Y3VycmVudCgpOwotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKLSAgICAg
ICAgdmFsaWQgPSBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQo
KmN1cnJlbnRWYWx1ZSwgRkxlbmd0aCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0g
YXJncy0+Y3VycmVudCgpOworICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBDU1NQYXJz
ZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICB2
YWxpZCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ3VtZW50
V2l0aFN0YXRlLCBGTGVuZ3RoKTsKICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJl
bnRWYWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYXJn
dW1lbnQtPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3Vt
ZW50V2l0aFN0YXRlKTsKICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNl
dFRvcChsZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChpID09IDEpCkBAIC01NzU0LDEwICs1Nzc1
LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obGVuZ3RoKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVjdC0+c2V0TGVmdChsZW5ndGgpOwotICAgICAg
ICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUg
JiYgYXJncy0+c2l6ZSgpID09IDcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVu
aXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlID09
ICcsJykgewotICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKKyAg
ICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudCAmJiBh
cmdzLT5zaXplKCkgPT0gNykgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgeworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNTgyNCwxMCArNTg0NSwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaQogICAgICAg
ICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8
IEZOb25OZWcpKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0
ZSh2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBy
YWRpdXMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogCiAg
ICAgICAgIGlmICghaW5kZXhBZnRlclNsYXNoKQogICAgICAgICAgICAgcmFkaWlbMF1baV0gPSBy
YWRpdXM7CkBAIC01ODY0LDEwICs1ODg2LDExIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4g
Q1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyCiAg
ICAgICAgIH0KIAogICAgICAgICBVbml0cyB1bml0RmxhZ3MgPSBGTGVuZ3RoIHwgRlBlcmNlbnQ7
Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgdW5pdEZsYWdzKSB8fCB3aWR0aEFy
Z3VtZW50cy5zaXplKCkgPiA0KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1
bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVu
dFdpdGhTdGF0ZSwgdW5pdEZsYWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5k
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgd2lkdGhB
cmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhT
dGF0ZSkpOwogICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIApAQCAtNTkw
MiwxMCArNTkyNSwxMSBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgIGlmICh2YWx1ZS5p
ZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RT
aWRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLmlkKTsKIAotICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKSkKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0
ZSh2YWx1ZSk7CisgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogfQogCiBQYXNzUmVmUHRyPENT
U0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZh
bHVlTGlzdCYgYXJncykKQEAgLTYwMTksMTQgKzYwNDMsMTggQEAgUGFzc1JlZlB0cjxDU1NCYXNp
Y1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVM
aXN0JgogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFggPSBhcmd1bWVudDsKICAgICB3aGls
ZSAoYXJndW1lbnRYKSB7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50WCwgRkxl
bmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1l
bnRYV2l0aFN0YXRlKCphcmd1bWVudFgpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVu
dFhXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudFgpOworICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1l
bnRYV2l0aFN0YXRlKTsKIAogICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0gYXJn
cy5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRZIHx8ICF2YWxpZFVuaXQoKmFyZ3VtZW50
WSwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgaWYgKCFhcmd1bWVudFkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5
TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudFkpOworICAgICAg
ICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFlXaXRoU3RhdGUoKmFyZ3VtZW50WSk7
CisgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50WVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHlMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnRZV2l0aFN0YXRlKTsKIAogICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5y
ZWxlYXNlKCksIHlMZW5ndGgucmVsZWFzZSgpKTsKIApAQCAtNjA4MSw3ICs2MTA5LDcgQEAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQ
cm9wZXJ0eUlEIHByb3BJZCkKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNCb3hWYWx1ZSh2YWx1ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewot
ICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNl
VmFsaWRQcmltaXRpdmUodmFsdWVJZCwgKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJZCk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtNjEwMywxMyArNjEzMSwxMCBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BJZCkKIAogICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwogICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4ga2V5d29yZFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gc2hhcGVWYWx1ZTsKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewot
ICAgICAgICBrZXl3b3JkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsIHZhbHVl
KTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRW
YWx1ZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFn
ZVZhbHVlOwpAQCAtNjEyOSw3ICs2MTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUNsaXBQYXRoKCkKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkg
ewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VWYWxp
ZFByaW1pdGl2ZSh2YWx1ZUlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAgfQogICAgIGlmICh2YWx1ZS51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7CkBAIC02MzQ5LDMxICs2Mzc0LDMxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxp
bmVIZWlnaHQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0g
Km1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOwor
ICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5p
ZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gbm9ybWFsIHwgPG51
bWJlcj4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICBlbHNl
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZOdW1i
ZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92
YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZSksIGlt
cG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFy
c2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVXaXRoU3RhdGUpLCBpbXBvcnRhbnQpOwogICAgIHJl
dHVybiB2YWxpZFByaW1pdGl2ZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUo
Ym9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKICAgICBi
b29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJl
bGF0aXZlLXNpemU+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYg
KGlkID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZyk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxp
c3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWUpLCBpbXBvcnRhbnQp
OworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJp
bWl0aXZlKGlkLCB2YWx1ZVdpdGhTdGF0ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHZhbGlk
UHJpbWl0aXZlOwogfQogCkBAIC02NDM5LDggKzY0NjQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VGb250V2VpZ2h0KGJvb2wgaW1wb3J0YW50KQogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAo
dmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7Ci0g
ICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZSwg
UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpOworICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZh
bHVlV2l0aFN0YXRlKHZhbHVlKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7CisgICAgICAgIGludCB3ZWlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0ZSkpOwogICAgICAg
ICBpZiAoISh3ZWlnaHQgJSAxMDApICYmIHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkg
ewogICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29y
ZCh3ZWlnaHQpKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjkz
NSwxMiArNjk2MSw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJn
YiwgY29uc3QgU3RyaW5nVHlwZSYgbmFtZSwgYm9vbCBzdHJpY3QpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogICAgIAotaW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNh
bGMpCitpbmxpbmUgZG91YmxlIENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlJiB2YWx1ZVdpdGhTdGF0ZSkKIHsKLSAgICBkb3VibGUgcmVzdWx0ID0gbV9wYXJz
ZWRDYWxjdWxhdGlvbiA/IG1fcGFyc2VkQ2FsY3VsYXRpb24tPmRvdWJsZVZhbHVlKCkgOiB2YWx1
ZS5mVmFsdWU7Ci0gICAgaWYgKHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUp
Ci0gICAgICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIHZhbHVlV2l0aFN0YXRlLnBhcnNlZENhbGN1bGF0aW9uKCkgPyB2YWx1
ZVdpdGhTdGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRo
U3RhdGUudmFsdWUoKS5mVmFsdWU7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKQEAgLTY5NTIsMTYgKzY5NzUsMTYgQEAgYm9vbCBDU1NQ
YXJzZXI6OmlzQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgICAgICAgICAg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW1heCgi
KSk7CiB9CiAKLWlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCitpbmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUo
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0YXRlKQogewogICAgIGJvb2wgaXNQ
ZXJjZW50OwogICAgIAotICAgIGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKQotICAgICAgICBpc1Bl
cmNlbnQgPSBtX3BhcnNlZENhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50Owor
ICAgIGlmICh2YWx1ZVdpdGhTdGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpKQorICAgICAgICBpc1Bl
cmNlbnQgPSB2YWx1ZVdpdGhTdGF0ZS5wYXJzZWRDYWxjdWxhdGlvbigpLT5jYXRlZ29yeSgpID09
IENhbGNQZXJjZW50OwogICAgIGVsc2UKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWUudW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgICAgIGlzUGVyY2VudCA9
IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0U7CiAKLSAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUo
dmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGNvbnN0IGRvdWJsZSBkb3VibGVW
YWx1ZSA9IHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgCiAgICAgaWYgKGRvdWJs
ZVZhbHVlIDw9IDAuMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02OTgxLDM0ICs3MDA0LDM0IEBA
IGlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCiBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFs
dWUmIHZhbHVlLCBpbnQqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKIHsKICAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBD
U1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIGZpcnN0QXJndW1lbnRXaXRoU3RhdGUoKmFyZ3MtPmN1cnJlbnQo
KSk7CiAgICAgVW5pdHMgdW5pdFR5cGUgPSBGVW5rbm93bjsKICAgICAvLyBHZXQgdGhlIGZpcnN0
IHZhbHVlIGFuZCBpdHMgdHlwZQotICAgIGlmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRklu
dGVnZXIsIENTU1N0cmljdE1vZGUpKQorICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdp
dGhTdGF0ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJ
bnRlZ2VyOwotICAgIGVsc2UgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwg
Q1NTU3RyaWN0TW9kZSkpCisgICAgZWxzZSBpZiAodmFsaWRVbml0KGZpcnN0QXJndW1lbnRXaXRo
U3RhdGUsIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgdW5pdFR5cGUgPSBGUGVy
Y2VudDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb2xvckFy
cmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgY29sb3JBcnJh
eVswXSA9IGNvbG9ySW50RnJvbVZhbHVlKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUpOwogICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlm
IChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9w
ZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlk
VW5pdCgqY3VycmVudFZhbHVlLCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENT
U1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOwor
ICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdFR5cGUsIENTU1N0
cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5
W2ldID0gY29sb3JJbnRGcm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbG9yQXJy
YXlbaV0gPSBjb2xvckludEZyb21WYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAgICAgfQogICAg
IGlmIChwYXJzZUFscGhhKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1
ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRv
ckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJn
dW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3Vy
cmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgQ1NTUGFyc2VyVmFs
dWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlm
ICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0g
cGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAg
ICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoU3RhdGUp
OwogICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJlciBvZiBhbHBo
YSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwKICAgICAgICAgLy8gd2l0aCBh
biBlcXVhbCBkaXN0cmlidXRpb24gYWNyb3NzIGFsbCAyNTYgdmFsdWVzLgogICAgICAgICBjb2xv
ckFycmF5WzNdID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWlu
PGRvdWJsZT4oMSwgZG91YmxlVmFsdWUpKSAqIG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CkBAIC03
MDI0LDI5ICs3MDQ3LDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGludCogY29sb3JBcnJheSwgYm9vCiBib29sIENTU1BhcnNl
cjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xv
ckFycmF5LCBib29sIHBhcnNlQWxwaGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdz
ID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJl
bnRWYWx1ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBm
aXJzdEFyZ3VtZW50V2l0aFN0YXRlKCphcmdzLT5jdXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUg
Zmlyc3QgdmFsdWUKLSAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBD
U1NTdHJpY3RNb2RlKSkKKyAgICBpZiAoIXZhbGlkVW5pdChmaXJzdEFyZ3VtZW50V2l0aFN0YXRl
LCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IG5vcm1hbGl6ZSB0aGUgSHVlIHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFu
ZCAxLjAKLSAgICBjb2xvckFycmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3Vi
bGUoKmN1cnJlbnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpICUgMzYwKSArIDM2MCkg
JSAzNjApIC8gMzYwLjA7CisgICAgY29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4o
cGFyc2VkRG91YmxlKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUpKSAlIDM2MCkgKyAzNjApICUgMzYw
KSAvIDM2MC4wOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGN1
cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5p
dCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0g
JywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5u
ZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwot
ICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0
TW9kZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRl
KCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0
ZSwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjb2xvckFycmF5W2ldID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3Vi
bGU+KDEwMCwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFs
dWUpKSkgLyAxMDAuMDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKKyAg
ICAgICAgY29sb3JBcnJheVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91Ymxl
PigxMDAsIHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhTdGF0ZSkpKSAvIDEwMC4wOyAvLyBuZWVk
cyB0byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAogICAgIH0KICAgICBpZiAocGFyc2VBbHBo
YSkgewotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChj
dXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRW
YWx1ZS0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJn
dW1lbnQgPSAqYXJncy0+bmV4dCgpOworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0
ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAh
PSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51
bWJlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFy
Z3VtZW50V2l0aFN0YXRlKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkVW5pdChh
cmd1bWVudFdpdGhTdGF0ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAs
IHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQ
YXJzZWRDYWxjVmFsdWUpKSk7CisgICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3Vi
bGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRl
KSkpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxNTgsOSArNzE4MSw5IEBAIHN0
cnVjdCBTaGFkb3dQYXJzZUNvbnRleHQgewogICAgICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkg
PT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlC
b3hTaGFkb3c7CiAgICAgfQogCi0gICAgdm9pZCBjb21taXRMZW5ndGgoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlKQorICAgIHZvaWQgY29tbWl0TGVuZ3RoKENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiB2
YWx1ZVdpdGhTdGF0ZSkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0g
bV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAog
ICAgICAgICBpZiAoYWxsb3dYKSB7CiAgICAgICAgICAgICB4ID0gcHJpbWl0aXZlVmFsdWUucmVs
ZWFzZSgpOwpAQCAtNzIzOCw2ICs3MjYxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENT
U1BhcnNlcjo6cGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIEMKICAg
ICBTaGFkb3dQYXJzZUNvbnRleHQgY29udGV4dChwcm9wSWQsICp0aGlzKTsKICAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkp
KSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1
ZSk7CiAgICAgICAgIC8vIENoZWNrIGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgogICAgICAgICBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7CiAgICAgICAgICAg
ICBpZiAodmFsdWUtPmlWYWx1ZSAhPSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewpAQCAt
NzI1MCwyMiArNzI3NCwyMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpw
YXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBD
b21taXQgaXQuCiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAg
ICAgICAgfSBlbHNlIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgsIENTU1N0
cmljdE1vZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSByZXF1aXJlZCBhIGxlbmd0aCBhbmQgZGlk
bid0IGdldCBvbmUuIEludmFsaWQuCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWxsb3dMZW5n
dGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8g
Qmx1ciByYWRpdXMgbXVzdCBiZSBub24tbmVnYXRpdmUuCi0gICAgICAgICAgICBpZiAoY29udGV4
dC5hbGxvd0JsdXIgJiYgIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NT
dHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRV
bml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEEgbGVuZ3Ro
IGlzIGFsbG93ZWQgaGVyZS4gIENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAg
ICAgICAgIGNvbnRleHQuY29tbWl0TGVuZ3RoKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0
LmNvbW1pdExlbmd0aCh2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlSW5zZXQpIHsKICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd1N0
eWxlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBjb250
ZXh0LmNvbW1pdFN0eWxlKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxl
KHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSBv
bmx5IG90aGVyIHR5cGUgb2YgdmFsdWUgdGhhdCdzIG9rIGlzIGEgY29sb3IgdmFsdWUuCiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZENvbG9yOwpAQCAtNzMyNSw5
ICs3MzQ5LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGlmICghY3VycmVudFZhbHVlKQogICAgICAgICBv
ZmZzZXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1
ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUg
Y3VycmVudFZhbHVlV2l0aFN0YXRlKCpjdXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIXZhbGlk
VW5pdChjdXJyZW50VmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqY3VycmVudFZhbHVlKTsKKyAgICAgICAgb2Zmc2V0ID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGN1cnJlbnRWYWx1ZVdpdGhTdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gTm93
IGZvciB0aGUgbWFzay4KQEAgLTczNTMsMjAgKzczNzgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmxleChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmxleEJhc2lzOwogCiAgICAgd2hpbGUgKENTU1BhcnNl
clZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVu
aXQoKmFyZ3VtZW50LCBGTnVtYmVyIHwgRk5vbk5lZykpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFs
dWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZh
bGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRk51bWJlciB8IEZOb25OZWcpKSB7CiAgICAgICAg
ICAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3Jv
dyA9IHBhcnNlZERvdWJsZSgqYXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAg
ICAgICAgICAgICAgIGZsZXhHcm93ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGZsZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAg
ICAgICAgICBmbGV4U2hyaW5rID0gcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNl
ZENhbGNWYWx1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKCphcmd1bWVu
dCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmbGV4U2hyaW5r
ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aFN0YXRlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KCFwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoU3RhdGUpKSB7CiAgICAgICAgICAgICAgICAgLy8g
ZmxleCBvbmx5IGFsbG93cyBhIGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBh
bmQgZmxleC1zaHJpbmsgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAg
ICAgICBmbGV4QmFzaXMgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2Ugb25seSBhbGxvdyAzIG51bWJlcnMgd2l0aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2YWx1
ZSBpcyAwLiBFLmcuLCBmbGV4OjEgMSAxIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMg
JiYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmd1bWVudCwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxleEJhc2lzID0g
cGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudC0+aWQsICphcmd1bWVudCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIWZsZXhCYXNpcyAmJiAoYXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS5pZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSkpCisgICAgICAgICAgICBmbGV4QmFzaXMgPSBwYXJzZVZhbGlkUHJp
bWl0aXZlKGFyZ3VtZW50V2l0aFN0YXRlLnZhbHVlKCkuaWQsIGFyZ3VtZW50V2l0aFN0YXRlKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3QgYSB2YWxpZCBhcmcgZm9yIGZsZXgu
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NjM1LDkgKzc2NjEsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBhbGxvd0ZpbmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFs
Q29tbWl0OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
dG9wLmdldCgpOyB9CiAKLSAgICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUpCisgICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVl
V2l0aFN0YXRlKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmlt
aXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7
CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3Bh
cnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwogICAgICAg
ICBpZiAoIW1fdG9wKQogICAgICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNl
KCk7CiAgICAgICAgIGVsc2UgaWYgKCFtX3JpZ2h0KQpAQCAtNzcwMiw5ICs3NzI4LDEwIEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlU2xpY2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IFJlZlB0cjxDU1NCb3JkZXJJbWFnCiAgICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCBj
b250ZXh0KCp0aGlzKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVl
V2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CiAgICAgICAgIC8vIEZJWE1FIGNhbGMo
KSBodHRwOi8vd2Via2l0Lm9yZy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVlcyBh
cmUgbm90IGNyZWF0ZWQgeWV0LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYm
ICFpc0NhbGN1bGF0aW9uKCp2YWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBG
Tm9uTmVnIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LmNvbW1pdE51bWJlcigqdmFsdWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigp
ICYmICFpc0NhbGN1bGF0aW9uKHZhbHVlV2l0aFN0YXRlKSAmJiB2YWxpZFVuaXQodmFsdWVXaXRo
U3RhdGUsIEZJbnRlZ2VyIHwgRk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgewor
ICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIodmFsdWVXaXRoU3RhdGUpOwogICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRleHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVl
RmlsbCkKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0RmlsbCgpOwogICAgICAgICBlbHNlIGlm
ICghaW5TaG9ydGhhbmQoKSkgewpAQCAtNzc0NiwxMyArNzc3MywxMyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhbGxvd0ZpbmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0
OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdl
dCgpOyB9CiAKLSAgICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisg
ICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmIHZhbHVlV2l0aFN0
YXRlKQogICAgIHsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVW
YWx1ZTsKLSAgICAgICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAg
IHByaW1pdGl2ZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLmlkKTsKKyAgICAgICAgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuaWQgPT0gQ1NTVmFs
dWVBdXRvKQorICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJz
ZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAg
ICBpZiAoIW1fdG9wKQogICAgICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNl
KCk7CkBAIC03ODE0LDEwICs3ODQxLDExIEBAIHByaXZhdGU6CiBib29sIENTU1BhcnNlcjo6cGFy
c2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgcmVzdWx0KQogewogICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0
KCp0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwotICAgIHdoaWxlICgo
Y3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKGNv
bnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHZhbGlkVW5p
dHMsIENTU1N0cmljdE1vZGUpIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkg
ewotICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIoKmN1cnJlbnRWYWx1ZSk7CisgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlOworICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhT
dGF0ZSgqdmFsdWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICh2YWxp
ZFVuaXQodmFsdWVXaXRoU3RhdGUsIHZhbGlkVW5pdHMsIENTU1N0cmljdE1vZGUpIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUF1dG8pKSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJl
cih2YWx1ZVdpdGhTdGF0ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsK
ICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2Ug
YXJlIGludmFsaWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODc0LDEwICs3OTAy
LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpIC0gaW5kZXhBZnRlclNsYXNoID49
IDQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQo
dmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQorICAgICAgICBDU1NQYXJzZXJW
YWx1ZVdpdGhTdGF0ZSB2YWx1ZVdpdGhTdGF0ZSh2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRV
bml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aFN0YXRlKTsKIAogICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewog
ICAgICAgICAgICAgcmFkaWlbMF1baV0gPSByYWRpdXM7CkBAIC03OTIwLDIwICs3OTQ5LDIxIEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQogICAgIGlm
IChudW0gIT0gMykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUm
IGx2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKTsKICAgICBDU1NQYXJzZXJWYWx1ZSYg
b3AgPSAqbV92YWx1ZUxpc3QtPnZhbHVlQXQoMSk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHJ2YWx1
ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgyKTsKIAogICAgIGlmICghaXNGb3J3YXJkU2xhc2hP
cGVyYXRvcihvcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghdmFsaWRVbml0
KGx2YWx1ZSwgRk51bWJlciB8IEZOb25OZWcpIHx8ICF2YWxpZFVuaXQocnZhbHVlLCBGTnVtYmVy
IHwgRk5vbk5lZykpCisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgbHZhbHVlV2l0aFN0YXRl
KCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKSk7CisgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUg
cnZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgyKSk7CisgICAgaWYgKCF2YWxp
ZFVuaXQobHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChy
dmFsdWVXaXRoU3RhdGUsIEZOdW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCFsdmFsdWUuZlZhbHVlIHx8ICFydmFsdWUuZlZhbHVlKQorICAgIC8vIEZJ
WE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIGlmICghbHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkuZlZhbHVlIHx8ICFydmFsdWVXaXRoU3RhdGUudmFsdWUoKS5m
VmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0QXNwZWN0UmF0aW8sIENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGx2YWx1ZS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2
YWx1ZS5mVmFsdWUpKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93UHJlY2lz
aW9uVG9GbG9hdChsdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHJ2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSkpLCBpbXBvcnRhbnQpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MTI3LDkgKzgxNTcsMTEgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0
LCBSZWZQdHI8Q1MKICAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhw
ZWN0IGEgbnVtZXJpYyByYWRpdXMuCiAgICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMu
CiAgICAgICAgIGlmICghYXJndW1lbnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRv
d25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVzKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgQ1NTUGFyc2Vy
VmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAgICAgICAgZG93
bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aFN0YXRlKSk7CiAKICAgICAgICAg
Ly8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4KICAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7CkBAIC04MTY0LDkgKzgxOTYsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9u
IHZhbHVlcy4KICAgICAgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25k
UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKKyAg
ICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25k
UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwog
ICAgIH0KIAogICAgIC8vIFdlIG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3BzICgw
IG9yIG1vcmUpLgpAQCAtODIzNiwxMSArODI3MCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZgogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBp
ZiAoIWFyZ3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3VtZW50KTsKIAogICAgIGJvb2wgZXhwZWN0
Q29tbWEgPSBmYWxzZTsKICAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRVbml0
KCphcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNl
dEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICBpZiAo
dmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7Cisg
ICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3Vt
ZW50V2l0aFN0YXRlKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7CkBAIC04Mzc3LDggKzg0MTIsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogCiAgICAgaWYg
KCFzaGFwZVZhbHVlICYmICFzaXplVmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJn
dW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXpl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgIENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlIGhTaXplV2l0aFN0YXRlKCphcmd1bWVudCk7CisgICAgICAgIGlm
ICh2YWxpZFVuaXQoaFNpemVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAg
ICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhTaXpl
V2l0aFN0YXRlKTsKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04
Mzg2LDggKzg0MjIsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgICAgICAgICAgZXhw
ZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJn
dW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICBDU1NQYXJz
ZXJWYWx1ZVdpdGhTdGF0ZSB2U2l6ZVdpdGhTdGF0ZSgqYXJndW1lbnQpOworICAgICAgICBpZiAo
dmFsaWRVbml0KHZTaXplV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAg
ICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodlNpemVXaXRo
U3RhdGUpOwogCiAgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAg
ICAgIGlmICghYXJndW1lbnQpCkBAIC04NDE4LDI4ICs4NDU1LDI5IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQ
dHI8Q1NTVmFsCiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIWFyZ3VtZW50KQorICAgIGlmICghYXJncy0+Y3VycmVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBmaXJzdEFyZ3Vt
ZW50V2l0aFN0YXRlKCphcmdzLT5jdXJyZW50KCkpOworCiAgICAgYm9vbCBleHBlY3RDb21tYSA9
IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgIGlmICh2YWxpZFVu
aXQoZmlyc3RBcmd1bWVudFdpdGhTdGF0ZSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAg
ICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFy
Z3VtZW50V2l0aFN0YXRlKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBl
Y3RDb21tYSA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UICYmIGVxdWFsSWdub3JpbmdDYXNlKCphcmd1bWVudCwgInRv
IikpIHsKKyAgICB9IGVsc2UgaWYgKGZpcnN0QXJndW1lbnRXaXRoU3RhdGUudmFsdWUoKS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmly
c3RBcmd1bWVudFdpdGhTdGF0ZSwgInRvIikpIHsKICAgICAgICAgLy8gdG8gWyBbbGVmdCB8IHJp
Z2h0XSB8fCBbdG9wIHwgYm90dG9tXSBdCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dEFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGVuZFgsIGVuZFk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247
CiAgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24g
PSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAg
IGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9u
dGFsKTsKICAgICAgICAgaWYgKCFsb2NhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtODQ0OCwxMSArODQ4NiwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBlbmRZID0gbG9jYXRpb247CiAKLSAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIG5leHRBcmd1
bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5
d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVG
cm9tU2lkZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYg
KGxvY2F0aW9uKSB7CiAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGVuZFgpCkBAIC04NTA2LDYgKzg1NDQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENT
U1ZhbAogICAgIC8vIFsgZWxsaXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0g
XSB8CiAgICAgLy8gWyBbIGNpcmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdp
dGhTdGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJndW1lbnQpOwogICAgICAgICBpZiAoYXJndW1l
bnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICAgICAg
Ym9vbCBiYWRJZGVudCA9IGZhbHNlOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+aWQp
IHsKQEAgLTg1MzMsMTggKzg1NzIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAg
ICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFs
aWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICB9IGVsc2Ug
aWYgKHZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewog
CiAgICAgICAgICAgICBpZiAoc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBob3Jpem9udGFs
U2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZSk7CiAK
ICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlm
ICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAg
ICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVu
dCk7CisgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2U2l6ZVdpdGhTdGF0ZSgq
YXJndW1lbnQpOworICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCh2U2l6ZVdpdGhTdGF0ZSwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAg
KytpOwogICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnQpCkBAIC04NjA4LDM4ICs4NjQ4LDM5IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBS
ZWZQdHI8Q1NTVmFsCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQs
IGJvb2wgZXhwZWN0Q29tbWEpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9
IHZhbHVlTGlzdC5jdXJyZW50KCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVM
aXN0LmN1cnJlbnQoKTsKICAgICBib29sIHByZXZpb3VzU3RvcFdhc01pZHBvaW50ID0gdHJ1ZTsK
IAogICAgIC8vIE5vdyBsb29rIGZvciBjb2xvciBzdG9wcy4KLSAgICB3aGlsZSAoY3VycmVudFZh
bHVlKSB7CisgICAgd2hpbGUgKHZhbHVlKSB7CiAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21t
YSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KICAgICAgICAgaWYgKGV4cGVjdENvbW1hKSB7Ci0gICAg
ICAgICAgICBpZiAoIWlzQ29tbWEoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGlmICghaXND
b21tYSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBjdXJyZW50VmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50VmFsdWUpCisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIDxjb2xvci1zdG9wPiA9IDxjb2xvcj4gWyA8cGVyY2VudGFnZT4gfCA8
bGVuZ3RoPiBdPwogICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwotICAgICAgICBz
dG9wLm1fY29sb3IgPSBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICpjdXJyZW50
VmFsdWUpOworICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdv
cmQoKnRoaXMsICp2YWx1ZSk7CiAgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKSB7CiAgICAgICAg
ICAgICBpZiAocHJldmlvdXNTdG9wV2FzTWlkcG9pbnQpIC8vIDIgbWlkcG9pbnRzIGluIGEgcm93
IGlzIG5vdCBhbGxvd2VkLiBUaGlzIGFsc28gY2F0Y2hlcyBzdGFydGluZyB3aXRoIGEgbWlkcG9p
bnQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBzdG9wLmlz
TWlkcG9pbnQgPSB0cnVlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1
ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0
KCk7CiAKICAgICAgICAgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7
CiAKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbGlkVW5p
dCgqY3VycmVudFZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAg
c3RvcC5tX3Bvc2l0aW9uID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFs
dWUpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7Cisg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUg
dmFsdWVXaXRoU3RhdGUoKnZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVX
aXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wLm1f
cG9zaXRpb24gPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoU3RhdGUpOwor
ICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3RvcC5pc01pZHBvaW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtODg0MCwxNCArODg4MSwxNSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlSW1hZ2VSZXNvbHV0aW9uKCkKIAogICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgd2hpbGUgKHZhbHVlKSB7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCp2YWx1ZSk7CiAgICAg
ICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGcm9tSW1hZ2Up
IHsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsK
ICAgICAgICAgfSBlbHNlIGlmICghaGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25h
cCkgewogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIGhhdmVTbmFwID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIGlmICghaGF2ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlJl
c29sdXRpb24gfCBGTm9uTmVnKSAmJiB2YWx1ZS0+ZlZhbHVlID4gMCkgewotICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghaGF2ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRl
LCBGUmVzb2x1dGlvbiB8IEZOb25OZWcpICYmIHZhbHVlLT5mVmFsdWUgPiAwKSB7CisgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0
YXRlKSk7CiAgICAgICAgICAgICBoYXZlUmVzb2x1dGlvbiA9IHRydWU7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05MjE5LDI5ICs5MjYxLDMwIEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3Vy
cmVudCgpOwogICAgIHVuc2lnbmVkIGFyZ051bWJlciA9IDA7CiAgICAgd2hpbGUgKGFyZ3VtZW50
KSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCph
cmd1bWVudCk7CiAgICAgICAgIENTU1BhcnNlcjo6VW5pdHMgdW5pdCA9IGluZm8udW5pdCgpOwog
CiAgICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90
YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDMpIHsKICAgICAgICAgICAg
IC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFuIGFuZ2xlIHJhdGhlciB0aGFuIGEgYmFy
ZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0
KCphcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFs
aWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlv
biAmJiBhcmdOdW1iZXIgPT0gMikgewogICAgICAgICAgICAgLy8gM3JkIHBhcmFtIG9mIHRyYW5z
bGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoKmFyZ3VtZW50LCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICgh
dmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJh
dGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAgICAgICAvLyAxc3QgcGFyYW0gb2YgdHJhbnNs
YXRlWigpIGNhbm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0
KCphcmd1bWVudCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZh
bGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uICYmICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiBwZXJzcGVj
dGl2ZSgpIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyIChkZXByZWNhdGVkKSBvciBsZW5n
dGguCi0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZOdW1iZXIgfCBGTGVu
Z3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkVW5p
dChhcmd1bWVudFdpdGhTdGF0ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNl
IGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgdW5pdCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAg
IH0gZWxzZSBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0ZSwgdW5pdCwgQ1NTU3RyaWN0
TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBBZGQgdGhl
IHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAgICAgIHRyYW5z
Zm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkp
OworICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShhcmd1bWVudFdpdGhTdGF0ZSkpOwogCiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwogICAgICAgICBpZiAoIWFyZ3VtZW50KQpAQCAtOTMxMSwyMSArOTM1NCwyMiBAQCBQYXNz
UmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRl
ckFyZ3VtZW50cyhDU1NQYXJzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUg
PSAqYXJncy5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRk51
bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSBhcmd1bWVudFdpdGhTdGF0ZSgqYXJncy5jdXJyZW50KCkp
OworICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoU3RhdGUsIEZOdW1iZXIg
fCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIGFtb3Vu
dCA9IHZhbHVlLmZWYWx1ZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhh
bmRsZSBjYWxjdWxhdGVkIHZhbHVlcy4KKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBhcmd1
bWVudFdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gU2F0dXJhdGUgYW5kIENvbnRyYXN0IGFsbG93IHZhbHVlcyBvdmVyIDEwMCUuCiAgICAgICAg
ICAgICBpZiAoZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0
ZXJPcGVyYXRpb24KICAgICAgICAgICAgICAgICAmJiBmaWx0ZXJUeXBlICE9IFdlYktpdENTU0Zp
bHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIGRv
dWJsZSBtYXhBbGxvd2VkID0gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgPyAxMDAuMCA6IDEuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dl
ZCA9IGFyZ3VtZW50V2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6IDEuMDsKICAgICAgICAgICAgICAgICBpZiAoYW1vdW50
ID4gbWF4QWxsb3dlZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoYW1vdW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzPih2YWx1ZS51bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXM+KGFyZ3VtZW50V2l0aFN0YXRlLnZhbHVlKCkudW5pdCkpKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MzM1LDExICs5Mzc5LDEyIEBAIFBh
c3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmls
dGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
ICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1
ZSA9ICphcmdzLmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBG
TnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgQ1NTUGFyc2Vy
VmFsdWVXaXRoU3RhdGUgYXJndW1lbnRXaXRoU3RhdGUoKmFyZ3MuY3VycmVudCgpKTsKKyAgICAg
ICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aFN0YXRlLCBGTnVtYmVyIHwgRlBlcmNl
bnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4o
dmFsdWUudW5pdCkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxl
IGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhcmd1bWVudFdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwg
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4oYXJndW1lbnRXaXRoU3Rh
dGUudmFsdWUoKS51bml0KSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTkzNDksMTEgKzkzOTQsMTEgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0g
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgYXJndW1lbnQgPSAqYXJncy5jdXJyZW50KCk7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRl
KCphcmdzLmN1cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdp
dGhTdGF0ZSwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUp
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MzYzLDExICs5NDA4LDEx
IEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWls
dGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NTUGFy
c2VyVmFsdWUmIGFyZ3VtZW50ID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQoYXJndW1lbnQsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIGFyZ3VtZW50V2l0aFN0YXRlKCphcmdz
LmN1cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhTdGF0
ZSwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoU3RhdGUpKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NTQ0LDggKzk1ODksOSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IENTU1Byb3BlcnR5SUQmIHByb3BJZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKLSAgICAgICAg
ICAgIGlmICh2YWxpZFVuaXQoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIEZMZW5ndGgpKQotICAg
ICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZh
bHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICh2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGgpKQorICAgICAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aFN0YXRlKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC05ODAxLDggKzk4NDcsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCiAKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAg
ICBpZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFnZSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCp2YWx1ZSkpOworICAgICAgICBDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSB2
YWx1ZVdpdGhTdGF0ZSgqdmFsdWUpOworICAgICAgICBpZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFn
ZSAmJiB2YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoU3RhdGUpKTsKICAgICAgICAgICAgIGhhc0xlbmd0aE9yUGVyY2VudGFnZSA9IHRydWU7CiAg
ICAgICAgIH0KICNpZiBFTkFCTEUoQ1NTM19URVhUKQpAQCAtOTk3OCwyMSArMTAwMjUsMTggQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJh
bmdlKQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWVXaXRo
U3RhdGUmIHZhbHVlV2l0aFN0YXRlLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFu
Z2UpCiB7Ci0gICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFsdWUpKTsKKyAgICBBU1NFUlQoaXND
YWxjdWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSkpOwogICAgIAotICAgIENTU1BhcnNlclZhbHVlTGlz
dCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOworICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVCghbV9wYXJzZWRDYWxjdWxhdGlvbik7Ci0gICAgbV9wYXJzZWRDYWxjdWxh
dGlvbiA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAqYXJncywg
cmFuZ2UpOworICAgIEFTU0VSVCghdmFsdWVXaXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRpb24oKSk7
CisgICAgdmFsdWVXaXRoU3RhdGUuc2V0UGFyc2VkQ2FsY3VsYXRpb24oQ1NTQ2FsY1ZhbHVlOjpj
cmVhdGUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdl
KSk7CiAgICAgCi0gICAgaWYgKCFtX3BhcnNlZENhbGN1bGF0aW9uKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICEhdmFsdWVXaXRoU3Rh
dGUucGFyc2VkQ2FsY3VsYXRpb24oKTsKIH0KIAogI2RlZmluZSBFTkRfVE9LRU4gMApAQCAtMTIx
ODYsMTEgKzEyMjMwLDEyIEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpj
cmVhdGVWaWV3cG9ydFJ1bGUoKQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUp
CisgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUtPmlkOworICAgIENTU1BhcnNlclZhbHVlV2l0
aFN0YXRlIHZhbHVlV2l0aFN0YXRlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKworICAgIENT
U1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmlkOwogICAgIGJvb2wgdmFsaWRQ
cmltaXRpdmUgPSBmYWxzZTsKIAogICAgIHN3aXRjaCAocHJvcElkKSB7CkBAIC0xMjIwMSw3ICsx
MjI0Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IGlkID09IENTU1ZhbHVlRGV2aWNlV2lkdGggfHwgaWQgPT0gQ1NTVmFsdWVEZXZpY2VI
ZWlnaHQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDog
Ly8gc2hvcnRoYW5kCiAgICAgICAgIHJldHVybiBwYXJzZVZpZXdwb3J0U2hvcnRoYW5kKHByb3BJ
ZCwgQ1NTUHJvcGVydHlNaW5XaWR0aCwgQ1NTUHJvcGVydHlNYXhXaWR0aCwgaW1wb3J0YW50KTsK
QEAgLTEyMjEzLDcgKzEyMjU4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVu
aXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aFN0YXRlLCBGTnVtYmVy
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlVc2VyWm9vbTogLy8gem9vbSB8IGZpeGVkCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZVpvb20gfHwgaWQgPT0gQ1NTVmFsdWVGaXhlZCkKQEAgLTEyMjI4LDcgKzEyMjczLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwogICAg
IGlmICh2YWxpZFByaW1pdGl2ZSkgewotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQ
cmltaXRpdmUoaWQsICp2YWx1ZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFBy
aW1pdGl2ZShpZCwgdmFsdWVXaXRoU3RhdGUpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDBlMjc0NDk0MTZlNWI3YzdjZGEy
MDc5NGY2NzlkMmM3MzA3MDI4NDAuLjhjM2QwZmEyZDk3OTQ1YjViYzgwMmEyYTZhZDA4ZTgzZmE5
ZjBlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2LDYgKzU2LDcgQEAgY2xhc3MgQ1NT
VmFsdWVMaXN0OwogY2xhc3MgQ1NTQmFzaWNTaGFwZTsKIGNsYXNzIENTU0Jhc2ljU2hhcGVJbnNl
dDsKIGNsYXNzIENTU0dyaWRMaW5lTmFtZXNWYWx1ZTsKK2NsYXNzIENTU1BhcnNlclZhbHVlV2l0
aFN0YXRlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW1tdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOwpAQCAtOTIsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9
IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3Is
IGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlE
IGlkZW50LCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudCwgQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUmKTsKICAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+LCBTdHls
ZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBzdGF0aWMgUGFzc1JlZjxJ
bW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlvbihjb25z
dCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBh
cnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKQEAgLTI4MCw3ICsyODEsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUZXh0SW5kZW50KCk7CiAgICAgCiAgICAg
Ym9vbCBwYXJzZUxpbmVCb3hDb250YWluKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNl
Q2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFu
Z2UpOworICAgIGJvb2wgcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYs
IENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CiAKICAgICBib29sIHBhcnNlRm9udEZl
YXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7CiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGlu
Z3MoYm9vbCBpbXBvcnRhbnQpOwpAQCAtNDAyLDcgKzQwMyw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZVZpZXdwb3J0UnVsZSgpOwogI2VuZGlmCiAKLSAg
ICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
Q1NTUGFyc2VyVmFsdWUmKTsKKyAgICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmKTsKICAgICBQYXNz
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJz
ZXJWYWx1ZSYpOwogCiAgICAgc3RhdGljIFVSTCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAtNDk2LDggKzQ5Nyw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZp
eExlbmd0aCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3VmZml4LCB1bnNpZ25lZCBzdWZm
aXhMZW5ndGgpOwogICAgIGJvb2wgaW5TaG9ydGhhbmQoKSBjb25zdCB7IHJldHVybiBtX2luUGFy
c2VTaG9ydGhhbmQ7IH0KIAotICAgIGJvb2wgdmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSYpOwot
ICAgIGJvb2wgdmFsaWRIZWlnaHQoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBib29sIHZhbGlkV2lk
dGgoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUmKTsKKyAgICBib29sIHZhbGlkSGVpZ2h0KENTU1Bh
cnNlclZhbHVlV2l0aFN0YXRlJik7CiAKICAgICB2b2lkIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVl
cygpOwogCkBAIC01NzYsOCArNTc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IG1fcmVjeWNsZWRT
ZWxlY3RvclZlY3RvcjsKIAotICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1fcGFyc2VkQ2FsY3Vs
YXRpb247Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3N1cHBv
cnRzUnVsZURhdGFTdGFjazsKIAogICAgIC8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3IgYSBj
ZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdApAQCAtNjExLDE2ICs2MTAsMTYgQEAg
cHJpdmF0ZToKICAgICBib29sIGlzTG9nZ2luZ0Vycm9ycygpOwogICAgIHZvaWQgbG9nRXJyb3Io
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlcik7CiAKLSAgICBib29sIHZhbGlk
Q2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIFJlbGVhc2VQYXJzZWRDYWxj
VmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUp
OworICAgIGJvb2wgdmFsaWRDYWxjdWxhdGlvblVuaXQoQ1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUm
LCBVbml0cyk7CiAKICAgICBib29sIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKENTU1BhcnNl
clZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCi0gICAgaW5saW5lIGJvb2wgdmFsaWRV
bml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2Vk
Q2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1Zh
bHVlKSB7IHJldHVybiB2YWxpZFVuaXQodmFsdWUsIHVuaXRmbGFncywgbV9jb250ZXh0Lm1vZGUs
IHJlbGVhc2VDYWxjKTsgfQotICAgIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiwgVW5p
dHMsIENTU1BhcnNlck1vZGUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFz
ZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGlubGluZSBib29sIHZh
bGlkVW5pdChDU1NQYXJzZXJWYWx1ZVdpdGhTdGF0ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncykg
eyByZXR1cm4gdmFsaWRVbml0KHZhbHVlLCB1bml0ZmxhZ3MsIG1fY29udGV4dC5tb2RlKTsgfQor
ICAgIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlV2l0aFN0YXRlJiwgVW5pdHMsIENTU1Bh
cnNlck1vZGUpOwogCiAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlUXVhZChVbml0cywgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBjb2xvckludEZyb21WYWx1ZShDU1NQYXJz
ZXJWYWx1ZSYpOwotICAgIGRvdWJsZSBwYXJzZWREb3VibGUoQ1NTUGFyc2VyVmFsdWUmLCBSZWxl
YXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFy
c2VkQ2FsY1ZhbHVlKTsKKyAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUmKTsKKyAgICBkb3VibGUgcGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVlV2l0aFN0
YXRlJik7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbkluZm87CiAg
ICAgZnJpZW5kIGNsYXNzIEZpbHRlck9wZXJhdGlvbkluZm87CkBAIC02OTMsNiArNjkyLDIzIEBA
IGlubGluZSBpbnQgY3NzeXlsZXgodm9pZCogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikKICAg
ICByZXR1cm4gcGFyc2VyLT5sZXgoeXlsdmFsKTsKIH0KIAorY2xhc3MgQ1NTUGFyc2VyVmFsdWVX
aXRoU3RhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IENTU1BhcnNlclZhbHVlV2l0aFN0YXRl
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsg
fQorCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorICAgIG9wZXJhdG9yIENTU1BhcnNlclZhbHVlJigpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKwor
ICAgIENTU0NhbGNWYWx1ZSogcGFyc2VkQ2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bh
cnNlZENhbGN1bGF0aW9uLmdldCgpOyB9CisgICAgdm9pZCBzZXRQYXJzZWRDYWxjdWxhdGlvbihS
ZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxjdWxhdGlvbikgeyBtX3BhcnNlZENhbGN1bGF0aW9uID0g
Y2FsY3VsYXRpb247IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENTU1BhcnNlclZhbHVlJiBt
X3ZhbHVlOworICAgICAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBtX3BhcnNlZENhbGN1bGF0aW9u
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTUGFyc2VyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKaW5kZXggODQ3OWFkZDQwYzJmNTdkYzE2YjI3
NjA1ZDlmN2YyMTRhM2Q1OTcxZC4uMjE5MWRmZWJkMzVhY2ZjNmQ2ZjZjZmQwNmNmYjc1M2FmODY1
MmMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKQEAgLTM1LDExICszNSwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCisgICAg
aWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Q1NTUGFyc2VyVmFsdWVXaXRoU3RhdGUgdmFsdWVXaXRoU3RhdGUoKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpOwogCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLT5pZDsKKyAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoU3RhdGUudmFsdWUoKS5pZDsKIAogICAgIGJvb2wgdmFsaWRfcHJpbWl0
aXZlID0gZmFsc2U7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTYyLDcg
KzYyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICBpZCA+PSBDU1NWYWx1ZVN1cGVyKQogICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50
LCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlk
VW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2Rl
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5RG9taW5hbnRCYXNlbGlu
ZToKQEAgLTg3LDggKzg3LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNr
OgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuc3RyaW5nLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCiAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQpAQCAtMTAxLDcg
KzEwMSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlTWl0ZXJsaW1pdDogICAvLyA8bWl0ZXJsaW1pdD4gfCBpbmhlcml0Ci0gICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnLCBT
VkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZh
bHVlV2l0aFN0YXRlLCBGTnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2luOiAgIC8vIG1p
dGVyIHwgcm91bmQgfCBiZXZlbCB8IGluaGVyaXQKQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlTdG9wT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgotICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBG
UGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAo
IWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhTdGF0ZSwgRk51bWJlciB8IEZQZXJjZW50LCBTVkdB
dHRyaWJ1dGVNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNo
YXBlUmVuZGVyaW5nOgpAQCAtMTY3LDggKzE2Nyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNW
R1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgRkFM
TFRIUk9VR0g7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250
YWw6IC8vIDxhbmdsZT4gKHJlc3RyaWN0ZWQgdG8gX2RlZ18gcGVyIFNWRyAxLjEgc3BlYykgfCBp
bmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0RFRyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewot
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
LT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKKyAgICAgICAgaWYgKHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2
YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZSh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpOwogCiAgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTE4OSwxNiArMTg5LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDdXJyZW50Q29sb3IoKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKChpZCA+PSBDU1NWYWx1ZUFjdGl2ZWJvcmRlciAmJiBpZCA8
PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKICAgICAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDb2xvcihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGlkKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCks
IGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3Jl
YXRlVVJJQW5kQ29sb3IodmFsdWUtPnN0cmluZywgYyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmRDb2xvcih2YWx1ZVdpdGhTdGF0
ZS52YWx1ZSgpLnN0cmluZywgYyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZE5vbmUodmFsdWUtPnN0
cmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50Ojpj
cmVhdGVVUklBbmROb25lKHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJKHZhbHVlLT5zdHJpbmcp
OworICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUkko
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNWR1BhaW50KCk7CiAKQEAgLTIxMiw3ICsy
MTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAg
ICAgICAgIGlmICgoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4
dCkgfHwKICAgICAgICAgICAgKGlkID49IENTU1ZhbHVlQWxpY2VibHVlICYmIGlkIDw9IENTU1Zh
bHVlWWVsbG93Z3JlZW4pKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3Jl
YXRlRnJvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
U1ZHQ29sb3I6OmNyZWF0ZUZyb21TdHJpbmcodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcp
OwogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUN1cnJlbnRDb2xvcigpOwogICAgICAg
ICBlbHNlIC8vIFRPRE8gOiBzdmdjb2xvciAoaWNjQ29sb3IpCkBAIC0yMzYsNyArMjM2LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoOiAgICAgICAgIC8v
IDxsZW5ndGg+IHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VEYXNob2Zmc2V0
OgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2
YWxpZFVuaXQodmFsdWVXaXRoU3RhdGUsIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRl
TW9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJy
YXk6ICAgICAvLyBub25lIHwgPGRhc2hhcnJheT4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZU5vbmUpCkBAIC0yNTAsMTUgKzI1MCwxNSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoLCBTVkdBdHRyaWJ1dGVN
b2RlKTsKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhT
dGF0ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOiAgICAvLyA8dXJpPiB8IG5vbmUgfCBpbmhlcml0CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9u
ZSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKKyAgICAgICAgZWxz
ZSBpZiAodmFsdWVXaXRoU3RhdGUudmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUodmFsdWVXaXRoU3RhdGUudmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzKSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQpOwogICAgICAgICAgICAgaWYg
KHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAg
ICAgIH0KQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVJ5OgogICAgIGNhc2UgQ1NTUHJvcGVydHlYOgogICAgIGNhc2UgQ1NTUHJvcGVydHlZOgotICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCkpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5p
dCh2YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIElmIHlvdSBjcmFzaCBoZXJlLCBpdCdzIGJlY2F1c2Ug
eW91IGFkZGVkIGEgY3NzIHByb3BlcnR5IGFuZCBhcmUgbm90IGhhbmRsaW5nIGl0CkBAIC0zMTgs
MTQgKzMxOCwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKHZhbGlkX3ByaW1pdGl2ZSkgewogICAg
ICAgICBpZiAoaWQgIT0gMCkKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCAoQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwotICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxvd2luZ01hcmdpblF1aXJrKHZhbHVlLT5mVmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKLSAgICAgICAgaWYgKGlzQ2FsY3VsYXRpb24o
KnZhbHVlKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIGVsc2UgaWYgKHZh
bHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIHZhbHVlV2l0aFN0YXRlLnZhbHVlKCkudW5pdCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVl
V2l0aFN0YXRlLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAm
JiB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19L
SFopCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWVXaXRoU3RhdGUudmFsdWUoKS5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKSB2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQpOworICAgICAgICBlbHNlIGlmICh2YWx1
ZVdpdGhTdGF0ZS52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJn
aW5RdWlyayh2YWx1ZVdpdGhTdGF0ZS52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19FTVMpOworICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhTdGF0ZSkpCisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVX
aXRoU3RhdGUucGFyc2VkQ2FsY3VsYXRpb24oKSk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7CiAgICAgfQogICAgIGlmICghcGFyc2VkVmFsdWUgfHwgKG1fdmFsdWVMaXN0LT5jdXJyZW50
KCkgJiYgIWluU2hvcnRoYW5kKCkpKQpAQCAtMzQxLDkgKzM0MSwxMSBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKICAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGJvb2wgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKICAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywg
U1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIENTU1BhcnNlclZhbHVlV2l0aFN0YXRlIHZhbHVl
V2l0aFN0YXRlKCp2YWx1ZSk7CisgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2
YWx1ZVdpdGhTdGF0ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgU1ZHQXR0cmlidXRl
TW9kZSk7CiAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2
YWx1ZXMuCiAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gMCkKICAgICAgICAgICAgIHJldC0+YXBw
ZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCkpOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKQEAgLTM1Myw3
ICszNTUsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ryb2tl
RGFzaGFycmF5KCkKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAg
ICB9CiAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242877</attachid>
            <date>2014-12-08 21:07:55 -0800</date>
            <delta_ts>2014-12-16 16:08:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141208210836.patch</filename>
            <type>text/plain</type>
            <size>119199</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRhN2U0OTkxODZmYWIy
YmI3YTY2ZjY4ZWZlZWM4MzlhZWEwZGNkMS4uYjA0OTBjYWU5YzBmMjkxYWIyNDI5NjIzOWQzODg0
YjdkNGQ4NDI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJp
ZCBvZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50
IGluCisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENh
bGN1bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAg
SW5zdGVhZCwgaW50cm9kdWNlIGEgbmV3IFZhbHVlV2l0aENhbGN1bGF0aW9uIHR5cGUgd2hpY2gg
d3JhcHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2VkIGNh
bGN1bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxhdGlv
biB2YWx1ZSBpcyBub3cgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAgICAg
ICAgVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3VsYXRp
b24gdmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQSSBp
cyBhbHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIgbmVl
ZCB0byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91bGQg
YmUKKyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8g
YmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTEyLTA4ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxh
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgaU9TIGJ1aWxkIGFmdGVyIHIxNzcwMDIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggMDAzMDRiZTUyOGI0YWQwNmExNmU4ZmViMTMx
NWIxZDVmYzZiMjZjYi4uNmU4M2MwOGViNWY1YmQ0N2UyODJjYzM4YmQ3MzY4ZTMyNjU5MWI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE1ODEsNTEgKzE1ODEsNTMgQEAgVVJMIENT
U1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiAgICAgcmV0dXJu
IGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlk
Q2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBS
ZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9vbCBDU1NQYXJz
ZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgVW5pdHMgdW5pdGZsYWdzKQogewogICAgIGJvb2wgbXVzdEJlTm9uTmVnYXRp
dmUgPSB1bml0ZmxhZ3MgJiBGTm9uTmVnOwogCi0gICAgaWYgKCFwYXJzZUNhbGN1bGF0aW9uKHZh
bHVlLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENh
bGN1bGF0aW9uUmFuZ2VBbGwpKQorICAgIEFTU0VSVCghdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2Fs
Y3VsYXRpb24oKSk7CisgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRpb24gPSBwYXJz
ZUNhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENh
bGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpOworICAgIGlm
ICghY2FsY3VsYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgYiA9IGZh
bHNlOwotICAgIHN3aXRjaCAobV9wYXJzZWRDYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSkgeworICAg
IGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAoY2FsY3VsYXRpb24tPmNhdGVnb3J5
KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdzICYgRk51
bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIG1fcGFy
c2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCi0gICAgICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAg
aWYgKGIgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYgbV9wYXJzZWRDYWxjdWxhdGlvbi0+aXNOZWdh
dGl2ZSgpKQotICAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRm
bGFncyAmIEZOdW1iZXIpOworICAgICAgICBpZiAoIWlzVmFsaWQgJiYgKHVuaXRmbGFncyAmIEZJ
bnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSkKKyAgICAgICAgICAgIGlzVmFsaWQgPSB0
cnVlOworICAgICAgICBpZiAoaXNWYWxpZCAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBjYWxjdWxh
dGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENhbGNMZW5ndGg6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdzICYg
Rkxlbmd0aCk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdz
ICYgRlBlcmNlbnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBtX3Bh
cnNlZENhbGN1bGF0aW9uLT5pc05lZ2F0aXZlKCkpCi0gICAgICAgICAgICBiID0gZmFsc2U7Cisg
ICAgICAgIGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRlBlcmNlbnQpOworICAgICAgICBpZiAoaXNW
YWxpZCAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBjYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQor
ICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENh
bGNQZXJjZW50TGVuZ3RoOgotICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZQZXJjZW50KSAmJiAo
dW5pdGZsYWdzICYgRkxlbmd0aCk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRlBl
cmNlbnQpICYmICh1bml0ZmxhZ3MgJiBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDYWxjUGVyY2VudE51bWJlcjoKLSAgICAgICAgYiA9ICh1bml0ZmxhZ3MgJiBGUGVyY2VudCkg
JiYgKHVuaXRmbGFncyAmIEZOdW1iZXIpOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRmbGFncyAm
IEZQZXJjZW50KSAmJiAodW5pdGZsYWdzICYgRk51bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ2FsY0FuZ2xlOgotICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZBbmdsZSk7CisgICAg
ICAgIGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRkFuZ2xlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDYWxjVGltZToKLSAgICAgICAgYiA9ICh1bml0ZmxhZ3MgJiBGVGltZSk7CisgICAgICAg
IGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRlRpbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENhbGNGcmVxdWVuY3k6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdzICYgRkZyZXF1ZW5jeSk7Cisg
ICAgICAgIGlzVmFsaWQgPSAodW5pdGZsYWdzICYgRkZyZXF1ZW5jeSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2FsY090aGVyOgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaWYgKCFi
IHx8IHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpCi0gICAgICAgIG1fcGFy
c2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVybiBiOyAgICAKKyAgICBpZiAoaXNW
YWxpZCkKKyAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24uc2V0Q2FsY3VsYXRpb24oV1RGOjpt
b3ZlKGNhbGN1bGF0aW9uKSk7CisgICAgcmV0dXJuIGlzVmFsaWQ7CiB9CiAKIGlubGluZSBib29s
IENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmIHZh
bHVlLCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKQEAgLTE2
MzQsMjMgKzE2MzYsMjMgQEAgaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2NlcHRVbml0
TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHUKICAgICByZXR1cm4gKHVu
aXRmbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8
fCBjc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdB
dHRyaWJ1dGVNb2RlKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
LCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjKQorYm9vbCBDU1NQ
YXJzZXI6OnZhbGlkVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRp
b24sIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewotICAg
IGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkQ2FsY3VsYXRp
b25Vbml0KHZhbHVlLCB1bml0ZmxhZ3MsIHJlbGVhc2VDYWxjKTsKKyAgICBpZiAoaXNDYWxjdWxh
dGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCisgICAgICAgIHJldHVybiB2YWxpZENhbGN1bGF0
aW9uVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdGZsYWdzKTsKICAgICAgICAgCiAgICAg
Ym9vbCBiID0gZmFsc2U7Ci0gICAgc3dpdGNoICh2YWx1ZS51bml0KSB7CisgICAgc3dpdGNoICh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpIHsKICAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSOgogICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZOdW1iZXIpOwot
ICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXModmFsdWUsIHVuaXRm
bGFncywgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIHZhbHVlLnVuaXQgPSAodW5pdGZs
YWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYIDoKKyAgICAgICAgaWYg
KCFiICYmIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKHZhbHVlV2l0aENhbGN1bGF0aW9uLCB1
bml0ZmxhZ3MsIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAgICB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bml0ZmxhZ3MgJiBG
QW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgOiBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX01TKTsKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgh
YiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIHZhbHVlLmlzSW50KQorICAgICAgICBpZiAo
IWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGlmICghYiAmJiAodW5p
dGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWUuaXNJbnQgJiYgdmFsdWUuZlZhbHVl
ID4gMCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0ZmxhZ3MgJiBGUG9zaXRpdmVJbnRlZ2VyKSAm
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlzSW50ICYmIHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuZlZhbHVlID4gMCkKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKQEAgLTE2
OTYsMjAgKzE2OTgsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVnICYm
IHZhbHVlLmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIgPSBmYWxz
ZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYgKGIgJiYg
c3RkOjppc2luZih2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkpCiAgICAgICAg
IGIgPSBmYWxzZTsKICAgICByZXR1cm4gYjsKIH0KIAotaW5saW5lIFBhc3NSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFs
dWVXaXRoQ2FsY3VsYXRpb24pCiB7Ci0gICAgaWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pIHsKLSAg
ICAgICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKSB7CisgICAgICAgIEFTU0VS
VChpc0NhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9u
KCkpOwogICAgIH0KIAorICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9IHZhbHVlV2l0aENhbGN1
bGF0aW9uOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09M
VVRJT05fTUVESUFfUVVFUlkpCiAgICAgQVNTRVJUKCh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19LSFopCiAgICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQpAQCAtMTcz
OSw0MyArMTc0Miw0NCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRv
cihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAnLyc7CiB9CiAKLWJvb2wgQ1NT
UGFyc2VyOjp2YWxpZFdpZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2Vy
Ojp2YWxpZFdpZHRoKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikK
IHsKLSAgICBpbnQgaWQgPSB2YWx1ZS5pZDsKKyAgICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9
PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQg
fHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50IHx8IGlkID09IENTU1ZhbHVlV2Via2l0
RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYmIHZhbGlkVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CiB9CiAKIC8v
IEZJWE1FOiBDb21iaW5lIHRoaXMgd2l0aCB2YWxpZFdpZHRoIHdoZW4gd2Ugc3VwcG9ydCBmaXQt
Y29udGVudCwgZXQgYWwsIGZvciBoZWlnaHRzLgotYm9vbCBDU1NQYXJzZXI6OnZhbGlkSGVpZ2h0
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZEhlaWdodChWYWx1
ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7Ci0gICAgaW50IGlkID0g
dmFsdWUuaWQ7CisgICAgaW50IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsK
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5JbnRy
aW5zaWMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICByZXR1cm4gIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZyk7CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgVmFsdWVXaXRo
Q2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogewogICAgIGlmIChpZGVudGlmaWVy
KQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
ZW50aWZpZXIpOwotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUp
OwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYm
IHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0
ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfQ0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKHZhbHVlKTsKLSAgICBpZiAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1ZXICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAg
ICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKworICAgIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCisgICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5p
dCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgaWYgKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZX
ICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1ZNQVgpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikg
fHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19EUENNKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQorICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICNlbmRp
ZgotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKLSAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxvd2luZ01hcmdpblF1aXJrKHZhbHVl
LmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwotICAgIGlmIChpc0NhbGN1bGF0
aW9uKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9w
YXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAg
ICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCisgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0
aW9uKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzk4LDE5ICsxODAyLDExIEBA
IHZvaWQgQ1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBpZiAoIW1fdmFsdWVM
aXN0KQorICAgIGlmICghbV92YWx1ZUxpc3QgfHwgIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBOb3RlOiBtX3BhcnNlZENhbGN1bGF0aW9uIGlzIHVzZWQgdG8gcGFzcyB0
aGUgY2FsYyB2YWx1ZSB0byB2YWxpZFVuaXQgYW5kIHRoZW4gY2xlYXJlZCBhdCB0aGUgZW5kIG9m
IHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdG8gYXZvaWQgaGF2aW5nIHRv
IHBhc3MgcGFyc2VkQ2FsYyB0byBhbGwgdmFsaWRVbml0IGNhbGxlcnMuCi0gICAgQVNTRVJUKCFt
X3BhcnNlZENhbGN1bGF0aW9uKTsKLSAgICAKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUtPmlk
OworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS5pZDsKIAogICAgIHVuc2lnbmVkIG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDog
bV92YWx1ZUxpc3QtPnNpemUoKTsKIApAQCAtMTg3NCw3ICsxODcwLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IGNhc2UgQ1NTUHJvcGVydHlDbGlwOiAgICAgICAgICAgICAgICAgLy8gPHNoYXBlPiB8IGF1dG8g
fCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUNsaXBTaGFwZShwcm9wSWQsIGltcG9ydGFudCk7CiAgICAgICAgIGJy
ZWFrOwogCkBAIC0xOTMyLDcgKzE5MjgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVn
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjogICAg
ICAgIC8vIDxjb2xvcj4gfCBpbnZlcnQgfCBpbmhlcml0CiAgICAgICAgIC8vIE91dGxpbmUgY29s
b3IgaGFzICJpbnZlcnQiIGFzIGFkZGl0aW9uYWwga2V5d29yZC4KQEAgLTE5ODUsNiArMTk4MSw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgLy8gem9vbS1pbiB8IHpvb20tb3V0IHwgYWxsLXNjcm9sbCB8
IC13ZWJraXQtZ3JhYiB8IC13ZWJraXQtZ3JhYmJpbmcgfCAtd2Via2l0LXpvb20taW4gfAogICAg
ICAgICAvLyAtd2Via2l0LXpvb20tb3V0IF0gXSB8IGluaGVyaXQKICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdDsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gJnZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCk7CiAgICAgICAgIHdoaWxlICh2YWx1ZSkgewogICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewpAQCAtMjAyNyw3ICsyMDI0LDggQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOyAvLyBjb21t
YQogICAgICAgICB9CiAgICAgICAgIGlmIChsaXN0KSB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
KSB7IC8vIG5vIHZhbHVlIGFmdGVyIHVybCBsaXN0IChNU0lFIDUgY29tcGF0aWJpbGl0eSkKKyAg
ICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSBhZnRl
ciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBhdGliaWxpdHkpCiAgICAgICAgICAgICAgICAgaWYgKGxp
c3QtPmxlbmd0aCgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1Zh
bHVlSGFuZCkgLy8gTVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KQEAgLTIwMzksNyArMjAzNyw4IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7
CiAgICAgICAgICAgICBpZCA9IHZhbHVlLT5pZDsKLSAgICAgICAgICAgIGlmIChpblF1aXJrc01v
ZGUoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSB7IC8vIE1TSUUgNSBjb21wYXRpYmls
aXR5IDovCisgICAgICAgICAgICBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENT
U1ZhbHVlSGFuZCkgeworICAgICAgICAgICAgICAgIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDov
CiAgICAgICAgICAgICAgICAgaWQgPSBDU1NWYWx1ZVBvaW50ZXI7CiAgICAgICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmICgodmFsdWUtPmlk
ID49IENTU1ZhbHVlQXV0byAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRab29tT3V0KSB8
fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3B5IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUp
CkBAIC0yMTEzLDE3ICsyMTEyLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlTm9uZSkgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1
ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKHZhbHVlLT5zdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3Jl
YXRlKGNvbXBsZXRlVVJMKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKSk7CiAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzR2Vu
ZXJhdGVkSW1hZ2VWYWx1ZSgqdmFsdWUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNHZW5lcmF0
ZWRJbWFnZVZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSkgewogICAgICAgICAgICAgaWYgKHBh
cnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0LCBwYXJzZWRWYWx1ZSkpCiAgICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
LSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9u
ICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1h
Z2Utc2V0KCIpKSB7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxJZ25vcmluZ0Nhc2Uo
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1h
Z2Utc2V0KCIpKSB7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsK
ICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjE0NiwyMSArMjE0NSwyMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVRoaW4gfHwgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFsdWVUaGlj
aykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5v
bk5lZyk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOiAgICAgICAvLyBub3JtYWwgfCA8bGVuZ3RoPiB8
IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgpOworICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzogICAgICAgICAv
LyBub3JtYWwgfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgq
dmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKQEAgLTIxNzUs
MzcgKzIxNzQsMzcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5n
RW5kOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQmVmb3JlOgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7
CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1heExvZ2ljYWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NT
VmFsdWVOb25lIHx8IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRoKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRXaWR0aCgqdmFsdWUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkV2lkdGgodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ1NTUHJvcGVydHlXaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdp
ZHRoOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
aWRXaWR0aCgqdmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkV2lkdGgodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9
PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRIZWlnaHQoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZEhlaWdodCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWln
aHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0gICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRIZWlnaHQoKnZhbHVlKTsKKyAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZEhlaWdodCh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRIZWlnaHQodmFsdWVXaXRoQ2FsY3VsYXRpb24p
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CkBAIC0y
MjIxLDcgKzIyMjAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA+PSBDU1NWYWx1ZUJhc2Vs
aW5lICYmIGlkIDw9IENTU1ZhbHVlV2Via2l0QmFzZWxpbmVNaWRkbGUpCiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsK
KyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3R0b206ICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVy
Y2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdApAQCAtMjIzOSwxNCArMjIzOCwxNCBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlaSW5kZXg6ICAgICAgICAgICAgICAvLyBhdXRvIHwgPGludGVnZXI+IHwgaW5oZXJp
dAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6IC8vIDxpbnRlZ2VyPiB8IGluaGVyaXQgfCBhdXRv
IChXZSd2ZSBhZGRlZCBzdXBwb3J0IGZvciBhdXRvIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eSkKQEAgLTIyNTQsNyArMjI1Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUs
IEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2
ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENT
U1Byb3BlcnR5TGluZUhlaWdodDoKQEAgLTIzMDQsNyArMjMwMyw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlUmVzZXQgfHwgaWQg
PT0gQ1NTVmFsdWVEb2N1bWVudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUp
KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5
IHVzZWQgd2l0aGluIEBmb250LWZhY2UgYW5kIEAtd2Via2l0LWZpbHRlciwgc28gY2Fubm90IHVz
ZSBpbmhlcml0IHwgaW5pdGlhbCBvciBiZSAhaW1wb3J0YW50LiBUaGlzIGlzIGEgbGlzdCBvZiB1
cmxzIG9yIGxvY2FsIHJlZmVyZW5jZXMuCkBAIC0yMzcwLDE3ICsyMzY5LDE3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHsKICAgICAgICAg
aWYgKG51bSAhPSAxICYmIG51bSAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CiAgICAgICAgIGlm
ICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7CiAg
ICAgICAgIGlmIChudW0gPT0gMikgewotICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwogICAgICAgICAgICAgaWYgKCF2
YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAg
ICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShuZXh0
VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKIApAQCAtMjM4OCw3ICsyMzg3LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRhYlNpemU6
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBG
Tm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbzoKICAgICAgICAgcmV0dXJuIHBhcnNlQXNwZWN0
UmF0aW8oaW1wb3J0YW50KTsKQEAgLTIzOTYsNyArMjM5NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzOgogICAgICAgICByZXR1cm4gcGFyc2VCb3Jk
ZXJSYWRpdXMocHJvcElkLCBpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
T2Zmc2V0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5n
dGgpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
U2hhZG93OiAvLyBDU1MyIHByb3BlcnR5LCBkcm9wcGVkIGluIENTUzIuMSwgYmFjayBpbiBDU1Mz
LCBzbyB0cmVhdCBhcyBDU1MzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKQEAgLTI0
MTksMTcgKzI0MTgsMTcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlm
IChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUlu
dGVnZXIpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIpOwogICAgICAgICAgICAgaWYgKCF2YWxpZFBy
aW1pdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqdmFsdWUpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBw
YXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOwogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1
ZTI7CiAgICAgICAgICAgICBpZiAobnVtID09IDIpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5u
ZXh0KCkpOworICAgICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KG5leHRW
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlcik7CiAgICAgICAgICAgICAgICAg
aWYgKCF2YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSgqdmFsdWUpOworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gcGFyc2VkVmFsdWUxOwogICAgICAg
ICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIocGFyc2Vk
VmFsdWUxLnJlbGVhc2UoKSwgcGFyc2VkVmFsdWUyLnJlbGVhc2UoKSksIGltcG9ydGFudCk7CkBA
IC0yNDQ0LDE2ICsyNDQzLDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHJldHVybiBwYXJzZVJl
ZmxlY3QocHJvcElkLCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5T3BhY2l0eToKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVl
LCBGTnVtYmVyKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94RmxleDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7CisgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3VwOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkgJiYg
dmFsdWUtPmZWYWx1ZTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkgJiYgdmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6CiAjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikK
QEAgLTI0OTQsMTYgKzI0OTMsMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5
RmxleEdyb3c6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhTaHJpbms6Ci0gICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZOb25OZWcpOworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJl
ciB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5T3JkZXI6
Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkp
IHsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIs
IENTU1N0cmljdE1vZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSByZXN0cmljdCB0aGUgc21hbGxl
c3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVzZSB3ZSB1c2UgaW50IG1pbiBhbmQgaW50IG1p
biArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBoYXNoIHNldC4KLSAgICAgICAgICAgIGRvdWJs
ZSByZXN1bHQgPSBzdGQ6Om1heDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkgKyAyLCBwYXJzZWREb3VibGUoKnZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSk7Cisg
ICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQpAQCAtMjUxNCwxOSArMjUxMywxOSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVNtYWxsIHx8IGlkID09IENTU1ZhbHVlTGFy
Z2UgfHwgaWQgPT0gQ1NTVmFsdWVNZWRpdW0pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0
aXRpb246CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluZmluaXRlKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRklu
dGVnZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcnF1ZWVTcGVlZDoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlk
ID09IENTU1ZhbHVlU2xvdyB8fCBpZCA9PSBDU1NWYWx1ZUZhc3QpCiAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlRpbWUgfCBGSW50ZWdlciB8IEZOb25OZWcpOworICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZUaW1lIHwgRkludGVnZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxF
KENTU19SRUdJT05TKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKQEAgLTI1
NzMsOCArMjU3Miw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBBY2NlcHRpbmcgdmFsdWVsZXNzIG51
bWJlcnMgaXMgYSBxdWlyayBvZiB0aGUgLXdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBw
cm9wZXJ0eS4KLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRkxl
bmd0aCB8IEZOb25OZWcpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2
YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5l
ZykpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbCA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAg
aWYgKHZhbCkgewogICAgICAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHZhbC5y
ZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjY5NCwxOSArMjY5MywxOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBpZCA9PSBDU1NWYWx1
ZU1lZGl1bSB8fCBpZCA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFp
ZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRk51bWJlciB8IEZMZW5ndGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5Db3VudDoKICAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwg
RlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIsIENTU1F1aXJrc01vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sdW1uR2FwOiAvLyBub3JtYWwgfCA8bGVuZ3RoPgogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxl
bmd0aCB8IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkF4aXM6CiAgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgaWQgPT0gQ1NTVmFsdWVWZXJ0aWNhbCB8fCBpZCA9PSBD
U1NWYWx1ZUF1dG8pCkBAIC0yNzE5LDcgKzI3MTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvbHVtblNwYW46IC8vIG5vbmUgfCBhbGwgfCAxICh3aWxsIGJlIGRyb3BwZWQgaW4g
dGhlIHVucHJlZml4ZWQgcHJvcGVydHkpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUFsbCB8
fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
Ci0gICAgICAgIGVsc2UgaWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSAm
JiBwYXJzZWREb3VibGUoKnZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSA9PSAxKSB7Cisg
ICAgICAgIGVsc2UgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZOb25OZWcpICYmIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikgPT0gMSkgewog
ICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5TcGFuLCBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9y
dGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjcyOSw5ICsy
NzI4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEFsd2F5cyBwYXJzZSB0aGlzIHByb3BlcnR5IGlu
IHN0cmljdCBtb2RlLCBzaW5jZSBpdCB3b3VsZCBiZSBhbWJpZ3VvdXMgb3RoZXJ3aXNlIHdoZW4g
dXNlZCBpbiB0aGUgJ2NvbHVtbnMnIHNob3J0aGFuZCBwcm9wZXJ0eS4KLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0
cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSgqdmFsdWUpOwotICAgICAgICAgICAgaWYgKCF2YWxp
ZFByaW1pdGl2ZSkKLSAgICAgICAgICAgICAgICBtX3BhcnNlZENhbGN1bGF0aW9uLmNsZWFyKCk7
CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgLy8g
RW5kIG9mIENTUzMgcHJvcGVydGllcwpAQCAtMjc0MSw3ICsyNzM4LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6CiAgICAgICAgIC8vIFdoZW4gc3BlY2lm
eWluZyBudW1iZXIgb2YgbGluZXMsIGRvbid0IGFsbG93IDAgYXMgYSB2YWxpZCB2YWx1ZQogICAg
ICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgZWl0aGVyIHR5cGUgb2YgdW5pdCwgcmVxdWlyZSBub24t
bmVnYXRpdmUgaW50ZWdlcnMKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgfHwgdmFsdWUtPmZW
YWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGUGVyY2VudCB8IEZOb25OZWcs
IENTU1F1aXJrc01vZGUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAmJiB2YWxp
ZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVn
LCBDU1NRdWlya3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJT1NfVEVYVF9B
VVRPU0laSU5HKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2l6ZUFkanVzdDoKQEAg
LTI3NDksMzYgKzI3NDYsMzYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVs
dGlsZW5ndGggY2FzZSB3aGVyZSB3ZSBhbGxvdyByZWxhdGl2ZSB1bml0cy4KLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUGVyY2VudCB8IEZO
b25OZWcsIENTU1N0cmljdE1vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFp
ZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YTogICAgICAgICAgIC8vIDxsZW5n
dGg+Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCk7
CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuYXRlQ2hhcmFjdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuYXRlTGltaXRCZWZvcmU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0
ZUxpbWl0QWZ0ZXI6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0
KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJ
bnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEh5cGhlbmF0ZUxpbWl0TGluZXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQg
fHwgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9MaW1pdCB8fCB2YWxpZFVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25l
KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lR3JpZFZhbHVlID0g
U3RyaW5nKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAgICAg
IGlmICghbGluZUdyaWRWYWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxpbmVHcmlkVmFsdWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTI3ODYsMTMgKzI3ODMsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVh
azsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0RGFzaGJvYXJkUmVnaW9uOiAvLyA8ZGFzaGJvYXJkLXJlZ2lvbj4gfCA8ZGFzaGJvYXJk
LXJlZ2lvbj4KLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbiB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8IGlkID09IENT
U1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHJldHVybiBwYXJzZURhc2hib2FyZFJlZ2lvbnMocHJv
cElkLCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsKICNlbmRpZgpAQCAtMjk1NiwxNSArMjk1
MywxNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTaGFwZVByb3BlcnR5
KHByb3BJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZU1hcmdpbjoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5jc3NTaGFwZXNFbmFibGVkKCkgJiYgIWlkICYmIHZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jc3NT
aGFwZXNFbmFibGVkKCkgJiYgIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbWFnZVRocmVzaG9sZDoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jc3NTaGFw
ZXNFbmFibGVkKCkgJiYgIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIpKTsKKyAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5jc3NTaGFwZXNFbmFibGVkKCkgJiYgIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRk51bWJlcikpOwogICAgICAgICBicmVhazsKICNlbmRpZgogI2lmIEVOQUJMRShD
U1NfSU1BR0VfT1JJRU5UQVRJT04pCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlT3JpZW50YXRp
b246Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZB
bmdsZSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkFuZ2xlKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCkBAIC0zMTE0LDEwICszMTExLDEwIEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICB9CiAKICAgICBpZiAodmFsaWRQcmltaXRpdmUpIHsKLSAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCAqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9Ci0gICAgQVNTRVJUKCFtX3BhcnNlZENhbGN1bGF0
aW9uKTsKKwogICAgIGlmIChwYXJzZWRWYWx1ZSkgewogICAgICAgICBpZiAoIW1fdmFsdWVMaXN0
LT5jdXJyZW50KCkgfHwgaW5TaG9ydGhhbmQoKSkgewogICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCBwYXJzZWRWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CkBAIC0zMjIwLDE2ICsz
MjE3LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjp1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yKCkgY29uc3QKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU5vbkVsZW1lbnRTbmFwUG9p
bnRzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVk
KCk7Ci0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKnZhbCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkK
LSAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgq
dmFsKSk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24KLSAgICAgICAgICAgICYmIHZhbC0+ZnVuY3Rpb24tPmFyZ3MKLSAgICAgICAgICAgICYm
IHZhbC0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiBlcXVhbEln
bm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0KCIpKSB7Ci0gICAgICAgICAg
ICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsID0gKnZhbC0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCkt
PmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmICh2YWxpZFVuaXQocGFyc2VyVmFsLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0OjpjcmVhdGUoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHBhcnNlclZhbCkpKSk7CisgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgICAgIHZh
bHVlcy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbikpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6
RnVuY3Rpb24KKyAgICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncworICAgICAgICAg
ICAgJiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0KCIpKSB7Cisg
ICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigq
dmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYg
KHZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
eworICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbikpKSk7CiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI1MiwxNSArMzI1MCwxNSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VTY3JvbGxTbmFwRGVzdGluYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9uID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmIChtX3ZhbHVlTGlz
dC0+c2l6ZSgpICE9IDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogY3VyUGFyc2VyVmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbGlk
VW5pdCgqY3VyUGFyc2VyVmFsLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlWFdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CisgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVYV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZM
ZW5ndGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NW
YWx1ZVggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1clBhcnNlclZhbCk7Ci0gICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBjdXJQYXJzZXJWYWwgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgIGlmICghdmFsaWRVbml0KCpjdXJQYXJzZXJWYWwsIEZQZXJjZW50IHwgRkxl
bmd0aCkpCisgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZVggPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVYV2l0aENhbGN1bGF0aW9uKTsKKworICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIHZhbHVlWVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7CisgICAg
aWYgKCF2YWxpZFVuaXQodmFsdWVZV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZVkg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1clBhcnNlclZhbCk7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBjc3NWYWx1ZVkgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVZ
V2l0aENhbGN1bGF0aW9uKTsKICAgICBwb3NpdGlvbi0+YXBwZW5kKGNzc1ZhbHVlWC5yZWxlYXNl
Tm9uTnVsbCgpKTsKICAgICBwb3NpdGlvbi0+YXBwZW5kKGNzc1ZhbHVlWS5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBvc2l0aW9uLCBpbXBvcnRhbnQpOwpAQCAt
MzI3MiwxNSArMzI3MCwxNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTY3JvbGxTbmFwQ29vcmRp
bmF0ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gcG9zaXRpb25zID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOwogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIENT
U1BhcnNlclZhbHVlJiBwYXJzZWRWYWx1ZVggPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVYV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKICAgICAgICAgLy8gRG9uJ3QgYWNjZXB0IG9kZC1sZW5ndGggbGlz
dHMgb2YgY29vcmRpbmF0ZXMuCiAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPm5leHQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlZFZh
bHVlWSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdChw
YXJzZWRWYWx1ZVgsIEZQZXJjZW50IHwgRkxlbmd0aCkgfHwgIXZhbGlkVW5pdChwYXJzZWRWYWx1
ZVksIEZQZXJjZW50IHwgRkxlbmd0aCkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlWVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgIGlm
ICghdmFsaWRVbml0KHZhbHVlWFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSB8
fCAhdmFsaWRVbml0KHZhbHVlWVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlZFZhbHVlWCkpOwotICAgICAgICBwb3NpdGlv
bnMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUocGFyc2VkVmFsdWVZKSk7Cisg
ICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVhXaXRoQ2FsY3VsYXRpb24pKTsKKyAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICBpZiAocG9zaXRpb25zLT5sZW5ndGgoKSkgewpA
QCAtMzc3MiwxMiArMzc3MCwxNCBAQCBDU1NQYXJzZXI6OlNpemVQYXJhbWV0ZXJUeXBlIENTU1Bh
cnNlcjo6cGFyc2VTaXplUGFyYW1ldGVyKENTU1ZhbHVlTGlzdCYgcGFyc2VkVgogICAgICAgICAg
ICAgcmV0dXJuIFBhZ2VTaXplOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOwotICAg
IGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgotICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTGVu
Z3RoIHwgRk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBl
ID09IExlbmd0aCkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKSk7CisgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6IHsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUp
OworICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
Rk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IExl
bmd0aCkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4g
TGVuZ3RoOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOworICAgIH0KICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gTm9uZTsKICAgICB9CkBAIC0zOTczLDggKzM5NzMsOSBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uWChDU1NQYXJz
ZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgICAgICAgICAgcGVyY2VudCA9IDUwOwogICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9Ci0gICAgaWYgKHZhbGlkVW5pdCgqdmFsdWVM
aXN0LmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkp
OworICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxl
bmd0aCkpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0zOTg5LDggKzM5
OTAsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9u
WShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgICAgICAgICAgcGVyY2VudCA9IDUw
OwogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9Ci0gICAgaWYgKHZhbGlkVW5p
dCgqdmFsdWVMaXN0LmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSk7Cisg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5j
dXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJj
ZW50IHwgRkxlbmd0aCkpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00
MDI2LDE5ICs0MDI4LDE3IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsCiAKICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5j
dXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CisgICAgaWYgKHZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkgewogICAg
ICAgICBpZiAoIWN1bXVsYXRpdmVGbGFncykgewogICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdz
IHw9IFhGaWxsUG9zaXRpb247CiAgICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9z
aXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAoY3VtdWxhdGl2ZUZsYWdzICYgKFhGaWxsUG9zaXRp
b24gfCBBbWJpZ3VvdXNGaWxsUG9zaXRpb24pKSB7CiAgICAgICAgICAgICBjdW11bGF0aXZlRmxh
Z3MgfD0gWUZpbGxQb3NpdGlvbjsKICAgICAgICAgICAgIGluZGl2aWR1YWxGbGFnID0gWUZpbGxQ
b3NpdGlvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX3BhcnNlZENhbGN1
bGF0aW9uKQotICAgICAgICAgICAgICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJy
ZW50KCkpOworICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aENhbGN1bGF0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC00MjAw
LDcgKzQyMDAsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPEMKIAogaW5saW5lIGJvb2wgQ1NT
UGFyc2VyOjppc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQog
ewotICAgIHJldHVybiBpc0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWUuaWQpIHx8IHZhbGlkVW5p
dCh2YWx1ZSwgRlBlcmNlbnQgfCBGTGVuZ3RoLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAg
ICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLmlkKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUp
OworICAgIHJldHVybiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwg
Rkxlbmd0aCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbihDU1NQYXJz
ZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8
Q1NTVmFsdWU+JiB2YWx1ZTIpCkBAIC00MzY0LDkgKzQzNjcsMTAgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
JiBhbGxvd0MKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgcGFy
c2VkVmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50KSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1
ZSk7CisgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZWRWYWx1ZTI7CkBAIC00Mzc0LDEzICs0Mzc4LDE0IEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCYgYWxsb3dDCiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCiAgICAgICAgICAgICBhbGxvd0NvbW1hID0g
ZmFsc2U7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5pZCAhPSBDU1NWYWx1ZUF1dG8pIHsKLSAg
ICAgICAgICAgIGlmICghdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewor
ICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZh
bHVlKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpblNob3J0aGFuZCgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIHJld2luZCB0aGUgdmFsdWUgbGlzdCwgc28gdGhhdCB3aGVuIGl0IGlzIGFk
dmFuY2VkIHdlJ2xsIGVuZCB1cCBiYWNrIGF0IHRoaXMgdmFsdWUuCiAgICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghcGFy
c2VkVmFsdWUyICYmIHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplKSB7
CiAgICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSBzZXQgdGhlIHNlY29u
ZCB2YWx1ZSB0byB0aGUgZmlyc3QgaWYgaXQgaXMgb21pdHRlZC4KQEAgLTQ1ODEsOSArNDU4Niw5
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkRlbGF5KCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUg
PSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGlt
ZSkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwor
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
VGltZSkpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NTk3LDkgKzQ2
MDIsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGly
ZWN0aW9uKCkKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlv
bkR1cmF0aW9uKCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGltZSB8IEZOb25OZWcpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUg
fCBGTm9uTmVnKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTQ2MTYs
OCArNDYyMSw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRp
b25JdGVyYXRpb25Db3VudCgpCiAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlSW5maW5pdGUpCiAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUu
aWQpOwotICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOworICAgIGlmICh2YWxp
ZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTQ2NjcsOCArNDY3Myw5IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZChSZWZQdHI8Q1NTVmFsdWU+JiB2
YWx1ZTEsIFJlZlB0cjxDCiAKICAgICAvLyBub3cgZ2V0IHoKICAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLCBGTGVuZ3RoKSkgewotICAgICAgICAgICAgdmFsdWUzID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwor
ICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkgewor
ICAgICAgICAgICAgdmFsdWUzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDY4MCwxNiArNDY4NywxNiBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ZhbHVl
PiYgdmFsdWUxLCBSZWZQdHI8QwogCiBib29sIENTU1BhcnNlcjo6cGFyc2VDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBkb3VibGUmIHJlc3Vs
dCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBhcmdzLmN1cnJlbnQoKTsKLSAgICBp
ZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIpKQorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7CisgICAgaWYgKCF2YWxp
ZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmVzdWx0ID0gcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENh
bGNWYWx1ZSk7Ci0gICAgdmFsdWUgPSBhcmdzLm5leHQoKTsKLSAgICBpZiAoIXZhbHVlKSB7Cisg
ICAgcmVzdWx0ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKKyAgICBD
U1NQYXJzZXJWYWx1ZSogbmV4dFZhbHVlID0gYXJncy5uZXh0KCk7CisgICAgaWYgKCFuZXh0VmFs
dWUpIHsKICAgICAgICAgLy8gVGhlIGxhc3QgbnVtYmVyIGluIHRoZSBmdW5jdGlvbiBoYXMgbm8g
Y29tbWEgYWZ0ZXIgaXQsIHNvIHdlJ3JlIGRvbmUuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQorICAgIGlmICghaXNDb21tYShuZXh0VmFsdWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXJncy5uZXh0KCk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC00NzE3LDIyICs0NzI0LDI0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCiAgICAgICAgIGludCBudW1TdGVwczsK
ICAgICAgICAgYm9vbCBzdGVwQXRTdGFydCA9IGZhbHNlOwogCi0gICAgICAgIENTU1BhcnNlclZh
bHVlKiBjdXJyZW50VmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICghdmFsaWRV
bml0KCpjdXJyZW50VmFsdWUsIEZJbnRlZ2VyKSkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFy
Z3VtZW50ID0gYXJncy0+Y3VycmVudCgpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBpZiAoIXZhbGlkVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIG51bVN0ZXBzID0gY2xhbXBUb0ludGVnZXIoY3VycmVudFZhbHVl
LT5mVmFsdWUpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGhhbmRsZSBjYWxjdWxh
dGVkIHZhbHVlcy4KKyAgICAgICAgbnVtU3RlcHMgPSBjbGFtcFRvSW50ZWdlcihhcmd1bWVudC0+
ZlZhbHVlKTsKICAgICAgICAgaWYgKG51bVN0ZXBzIDwgMSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwogCi0gICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50KSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGNvbW1hIHNv
IHdlIG5lZWQgdG8gcGFyc2UgdGhlIHNlY29uZCB2YWx1ZQotICAgICAgICAgICAgaWYgKCFpc0Nv
bW1hKGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgY3VycmVudFZhbHVl
ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgIT0gQ1NT
VmFsdWVTdGFydCAmJiBjdXJyZW50VmFsdWUtPmlkICE9IENTU1ZhbHVlRW5kKQorICAgICAgICAg
ICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgICAgICBpZiAoYXJndW1lbnQtPmlk
ICE9IENTU1ZhbHVlU3RhcnQgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlRW5kKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBjdXJy
ZW50VmFsdWUtPmlkID09IENTU1ZhbHVlU3RhcnQ7CisgICAgICAgICAgICBzdGVwQXRTdGFydCA9
IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZVN0YXJ0OwogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKG51bVN0ZXBzLCBzdGVwQXRT
dGFydCk7CkBAIC00ODkzLDIzICs0OTAyLDI1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlk
Q3VzdG9tSWRlbnQoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogLy8gVGhlIGZ1bmN0aW9u
IHBhcnNlcyBbIDxpbnRlZ2VyPiB8fCA8Y3VzdG9tLWlkZW50PiBdIGluIDxncmlkLWxpbmU+ICh3
aGljaCBjYW4gYmUgc3RhbmQgYWxvbmUgb3Igd2l0aCAnc3BhbicpLgogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlSW50ZWdlck9yQ3VzdG9tSWRlbnRGcm9tR3JpZFBvc2l0aW9uKFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mIG51bWVyaWNWYWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgZ3Jp
ZExpbmVOYW1lKQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyKSAmJiB2YWx1ZS0+
ZlZhbHVlKSB7Ci0gICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSgqdmFsdWUpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgIGlmICh2YWx1ZSAmJiBpc1ZhbGlkQ3VzdG9tSWRlbnQoKnZhbHVlKSkgewotICAgICAgICAg
ICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5m
VmFsdWUpIHsKKyAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRW
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGlmIChuZXh0VmFsdWUgJiYgaXNW
YWxpZEN1c3RvbUlkZW50KCpuZXh0VmFsdWUpKSB7CisgICAgICAgICAgICBncmlkTGluZU5hbWUg
PSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbmV4dFZhbHVlKTsKICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgaWYgKGlzVmFsaWRDdXN0b21JZGVudCgqdmFsdWUpKSB7Ci0gICAgICAgIGdyaWRM
aW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBpZiAo
dmFsdWUgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIpICYmIHZhbHVlLT5mVmFsdWUpIHsK
LSAgICAgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgq
dmFsdWUpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICBpZiAoaXNWYWxp
ZEN1c3RvbUlkZW50KHZhbHVlV2l0aENhbGN1bGF0aW9uKSkgeworICAgICAgICBncmlkTGluZU5h
bWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Cisg
ICAgICAgIGlmIChDU1NQYXJzZXJWYWx1ZSogbmV4dFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KSkgeworICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1
bGF0aW9uKCpuZXh0VmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbGlkVW5pdChuZXh0VmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyKSAmJiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTUyOTMsMTMgKzUzMDQsMTggQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3QoKQogYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlR3JpZFRyYWNrUmVwZWF0RnVuY3Rpb24oQ1NTVmFsdWVMaXN0JiBsaXN0KQogewog
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1lbnRzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRz
LT5zaXplKCkgPCAzIHx8ICF2YWxpZFVuaXQoKmFyZ3VtZW50cy0+dmFsdWVBdCgwKSwgRlBvc2l0
aXZlSW50ZWdlcikgfHwgIWlzQ29tbWEoYXJndW1lbnRzLT52YWx1ZUF0KDEpKSkKKyAgICBpZiAo
IWFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPnNpemUoKSA8IDMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEFTU0VSVChhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSA+IDApOworICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50
cy0+dmFsdWVBdCgwKSk7CisgICAgaWYgKCF2YWxpZFVuaXQoZmlyc3RWYWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlBvc2l0aXZlSW50ZWdlcikgfHwgIWlzQ29tbWEoYXJndW1lbnRzLT52YWx1ZUF0KDEp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBo
YW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgQVNTRVJUKGZpcnN0VmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWUgPiAwKTsKICAgICAvLyBJZiBhcmd1bWVudHMtPnZhbHVlQXQo
MCktPmZWYWx1ZSA+IFNJWkVfTUFYIHRoZW4gcmVwZXRpdGlvbnMgYmVjb21lcyAwIGR1cmluZyB0
aGUgdHlwZSBjYXN0aW5nLCB0aGF0J3Mgd2h5IHdlCiAgICAgLy8gY2xhbXAgaXQgZG93biB0byBr
R3JpZE1heFRyYWNrcyBiZWZvcmUgdGhlIHR5cGUgY2FzdGluZy4KLSAgICB1bnNpZ25lZCByZXBl
dGl0aW9ucyA9IGNsYW1wVG88dW5zaWduZWQ+KGFyZ3VtZW50cy0+dmFsdWVBdCgwKS0+ZlZhbHVl
LCAwLCBrR3JpZE1heFRyYWNrcyk7CisgICAgdW5zaWduZWQgcmVwZXRpdGlvbnMgPSBjbGFtcFRv
PHVuc2lnbmVkPihmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCAwLCBr
R3JpZE1heFRyYWNrcyk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiByZXBlYXRlZFZhbHVl
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBhcmd1bWVudHMt
Pm5leHQoKTsgLy8gU2tpcCB0aGUgcmVwZXRpdGlvbiBjb3VudC4KQEAgLTUzNzMsMTMgKzUzODks
MTMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1NpemUo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QKICAgICByZXR1cm4gcGFyc2VHcmlkQnJlYWR0
aChjdXJyZW50VmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnRWYWx1ZSkKK1Bh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NW
YWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgY3VycmVudFZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0
TWF4Q29udGVudCkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShjdXJyZW50VmFsdWUuaWQpOworICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZVdl
YmtpdE1pbkNvbnRlbnQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
LmlkKTsKIAotICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0ZSKSB7Ci0gICAgICAgIGRvdWJsZSBmbGV4VmFsdWUgPSBjdXJyZW50VmFsdWUuZlZhbHVl
OworICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIpIHsKKyAg
ICAgICAgZG91YmxlIGZsZXhWYWx1ZSA9IHZhbHVlLmZWYWx1ZTsKIAogICAgICAgICAvLyBGcmFj
dGlvbmFsIHVuaXQgaXMgYSBub24tbmVnYXRpdmUgZGltZW5zaW9uLgogICAgICAgICBpZiAoZmxl
eFZhbHVlIDw9IDApCkBAIC01Mzg4LDEwICs1NDA0LDExIEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYgY3Vy
cmVuCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShmbGV4VmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIpOwogICAgIH0KIAotICAgIGlmICghdmFsaWRVbml0
KGN1cnJlbnRWYWx1ZSwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOworICAgIGlmICghdmFs
aWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTm9uTmVnIHwgRkxlbmd0aCB8IEZQZXJjZW50
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc1ZhbGlkR3JpZEF1dG9GbG93SWQoQ1NTVmFsdWVJRCBpZCkKQEAgLTU1NjAsMTEgKzU1Nzcs
MTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgYXJnID0gYXJncy0+bmV4
dCgpOwogICAgICAgICAgICAgICAgIGFyZyA9IHNraXBDb21tYUluRGFzaGJvYXJkUmVnaW9uKGFy
Z3MpOwogCi0gICAgICAgICAgICAgICAgdmFsaWQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byB8
fCB2YWxpZFVuaXQoKmFyZywgRkxlbmd0aCk7CisgICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gYXJnV2l0aENhbGN1bGF0aW9uKCphcmcpOworICAgICAgICAgICAgICAgIHZhbGlk
ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ1dpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGFtb3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoKmFyZyk7CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91
bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z1dpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKQogICAgICAg
ICAgICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQpOwpAQCAtNTc0MCwxMiArNTc1OCwx
MyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDbGlwU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxSZWN0PiByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7
CiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgaW50IGkgPSAwOwotICAgIENTU1BhcnNlclZh
bHVlKiBjdXJyZW50VmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgd2hpbGUgKGN1cnJlbnRW
YWx1ZSkgewotICAgICAgICB2YWxpZCA9IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTGVuZ3RoKTsKKyAgICBDU1NQYXJzZXJWYWx1
ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgd2hpbGUgKGFyZ3VtZW50KSB7Cisg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1
bWVudCk7CisgICAgICAgIHZhbGlkID0gYXJndW1lbnQtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2
YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwogICAgICAgICBpZiAo
IXZhbGlkKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbGVuZ3RoID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqY3VycmVudFZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBsZW5ndGggPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBpZiAo
aSA9PSAwKQogICAgICAgICAgICAgcmVjdC0+c2V0VG9wKGxlbmd0aCk7CiAgICAgICAgIGVsc2Ug
aWYgKGkgPT0gMSkKQEAgLTU3NTQsMTAgKzU3NzMsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Q2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
ICAgIHJlY3QtPnNldEJvdHRvbShsZW5ndGgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBy
ZWN0LT5zZXRMZWZ0KGxlbmd0aCk7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQo
KTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBhcmdzLT5zaXplKCkgPT0gNykgewotICAg
ICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFZhbHVlID0gYXJncy0+bmV4dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQo
KTsKKyAgICAgICAgaWYgKGFyZ3VtZW50ICYmIGFyZ3MtPnNpemUoKSA9PSA3KSB7CisgICAgICAg
ICAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGFy
Z3VtZW50LT5pVmFsdWUgPT0gJywnKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01ODI0LDEwICs1ODQzLDExIEBAIFBh
c3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENvcm5l
cnMoUGFzc1JlZlB0cjxDU1NCYXNpCiAgICAgICAgIGlmIChpIC0gaW5kZXhBZnRlclNsYXNoID49
IDQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCisgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICAgICAgaWYgKCF2
YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25O
ZWcpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUp
OworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgaWYgKCFp
bmRleEFmdGVyU2xhc2gpCiAgICAgICAgICAgICByYWRpaVswXVtpXSA9IHJhZGl1czsKQEAgLTU4
NjQsMTAgKzU4ODQsMTEgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBh
cnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYgYXIKICAgICAgICAgfQogCiAg
ICAgICAgIFVuaXRzIHVuaXRGbGFncyA9IEZMZW5ndGggfCBGUGVyY2VudDsKLSAgICAgICAgaWYg
KCF2YWxpZFVuaXQoKmFyZ3VtZW50LCB1bml0RmxhZ3MpIHx8IHdpZHRoQXJndW1lbnRzLnNpemUo
KSA+IDQpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCB1bml0RmxhZ3MpIHx8IHdpZHRoQXJndW1lbnRzLnNpemUoKSA+IDQpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICB3aWR0aEFyZ3VtZW50cy5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICB3aWR0aEFyZ3Vt
ZW50cy5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKSk7CiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7CiAgICAgfQogCkBAIC01
OTAyLDEwICs1OTIzLDExIEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VTaGFwZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgaWYgKHZhbHVl
LmlkID09IENTU1ZhbHVlQ2xvc2VzdFNpZGUgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVGYXJ0aGVz
dFNpZGUpCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUuaWQpOwogCi0gICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVy
Y2VudCB8IEZOb25OZWcpKQorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1
bGF0aW9uKHZhbHVlKTsKKyAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiB9
CiAKIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVD
aXJjbGUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQpAQCAtNjAxOSwxNCArNjA0MSwxOCBAQCBQ
YXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUG9seWdv
bihDU1NQYXJzZXJWYWx1ZUxpc3QmCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WCA9IGFy
Z3VtZW50OwogICAgIHdoaWxlIChhcmd1bWVudFgpIHsKIAotICAgICAgICBpZiAoIXZhbGlkVW5p
dCgqYXJndW1lbnRYLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50WCk7CisgICAgICAgIGlm
ICghdmFsaWRVbml0KGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50
WCk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geExlbmd0aCA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAg
IENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFkgPSBhcmdzLm5leHQoKTsKLSAgICAgICAgaWYgKCFh
cmd1bWVudFkgfHwgIXZhbGlkVW5pdCgqYXJndW1lbnRZLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQor
ICAgICAgICBpZiAoIWFyZ3VtZW50WSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHlMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKmFyZ3VtZW50WSk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFy
Z3VtZW50WVdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnRZKTsKKyAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
eUxlbmd0aCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFlXaXRoQ2FsY3Vs
YXRpb24pOwogCiAgICAgICAgIHNoYXBlLT5hcHBlbmRQb2ludCh4TGVuZ3RoLnJlbGVhc2UoKSwg
eUxlbmd0aC5yZWxlYXNlKCkpOwogCkBAIC02MDgxLDcgKzYxMDcsNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUFuZE9yQm94KENTU1Byb3BlcnR5SUQg
cHJvcElkKQogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHNoYXBlVmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgICAgICBzaGFwZUZvdW5kID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0JveFZhbHVlKHZhbHVlSWQsIHByb3BJZCkgJiYgIWJveEZvdW5kKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1p
dGl2ZSh2YWx1ZUlkLCAqdmFsdWUpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZUlkKTsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgIGJveEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CkBAIC02MTAzLDEzICs2MTI5LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkKQog
CiAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAg
ICAgQ1NTVmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUuaWQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBrZXl3b3JkVmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFw
ZVZhbHVlOwogCiAgICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGtl
eXdvcmRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFsdWVJZCwgdmFsdWUpOwogICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4ga2V5d29yZFZhbHVlLnJlbGVh
c2UoKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZUlkKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7CkBA
IC02MTI5LDcgKzYxNTIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
Q2xpcFBhdGgoKQogCiAgICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBwYXJzZVZhbGlkUHJpbWl0aXZl
KHZhbHVlSWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKICAgICB9CiAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
QEAgLTYzNDksMzEgKzYzNzIsMzEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNl
cjo6cGFyc2VGb250RmFtaWx5KCkKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZUhlaWdodChi
b29sIGltcG9ydGFudCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7CisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlk
OwogICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxzZTsKICAgICAvLyBub3JtYWwgfCA8bnVt
YmVyPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAogICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vcm1hbCkKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgIGVsc2UK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJl
ciB8IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZM
ZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICBpZiAodmFsaWRQcmltaXRpdmUgJiYg
KCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IGluU2hvcnRoYW5kKCkpKQotICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVl
KSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFu
dCk7CiAgICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZlOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFy
c2VGb250U2l6ZShib29sIGltcG9ydGFudCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUg
PSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLmlkOwogICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxzZTsKICAgICAvLyA8
YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdl
PiB8IGluaGVyaXQKICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIGlkIDw9IENTU1Zh
bHVlTGFyZ2VyKQogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgZWxzZQotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKICAgICBpZiAodmFs
aWRQcmltaXRpdmUgJiYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IGluU2hvcnRoYW5kKCkpKQot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0
aXZlKGlkLCB2YWx1ZSksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFNpemUsIHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9u
KSwgaW1wb3J0YW50KTsKICAgICByZXR1cm4gdmFsaWRQcmltaXRpdmU7CiB9CiAKQEAgLTY0Mzks
OCArNjQ2Miw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRXZWlnaHQoYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSwgaW1wb3J0YW50KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2Vy
IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpIHsKLSAgICAgICAgaW50IHdlaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGFyc2VkRG91YmxlKHZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSk7
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwor
ICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5l
ZywgQ1NTUXVpcmtzTW9kZSkpIHsKKyAgICAgICAgaW50IHdlaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGlmICghKHdl
aWdodCAlIDEwMCkgJiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7CiAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKHdlaWdodCkp
LCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02OTM1LDEyICs2OTU5
LDkgQEAgYm9vbCBDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9yKFJHQkEzMiYgcmdiLCBjb25zdCBT
dHJpbmdUeXBlJiBuYW1lLCBib29sIHN0cmljdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAg
Ci1pbmxpbmUgZG91YmxlIENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYykKK2lubGlu
ZSBkb3VibGUgQ1NTUGFyc2VyOjpwYXJzZWREb3VibGUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZh
bHVlV2l0aENhbGN1bGF0aW9uKQogewotICAgIGRvdWJsZSByZXN1bHQgPSBtX3BhcnNlZENhbGN1
bGF0aW9uID8gbV9wYXJzZWRDYWxjdWxhdGlvbi0+ZG91YmxlVmFsdWUoKSA6IHZhbHVlLmZWYWx1
ZTsKLSAgICBpZiAocmVsZWFzZUNhbGMgPT0gUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkKLSAgICAg
ICAgbV9wYXJzZWRDYWxjdWxhdGlvbiA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSA/IHZhbHVlV2l0aENh
bGN1bGF0aW9uLmNhbGN1bGF0aW9uKCktPmRvdWJsZVZhbHVlKCkgOiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmZWYWx1ZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OmlzQ2FsY3VsYXRpb24o
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQpAQCAtNjk1MiwxNiArNjk3MywxNiBAQCBib29sIENTU1Bh
cnNlcjo6aXNDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiAgICAgICAgICAgICB8
fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbWF4KCIp
KTsKIH0KIAotaW5saW5lIGludCBDU1NQYXJzZXI6OmNvbG9ySW50RnJvbVZhbHVlKENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKK2lubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7CiAgICAgYm9vbCBp
c1BlcmNlbnQ7CiAgICAgCi0gICAgaWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pCi0gICAgICAgIGlz
UGVyY2VudCA9IG1fcGFyc2VkQ2FsY3VsYXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY1BlcmNlbnQ7
CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpCisgICAgICAgIGlz
UGVyY2VudCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCktPmNhdGVnb3J5KCkg
PT0gQ2FsY1BlcmNlbnQ7CiAgICAgZWxzZQotICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRTsKKyAgICAgICAgaXNQZXJjZW50
ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRTsKIAotICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNl
ZERvdWJsZSh2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgY29uc3QgZG91Ymxl
IGRvdWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAK
ICAgICBpZiAoZG91YmxlVmFsdWUgPD0gMC4wKQogICAgICAgICByZXR1cm4gMDsKQEAgLTY5ODEs
MzQgKzcwMDIsMzQgQEAgaW5saW5lIGludCBDU1NQYXJzZXI6OmNvbG9ySW50RnJvbVZhbHVlKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVy
cyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGludCogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhh
KQogewogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdz
LmdldCgpOwotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBhcmdzLT5jdXJyZW50
KCk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlv
bigqYXJncy0+Y3VycmVudCgpKTsKICAgICBVbml0cyB1bml0VHlwZSA9IEZVbmtub3duOwogICAg
IC8vIEdldCB0aGUgZmlyc3QgdmFsdWUgYW5kIGl0cyB0eXBlCi0gICAgaWYgKHZhbGlkVW5pdCgq
Y3VycmVudFZhbHVlLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgaWYgKHZhbGlkVW5p
dChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkp
CiAgICAgICAgIHVuaXRUeXBlID0gRkludGVnZXI7Ci0gICAgZWxzZSBpZiAodmFsaWRVbml0KCpj
dXJyZW50VmFsdWUsIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICBlbHNlIGlmICh2YWxp
ZFVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQsIENTU1N0cmljdE1v
ZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZQZXJjZW50OwogICAgIGVsc2UKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIGNvbG9yQXJyYXlbMF0gPSBjb2xvckludEZyb21WYWx1ZSgq
Y3VycmVudFZhbHVlKTsKKyAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoZmly
c3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBp
KyspIHsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAo
Y3VycmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50
VmFsdWUtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgIENTU1BhcnNlclZhbHVlJiBvcGVyYXRvckFy
Z3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5p
dCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUg
IT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50VmFsdWUg
PSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHVu
aXRUeXBlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRV
bml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvcklu
dEZyb21WYWx1ZSgqY3VycmVudFZhbHVlKTsKKyAgICAgICAgY29sb3JBcnJheVtpXSA9IGNvbG9y
SW50RnJvbVZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICB9CiAgICAgaWYgKHBh
cnNlQWxwaGEpIHsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAg
ICBpZiAoY3VycmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBj
dXJyZW50VmFsdWUtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgIENTU1BhcnNlclZhbHVlJiBvcGVy
YXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1l
bnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5p
VmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50
VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFs
dWUsIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKKyAgICAgICAgaWYgKCF2
YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUg
PSBwYXJzZWREb3VibGUoKmN1cnJlbnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7Cisg
ICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbik7CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVy
IG9mIGFscGhhIHRvIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIFswLCAyNTYpLAogICAgICAgICAv
LyB3aXRoIGFuIGVxdWFsIGRpc3RyaWJ1dGlvbiBhY3Jvc3MgYWxsIDI1NiB2YWx1ZXMuCiAgICAg
ICAgIGNvbG9yQXJyYXlbM10gPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWF4PGRvdWJsZT4oMCwg
c3RkOjptaW48ZG91YmxlPigxLCBkb3VibGVWYWx1ZSkpICogbmV4dGFmdGVyKDI1Ni4wLCAwLjAp
KTsKQEAgLTcwMjQsMjkgKzcwNDUsMjkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJh
bWV0ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib28KIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBkb3Vi
bGUqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAg
Ly8gR2V0IHRoZSBmaXJzdCB2YWx1ZQotICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUs
IEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQorICAgIGlmICghdmFsaWRVbml0KGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgLy8gbm9ybWFsaXplIHRoZSBIdWUgdmFsdWUgYW5kIGNoYW5nZSBpdCB0
byBiZSBiZXR3ZWVuIDAgYW5kIDEuMAotICAgIGNvbG9yQXJyYXlbMF0gPSAoKChzdGF0aWNfY2Fz
dDxpbnQ+KHBhcnNlZERvdWJsZSgqY3VycmVudFZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVl
KSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjAuMDsKKyAgICBjb2xvckFycmF5WzBdID0gKCgo
c3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlv
bikpICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwLjA7CiAgICAgZm9yIChpbnQgaSA9IDE7IGkg
PCAzOyArK2kpIHsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAg
ICBpZiAoY3VycmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBj
dXJyZW50VmFsdWUtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgIENTU1BhcnNlclZhbHVlJiBvcGVy
YXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1l
bnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5p
VmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50
VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFs
dWUsIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICgh
dmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9k
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbaV0gPSBz
dGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMTAwLCBwYXJzZWREb3VibGUoKmN1
cnJlbnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpKSAvIDEwMC4wOyAvLyBuZWVkcyB0
byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAorICAgICAgICBjb2xvckFycmF5W2ldID0gc3Rk
OjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEwMCwgcGFyc2VkRG91YmxlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSkpIC8gMTAwLjA7IC8vIG5lZWRzIHRvIGJlIHZhbHVlIGJldHdl
ZW4gMCBhbmQgMS4wCiAgICAgfQogICAgIGlmIChwYXJzZUFscGhhKSB7Ci0gICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAh
PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywn
KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0
KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgY29sb3JBcnJheVszXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48
ZG91YmxlPigxLCBwYXJzZWREb3VibGUoKmN1cnJlbnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNW
YWx1ZSkpKTsKKyAgICAgICAgY29sb3JBcnJheVszXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3Rk
OjptaW48ZG91YmxlPigxLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSk7
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzE1OCw5ICs3MTc5LDkgQEAgc3RydWN0
IFNoYWRvd1BhcnNlQ29udGV4dCB7CiAgICAgICAgIGFsbG93U3R5bGUgPSBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNo
YWRvdzsKICAgICB9CiAKLSAgICB2b2lkIGNvbW1pdExlbmd0aChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUpCisgICAgdm9pZCBjb21taXRMZW5ndGgoQ1NTUGFyc2VyOjpWYWx1ZVdpdGhDYWxjdWxhdGlv
biYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiAgICAgewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRp
dmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbik7CiAKICAgICAgICAgaWYgKGFsbG93WCkgewogICAgICAgICAgICAgeCA9IHBy
aW1pdGl2ZVZhbHVlLnJlbGVhc2UoKTsKQEAgLTcyMzgsNiArNzI1OSw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBDCiAgICAgU2hhZG93UGFyc2VDb250ZXh0IGNvbnRleHQocHJvcElkLCAqdGhp
cyk7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwogICAgIHdoaWxlICgodmFsdWUgPSB2YWx1
ZUxpc3QuY3VycmVudCgpKSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqdmFsdWUpOwogICAgICAgICAvLyBDaGVjayBmb3IgYSBjb21tYSBicmVh
ayBmaXJzdC4KICAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvcikgewogICAgICAgICAgICAgaWYgKHZhbHVlLT5pVmFsdWUgIT0gJywnIHx8ICFjb250ZXh0
LmFsbG93QnJlYWspIHsKQEAgLTcyNTAsMjIgKzcyNzIsMjIgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsIEMKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIC8vIFRo
ZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0LgogICAgICAgICAgICAgY29udGV4dC5jb21taXRW
YWx1ZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgsIENT
U1N0cmljdE1vZGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAgLy8gV2Ug
cmVxdWlyZWQgYSBsZW5ndGggYW5kIGRpZG4ndCBnZXQgb25lLiBJbnZhbGlkLgogICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LmFsbG93TGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEJsdXIgcmFkaXVzIG11c3QgYmUgbm9uLW5lZ2F0aXZl
LgotICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZFVuaXQoKnZhbHVl
LCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoY29u
dGV4dC5hbGxvd0JsdXIgJiYgIXZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgICAgICAvLyBBIGxlbmd0aCBpcyBhbGxvd2VkIGhlcmUuICBDb25zdHJ1
Y3QgdGhlIHZhbHVlIGFuZCBhZGQgaXQuCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdExlbmd0
aCgqdmFsdWUpOworICAgICAgICAgICAgY29udGV4dC5jb21taXRMZW5ndGgodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluc2V0
KSB7CiAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWxsb3dTdHlsZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHlsZSgqdmFs
dWUpOworICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHlsZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGUgb25seSBvdGhlciB0eXBl
IG9mIHZhbHVlIHRoYXQncyBvayBpcyBhIGNvbG9yIHZhbHVlLgogICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRDb2xvcjsKQEAgLTczMDYsMzQgKzczMjgsMzUgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgLy8gYm94LXJlZmxlY3Q6IDxkaXJlY3Rpb24+IDxvZmZzZXQ+IDxtYXNr
PgogCiAgICAgLy8gRGlyZWN0aW9uIGNvbWVzIGZpcnN0LgotICAgIENTU1BhcnNlclZhbHVlKiBj
dXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBkaXJlY3Rpb247Ci0gICAgc3dpdGNoIChjdXJyZW50VmFsdWUtPmlkKSB7CisgICAg
c3dpdGNoICh2YWx1ZS0+aWQpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUFib3ZlOgogICAgICAg
ICBjYXNlIENTU1ZhbHVlQmVsb3c6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVMZWZ0OgogICAgICAg
ICBjYXNlIENTU1ZhbHVlUmlnaHQ6Ci0gICAgICAgICAgICBkaXJlY3Rpb24gPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7CisgICAgICAgICAg
ICBkaXJlY3Rpb24gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRoZSBvZmZzZXQgY29tZXMgbmV4dC4KLSAg
ICBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG9mZnNldDsKLSAg
ICBpZiAoIWN1cnJlbnRWYWx1ZSkKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICBvZmZzZXQgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50KSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3VycmVudFZhbHVl
KTsKKyAgICAgICAgb2Zmc2V0ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKICAgICB9CiAKICAgICAvLyBOb3cgZm9yIHRoZSBtYXNrLgogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gbWFzazsKLSAgICBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgIGlmIChjdXJyZW50VmFsdWUpIHsKKyAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CisgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIGlmICghcGFyc2VCb3JkZXJJbWFnZShw
cm9wSWQsIG1hc2spKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczNTMs
MjAgKzczNzYsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChDU1NQYXJzZXJWYWx1ZUxp
c3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
ZmxleEJhc2lzOwogCiAgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mu
Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTnVtYmVyIHwg
Rk5vbk5lZykpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlkVW5pdChhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpKSB7CiAgICAgICAgICAgICBpZiAoZmxleEdy
b3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3JvdyA9IHBhcnNlZERvdWJs
ZSgqYXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICAgICAgICAgIGZs
ZXhHcm93ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKGZsZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBm
bGV4U2hyaW5rID0gcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFz
ZVBhcnNlZENhbGNWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gcGFyc2Vk
RG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFw
YXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
Ly8gZmxleCBvbmx5IGFsbG93cyBhIGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3Jv
dyBhbmQgZmxleC1zaHJpbmsgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAg
ICAgICAgICBmbGV4QmFzaXMgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2Ugb25seSBhbGxvdyAzIG51bWJlcnMgd2l0aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2
YWx1ZSBpcyAwLiBFLmcuLCBmbGV4OjEgMSAxIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFmbGV4QmFz
aXMgJiYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmd1bWVu
dCwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxleEJhc2lz
ID0gcGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudC0+aWQsICphcmd1bWVudCk7CisgICAgICAg
IH0gZWxzZSBpZiAoIWZsZXhCYXNpcyAmJiAoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkpCisgICAgICAgICAgICBmbGV4QmFzaXMg
PSBwYXJzZVZhbGlkUHJpbWl0aXZlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQs
IGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBOb3QgYSB2YWxpZCBhcmcgZm9yIGZsZXguCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC03NjM1LDkgKzc2NTksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0ZpbmFsQ29tbWl0KCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAgICB2b2lkIGNvbW1p
dE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21taXROdW1iZXIoQ1NT
UGFyc2VyOjpWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiAgICAg
ewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9w
YXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIGlmICghbV90
b3ApCiAgICAgICAgICAgICBtX3RvcCA9IHByaW1pdGl2ZVZhbHVlLnJlbGVhc2UoKTsKICAgICAg
ICAgZWxzZSBpZiAoIW1fcmlnaHQpCkBAIC03NzAyLDkgKzc3MjYsMTAgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQm9yZGVySW1hZ2VTbGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENT
U0JvcmRlckltYWcKICAgICBCb3JkZXJJbWFnZVNsaWNlUGFyc2VDb250ZXh0IGNvbnRleHQoKnRo
aXMpOwogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKICAgICB3aGlsZSAoKHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFs
dWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAgICAgLy8gRklYTUUgY2FsYygpIGh0dHA6
Ly93ZWJraXQub3JnL2IvMTY2NjIgOiBjYWxjIGlzIHBhcnNlZCBidXQgdmFsdWVzIGFyZSBub3Qg
Y3JlYXRlZCB5ZXQuCi0gICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgIWlzQ2Fs
Y3VsYXRpb24oKnZhbHVlKSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcg
fCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
TnVtYmVyKCp2YWx1ZSk7CisgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgIWlz
Q2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUp
KSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5hbGxvd0ZpbGwoKSAmJiB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVGaWxsKQogICAgICAgICAgICAgY29udGV4dC5jb21taXRGaWxsKCk7CiAgICAg
ICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7CkBAIC03NzQ2LDEzICs3NzcxLDEzIEBAIHB1
YmxpYzoKICAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
RmluYWxDb21taXQ7IH0KICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1
cm4gbV90b3AuZ2V0KCk7IH0KIAotICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKKyAgICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1
bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKICAgICB7CiAgICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWU7Ci0gICAgICAgIGlmICh2YWx1ZS5pZCA9PSBD
U1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CisgICAgICAgIGlmICh2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLmlkID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIHByaW1p
dGl2ZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmlt
aXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7
CisgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgaWYgKCFtX3RvcCkK
ICAgICAgICAgICAgIG1fdG9wID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwpAQCAtNzgxNCwx
MCArNzgzOSwxMSBAQCBwcml2YXRlOgogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VR
dWFkKFVuaXRzIHZhbGlkVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdCkK
IHsKICAgICBCb3JkZXJJbWFnZVF1YWRQYXJzZUNvbnRleHQgY29udGV4dCgqdGhpcyk7Ci0gICAg
Q1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZTsKLSAgICB3aGlsZSAoKGN1cnJlbnRWYWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVt
YmVyKCkgJiYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCB2YWxpZFVuaXRzLCBDU1NTdHJpY3RN
b2RlKSB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKLSAgICAgICAgICAg
IGNvbnRleHQuY29tbWl0TnVtYmVyKCpjdXJyZW50VmFsdWUpOworICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZTsKKyAgICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVl
KTsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBDU1NTdHJpY3RNb2RlKSB8fCB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVBdXRvKSkgeworICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7
CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdl
IGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzg3NCwxMCArNzkw
MCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+
PSA0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKKyAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOworICAgICAgICBpZiAoIXZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5l
ZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwor
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgaWYgKCFpbmRl
eEFmdGVyU2xhc2gpIHsKICAgICAgICAgICAgIHJhZGlpWzBdW2ldID0gcmFkaXVzOwpAQCAtNzky
MCwyMCArNzk0NywyMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBc3BlY3RSYXRpbyhib29sIGlt
cG9ydGFudCkKICAgICBpZiAobnVtICE9IDMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IENTU1BhcnNlclZhbHVlJiBsdmFsdWUgPSAqbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCk7CiAgICAg
Q1NTUGFyc2VyVmFsdWUmIG9wID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDEpOwotICAgIENTU1Bh
cnNlclZhbHVlJiBydmFsdWUgPSAqbV92YWx1ZUxpc3QtPnZhbHVlQXQoMik7CiAKICAgICBpZiAo
IWlzRm9yd2FyZFNsYXNoT3BlcmF0b3Iob3ApKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIXZhbGlkVW5pdChsdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSB8fCAhdmFsaWRVbml0
KHJ2YWx1ZSwgRk51bWJlciB8IEZOb25OZWcpKQorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGx2
YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCkpOworICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPnZhbHVl
QXQoMikpOworICAgIGlmICghdmFsaWRVbml0KGx2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJl
ciB8IEZOb25OZWcpIHx8ICF2YWxpZFVuaXQocnZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
IHwgRk5vbk5lZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbHZhbHVlLmZW
YWx1ZSB8fCAhcnZhbHVlLmZWYWx1ZSkKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGhhbmRs
ZSBjYWxjdWxhdGVkIHZhbHVlcy4KKyAgICBpZiAoIWx2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmZWYWx1ZSB8fCAhcnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFz
cGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93UHJlY2lzaW9uVG9G
bG9hdChsdmFsdWUuZlZhbHVlKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChydmFsdWUuZlZhbHVl
KSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RS
YXRpbywgQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
bHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSwgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChydmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpKSwgaW1wb3J0YW50KTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODEyNyw5ICs4MTU1LDExIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgUmVmUHRyPENTCiAgICAgLy8gRm9yIHJhZGlhbCBncmFkaWVudHMgb25seSwgd2Ugbm93IGV4
cGVjdCBhIG51bWVyaWMgcmFkaXVzLgogICAgIGlmIChncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVj
YXRlZFJhZGlhbEdyYWRpZW50KSB7CiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRpb24gdmFsdWVz
LgogICAgICAgICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBk
b3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRGaXJzdFJhZGl1cyhj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CisgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAg
IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVz
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwog
CiAgICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwpAQCAtODE2NCw5ICs4MTk0LDExIEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwg
UmVmUHRyPENTCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBj
YWxjdWxhdGlvbiB2YWx1ZXMuCiAgICAgICAgIGlmICghYXJndW1lbnQgfHwgYXJndW1lbnQtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQp
LnNldFNlY29uZFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7
CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudCk7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1
bHQpLnNldFNlY29uZFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24pKTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2lsbCBhY2NlcHQgYW55
IG51bWJlciBvZiBzdG9wcyAoMCBvciBtb3JlKS4KQEAgLTgyMzYsMTEgKzgyNjgsMTIgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBSZWYKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdz
LT5jdXJyZW50KCk7CiAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7CiAKICAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CiAgICAgLy8gTG9vayBmb3IgYW5n
bGUuCi0gICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkp
IHsKLSAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
KmFyZ3VtZW50KSk7CisgICAgaWYgKHZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwg
RkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogCiAgICAg
ICAgIGFyZ3MtPm5leHQoKTsKICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwpAQCAtODM3Nyw4
ICs4NDEwLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50
KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWYKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKIAogICAgIGlmICghc2hhcGVWYWx1ZSAmJiAhc2l6ZVZh
bHVlKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKSB7Ci0gICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBoU2l6ZVdp
dGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBpZiAodmFsaWRVbml0KGhTaXplV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICBob3Jpem9u
dGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShoU2l6ZVdpdGhDYWxjdWxhdGlv
bik7CiAgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlm
ICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODM4Niw4ICs4
NDIwLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENT
U1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWYKICAgICAgICAgICAgIGV4cGVjdENvbW1h
ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gdlNpemVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlk
VW5pdCh2U2l6ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAg
ICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZTaXplV2l0
aENhbGN1bGF0aW9uKTsKIAogICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAg
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQpAQCAtODQxOCwyOCArODQ1MywyOSBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgUmVmUHRyPENTU1ZhbAogICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5j
dXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKKyAgICBpZiAoIWFyZ3MtPmN1cnJlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RB
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+Y3VycmVudCgpKTsKKwogICAgIGJvb2wgZXhw
ZWN0Q29tbWEgPSBmYWxzZTsKICAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRV
bml0KCphcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQt
PnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICBp
ZiAodmFsaWRVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3Ry
aWN0TW9kZSkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogCiAgICAgICAgIGFyZ3Mt
Pm5leHQoKTsKICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJn
dW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBlcXVhbElnbm9y
aW5nQ2FzZSgqYXJndW1lbnQsICJ0byIpKSB7CisgICAgfSBlbHNlIGlmIChmaXJzdEFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UICYmIGVxdWFsSWdub3JpbmdDYXNlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sICJ0
byIpKSB7CiAgICAgICAgIC8vIHRvIFsgW2xlZnQgfCByaWdodF0gfHwgW3RvcCB8IGJvdHRvbV0g
XQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVu
dCkKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRBcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
KyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBlbmRYLCBlbmRZOwogICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxvY2F0aW9uOwogICAgICAgICBib29sIGlzSG9yaXpv
bnRhbCA9IGZhbHNlOwogCi0gICAgICAgIGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQo
KmFyZ3VtZW50LCBpc0hvcml6b250YWwpOworICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNp
ZGVLZXl3b3JkKCpuZXh0QXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CiAgICAgICAgIGlmICghbG9j
YXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg0NDgsMTEgKzg0ODQsMTEg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZW5k
WSA9IGxvY2F0aW9uOwogCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAg
ICBpZiAoIWFyZ3VtZW50KQorICAgICAgICBuZXh0QXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Cisg
ICAgICAgIGlmICghbmV4dEFyZ3VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKmFyZ3VtZW50LCBpc0hvcml6
b250YWwpOworICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCpuZXh0QXJn
dW1lbnQsIGlzSG9yaXpvbnRhbCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgICAgICAgICAgIGlmIChlbmRYKQpAQCAtODUw
Niw2ICs4NTQyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFy
c2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAvLyBbIGVsbGlwc2Ug
fHwgWyA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiBdezJ9IF0gfAogICAgIC8vIFsgWyBjaXJjbGUg
fCBlbGxpcHNlXSB8fCA8c2l6ZS1rZXl3b3JkPiBdCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24oKmFyZ3VtZW50KTsKICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgICAgIGJvb2wgYmFkSWRlbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnQtPmlkKSB7CkBAIC04NTMzLDE4ICs4NTcw
LDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgICAgICAgICBhcmd1bWVudCA9IGFy
Z3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZM
ZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2YWxpZFVuaXQoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKIAogICAgICAgICAgICAg
aWYgKHNpemVWYWx1ZSB8fCBob3Jpem9udGFsU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBpZiAodmFsaWRV
bml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZl
cnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpOworICAg
ICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdlNpemVXaXRoQ2FsY3VsYXRpb24oKmFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIGlmICh2YWxpZFVuaXQodlNpemVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodlNpemVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAg
ICAgICAgICsraTsKICAgICAgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQpAQCAtODYwOCwzOCArODY0NiwzOSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVl
TGlzdCwgUmVmUHRyPENTU1ZhbAogCiBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9y
U3RvcHMoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIENTU0dyYWRpZW50VmFsdWUmIGdy
YWRpZW50LCBib29sIGV4cGVjdENvbW1hKQogewotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50
VmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IHZhbHVlTGlzdC5jdXJyZW50KCk7CiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNNaWRwb2ludCA9
IHRydWU7CiAKICAgICAvLyBOb3cgbG9vayBmb3IgY29sb3Igc3RvcHMuCi0gICAgd2hpbGUgKGN1
cnJlbnRWYWx1ZSkgeworICAgIHdoaWxlICh2YWx1ZSkgewogICAgICAgICAvLyBMb29rIGZvciB0
aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCiAgICAgICAgIGlmIChleHBlY3RDb21tYSkg
ewotICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICBp
ZiAoIWlzQ29tbWEodmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLSAgICAgICAgICAgIGlm
ICghY3VycmVudFZhbHVlKQorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyA8Y29sb3Itc3RvcD4gPSA8Y29sb3I+IFsgPHBlcmNlbnRh
Z2U+IHwgPGxlbmd0aD4gXT8KICAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsKLSAg
ICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKCp0aGlzLCAq
Y3VycmVudFZhbHVlKTsKKyAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VHcmFkaWVudENvbG9y
T3JLZXl3b3JkKCp0aGlzLCAqdmFsdWUpOwogICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikgewog
ICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RvcFdhc01pZHBvaW50KSAvLyAyIG1pZHBvaW50cyBp
biBhIHJvdyBpcyBub3QgYWxsb3dlZC4gVGhpcyBhbHNvIGNhdGNoZXMgc3RhcnRpbmcgd2l0aCBh
IG1pZHBvaW50LgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
c3RvcC5pc01pZHBvaW50ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJy
ZW50VmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxp
c3QubmV4dCgpOwogCiAgICAgICAgIHByZXZpb3VzU3RvcFdhc01pZHBvaW50ID0gc3RvcC5pc01p
ZHBvaW50OwogCi0gICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2
YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAg
ICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3Vy
cmVudFZhbHVlKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWx1ZUxpc3QubmV4
dCgpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAg
ICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC5u
ZXh0KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3AuaXNNaWRwb2ludCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTg4NDAsMTQgKzg4NzksMTUgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUltYWdlUmVzb2x1dGlvbigpCiAK
ICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAg
IHdoaWxlICh2YWx1ZSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqdmFsdWUpOwogICAgICAgICBpZiAoIWhhdmVGcm9tSW1hZ2UgJiYgdmFsdWUt
PmlkID09IENTU1ZhbHVlRnJvbUltYWdlKSB7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAg
ICAgaGF2ZUZyb21JbWFnZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIWhhdmVTbmFwICYm
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNuYXApIHsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAg
ICAgICBoYXZlU25hcCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWhhdmVSZXNvbHV0aW9u
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZW
YWx1ZSA+IDApIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKnZhbHVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWhhdmVSZXNvbHV0aW9uICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlJlc29sdXRpb24gfCBGTm9uTmVnKSAm
JiB2YWx1ZS0+ZlZhbHVlID4gMCkgeworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAg
aGF2ZVJlc29sdXRpb24gPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtOTIxOSwyOSArOTI1OSwzMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAg
IENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICB1bnNpZ25l
ZCBhcmdOdW1iZXIgPSAwOwogICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwogICAgICAg
ICBDU1NQYXJzZXI6OlVuaXRzIHVuaXQgPSBpbmZvLnVuaXQoKTsKIAogICAgICAgICBpZiAoaW5m
by50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3Bl
cmF0aW9uICYmIGFyZ051bWJlciA9PSAzKSB7CiAgICAgICAgICAgICAvLyA0dGggcGFyYW0gb2Yg
cm90YXRlM2QoKSBpcyBhbiBhbmdsZSByYXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVyLCB2YWxpZGF0
ZSBpdCBhcyBzdWNoCi0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmds
ZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVt
YmVyID09IDIpIHsKICAgICAgICAgICAgIC8vIDNyZCBwYXJhbSBvZiB0cmFuc2xhdGUzZCgpIGNh
bm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVu
dCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24g
JiYgIWFyZ051bWJlcikgewogICAgICAgICAgICAgLy8gMXN0IHBhcmFtIG9mIHRyYW5zbGF0ZVoo
KSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJn
dW1lbnQsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlw
ZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAgICAgICAvLyAxc3QgcGFyYW0gb2YgcGVyc3Bl
Y3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciAoZGVwcmVjYXRlZCkgb3IgbGVu
Z3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTnVtYmVyIHwgRkxl
bmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0gZWxzZSBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIHVuaXQsIENTU1N0cmljdE1vZGUpKQor
ICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVu
aXQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgot
ICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAogICAgICAgICBh
cmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhcmd1bWVudCkKQEAgLTkzMTEs
MjEgKzkzNTIsMjIgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKQorICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24oKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSB2YWx1ZS5mVmFsdWU7CisgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAg
ICAgICAgICBkb3VibGUgYW1vdW50ID0gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5m
VmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNhdHVyYXRlIGFuZCBDb250cmFz
dCBhbGxvdyB2YWx1ZXMgb3ZlciAxMDAlLgogICAgICAgICAgICAgaWYgKGZpbHRlclR5cGUgIT0g
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgICAg
ICAgICAgJiYgZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0
ZXJPcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dlZCA9IHZhbHVl
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMTAwLjAgOiAxLjA7
CisgICAgICAgICAgICAgICAgZG91YmxlIG1heEFsbG93ZWQgPSBhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8g
MTAwLjAgOiAxLjA7CiAgICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+IG1heEFsbG93ZWQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGFt
b3VudCwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5p
dCkpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoYW1vdW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
Pihhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTMzNSwxMSArOTM3NywxMiBAQCBQYXNzUmVmUHRyPFdl
YktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50
cyhDU1NQYXJzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqYXJncy5j
dXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQ
ZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7CisgICAgICAgICAgICBp
ZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50
LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2
YWx1ZS5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZh
bHVlLnVuaXQpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGhhbmRsZSBj
YWxjdWxhdGVkIHZhbHVlcy4KKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC05MzQ5LDExICs5MzkyLDExIEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVy
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmdzLnNp
emUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50ID0gKmFyZ3MuY3Vy
cmVudCgpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQsIEZBbmdsZSwgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAotICAgICAgICAgICAgZmlsdGVy
VmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnQpKTsKKyAg
ICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtOTM2MywxMSArOTQwNiwxMSBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJncy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBhcmd1bWVudCA9ICphcmdzLmN1cnJl
bnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50LCBGTGVuZ3RoIHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYg
KCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnQpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtOTU0NCw4ICs5NTg3LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVHJhbnNmb3JtT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBw
cm9wSWQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aOiB7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0
KCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAg
ICBpZiAodmFsdWUpCiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtOTgwMSw4ICs5ODQ1LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVRleHRJbmRlbnQoKQogCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAg
aWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50KSkgewotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqdmFsdWUpKTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVX
aXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRh
Z2UgJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQp
KSB7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgICAgICBoYXNMZW5ndGhPclBlcmNlbnRh
Z2UgPSB0cnVlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKQEAgLTk5NzgsMjEg
KzEwMDIzLDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJv
b2wgaW1wb3J0YW50KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIENhbGN1bGF0aW9uUGVybWl0dGVk
VmFsdWVSYW5nZSByYW5nZSkKK1JlZlB0cjxDU1NDYWxjVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VD
YWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFs
dWVSYW5nZSByYW5nZSkKIHsKICAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbih2YWx1ZSkpOwogICAg
IAogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwogICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQVNTRVJUKCFtX3BhcnNlZENhbGN1
bGF0aW9uKTsKLSAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICphcmdzLCByYW5nZSk7Ci0gICAgCi0gICAgaWYgKCFtX3Bh
cnNlZENhbGN1bGF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIENTU0NhbGNWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAqYXJncywgcmFuZ2UpOwogfQogCiAjZGVmaW5lIEVORF9UT0tFTiAwCkBAIC0xMjE4Niwx
MSArMTIyMjUsMTIgQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0
ZVZpZXdwb3J0UnVsZSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKKyAg
ICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
dmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworCisgICAgQ1NT
VmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgYm9vbCB2
YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwogCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKQEAgLTEyMjAx
LDcgKzEyMjQxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVEZXZpY2VXaWR0aCB8fCBpZCA9PSBDU1NWYWx1ZURl
dmljZUhlaWdodCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgg
fCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdpZHRoOiAvLyBzaG9ydGhhbmQKICAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRTaG9y
dGhhbmQocHJvcElkLCBDU1NQcm9wZXJ0eU1pbldpZHRoLCBDU1NQcm9wZXJ0eU1heFdpZHRoLCBp
bXBvcnRhbnQpOwpAQCAtMTIyMTMsNyArMTIyNTMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
aWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlk
ICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29tOiAvLyB6b29tIHwgZml4ZWQKICAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlWm9vbSB8fCBpZCA9PSBDU1NWYWx1ZUZpeGVkKQpAQCAtMTIyMjgs
NyArMTIyNjgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VkVmFsdWU7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIHBhcnNlZFZh
bHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgKnZhbHVlKTsKKyAgICAgICAgcGFyc2VkVmFs
dWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5k
ZXggMGUyNzQ0OTQxNmU1YjdjN2NkYTIwNzk0ZjY3OWQyYzczMDcwMjg0MC4uMTEyODY3MjJhMGU3
NDRkZGNmMWNlNGE0YTgzMzQ0ZGYzNDk0YjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAt
ODAsNiArODAsMjMgQEAgcHVibGljOgogICAgICAgICBHZW5lcmFsU3ludGF4RXJyb3IKICAgICB9
OwogCisgICAgY2xhc3MgVmFsdWVXaXRoQ2FsY3VsYXRpb24geworICAgIHB1YmxpYzoKKyAgICAg
ICAgZXhwbGljaXQgVmFsdWVXaXRoQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQor
ICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7IH0KKworICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIG9w
ZXJhdG9yIENTU1BhcnNlclZhbHVlJigpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgICAgICBD
U1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYWxjdWxhdGlvbi5n
ZXQoKTsgfQorICAgICAgICB2b2lkIHNldENhbGN1bGF0aW9uKFJlZlB0cjxDU1NDYWxjVmFsdWU+
IGNhbGN1bGF0aW9uKSB7IG1fY2FsY3VsYXRpb24gPSBXVEY6Om1vdmUoY2FsY3VsYXRpb24pOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgbV92YWx1ZTsKKyAgICAg
ICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjdWxhdGlvbjsKKyAgICB9OworCiAgICAgQ1NT
UGFyc2VyKGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogICAgIH5DU1NQYXJzZXIoKTsKQEAg
LTkyLDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEz
MiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRp
YyBib29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZh
Y2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIENTU1BhcnNlclZh
bHVlJik7CisgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1p
dGl2ZShDU1NWYWx1ZUlEIGlkZW50LCBWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwogICAgIGJvb2wg
cGFyc2VEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgY29uc3QgU3RyaW5nJiwg
UGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4
dFN0eWxlU2hlZXQpOwogICAgIHN0YXRpYyBQYXNzUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gcGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0
cmluZyYpOwpAQCAtMjgwLDcgKzI5Nyw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZVRleHRJbmRlbnQoKTsKICAgICAKICAgICBib29sIHBhcnNlTGluZUJveENvbnRh
aW4oYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJW
YWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CisgICAgUmVmUHRyPENTU0Nh
bGNWYWx1ZT4gcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVy
bWl0dGVkVmFsdWVSYW5nZSk7CiAKICAgICBib29sIHBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFs
dWVMaXN0Jik7CiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRh
bnQpOwpAQCAtNDAyLDcgKzQxOSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVs
ZUJhc2U+IGNyZWF0ZVZpZXdwb3J0UnVsZSgpOwogI2VuZGlmCiAKLSAgICBQYXNzUmVmPENTU1By
aW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWUm
KTsKKyAgICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKICAgICBQYXNzUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAg
c3RhdGljIFVSTCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3Ry
aW5nJiB1cmwpOwpAQCAtNDk2LDggKzUxMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1cFBh
cnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgY2hhciogc3VmZml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpOwogICAgIGJv
b2wgaW5TaG9ydGhhbmQoKSBjb25zdCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0KIAot
ICAgIGJvb2wgdmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgdmFsaWRIZWln
aHQoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBib29sIHZhbGlkV2lkdGgoVmFsdWVXaXRoQ2FsY3Vs
YXRpb24mKTsKKyAgICBib29sIHZhbGlkSGVpZ2h0KFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAK
ICAgICB2b2lkIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwogCkBAIC01NzYsOCArNTkzLDYg
QEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PENTU1BhcnNlclNlbGVjdG9yPj4+IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsKIAotICAgIFJl
ZlB0cjxDU1NDYWxjVmFsdWU+IG1fcGFyc2VkQ2FsY3VsYXRpb247Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFjazsKIAogICAg
IC8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGlu
IHBhcnNlVW5pdApAQCAtNjExLDE2ICs2MjYsMTYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTG9n
Z2luZ0Vycm9ycygpOwogICAgIHZvaWQgbG9nRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBp
bnQgbGluZU51bWJlcik7CiAKLSAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNl
clZhbHVlJiwgVW5pdHMsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNh
bGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGJvb2wgdmFsaWRDYWxjdWxh
dGlvblVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mLCBVbml0cyk7CiAKICAgICBib29sIHNob3Vs
ZEFjY2VwdFVuaXRMZXNzVmFsdWVzKENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1v
ZGUpOwogCi0gICAgaW5saW5lIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwg
VW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VD
YWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSB7IHJldHVybiB2YWxpZFVuaXQodmFs
dWUsIHVuaXRmbGFncywgbV9jb250ZXh0Lm1vZGUsIHJlbGVhc2VDYWxjKTsgfQotICAgIGJvb2wg
dmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUsIFJlbGVhc2VQ
YXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRD
YWxjVmFsdWUpOworICAgIGlubGluZSBib29sIHZhbGlkVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlv
biYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncykgeyByZXR1cm4gdmFsaWRVbml0KHZhbHVlLCB1bml0
ZmxhZ3MsIG1fY29udGV4dC5tb2RlKTsgfQorICAgIGJvb2wgdmFsaWRVbml0KFZhbHVlV2l0aENh
bGN1bGF0aW9uJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCiAgICAgYm9vbCBwYXJzZUJvcmRl
ckltYWdlUXVhZChVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBj
b2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGRvdWJsZSBwYXJzZWREb3Vi
bGUoQ1NTUGFyc2VyVmFsdWUmLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVh
c2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICBpbnQgY29sb3JJbnRG
cm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKKyAgICBkb3VibGUgcGFyc2VkRG91Ymxl
KFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9y
bU9wZXJhdGlvbkluZm87CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRlck9wZXJhdGlvbkluZm87CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCmluZGV4IDg0NzlhZGQ0MGMyZjU3ZGMxNmIyNzYw
NWQ5ZjdmMjE0YTNkNTk3MWQuLmZhZDAwOTQzZGNiYjUxZWE0ZTllMThkYzUzZTU5ZTNiOTJhNTAz
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQorICAgIGlm
ICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKTsKIAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgQ1NTVmFsdWVJ
RCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAKICAgICBib29sIHZhbGlk
X3ByaW1pdGl2ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CkBA
IC02Miw3ICs2Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgaWQgPj0gQ1NTVmFsdWVTdXBl
cikKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBG
UGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZH
QXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eURv
bWluYW50QmFzZWxpbmU6CkBAIC04Nyw4ICs4Nyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNW
R1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U1Byb3BlcnR5TWFzazoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAg
IHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAg
ICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7CiAgICAgICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVy
bGltaXQ+IHwgaW5oZXJpdAotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGTnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIHZhbGlk
X3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZO
b25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlTdHJva2VMaW5lam9pbjogICAvLyBtaXRlciB8IHJvdW5kIHwgYmV2ZWwgfCBpbmhl
cml0CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlG
aWxsT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNpdHk6CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUp
KTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTaGFwZVJlbmRlcmluZzoKQEAgLTE2
Nyw4ICsxNjcsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiAvLyA8YW5nbGU+IChyZXN0
cmljdGVkIHRvIF9kZWdfIHBlciBTVkcgMS4xIHNwZWMpIHwgaW5oZXJpdAotICAgICAgICBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRyk7CisgICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Cisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVH
KTsKIAogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CkBAIC0xODksMTYgKzE4OSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7CiAg
ICAgICAgICAgICBlbHNlIGlmICgoaWQgPj0gQ1NTVmFsdWVBY3RpdmVib3JkZXIgJiYgaWQgPD0g
Q1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ29sb3IoUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5zeXN0ZW1Db2xvcihpZCkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFy
ZW50OwogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLCBjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6
OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlLT5zdHJpbmcsIGMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kQ29sb3IodmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIGMpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmROb25l
KHZhbHVlLT5zdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBT
VkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0
cmluZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFs
dWUpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVS
SSh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQ
YWludDo6Y3JlYXRlVVJJKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdQ
YWludCgpOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJv
cGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVlQXF1YSAmJiBp
ZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8CiAgICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUFs
aWNlYmx1ZSAmJiBpZCA8PSBDU1NWYWx1ZVllbGxvd2dyZWVuKSkKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUZyb21TdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3RyaW5nKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NT
VmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpj
cmVhdGVDdXJyZW50Q29sb3IoKTsKICAgICAgICAgZWxzZSAvLyBUT0RPIDogc3ZnY29sb3IgKGlj
Y0NvbG9yKQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VXaWR0aDogICAgICAgICAvLyA8bGVuZ3RoPiB8IGluaGVyaXQKICAgICBjYXNl
IENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldDoKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsK
KyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxkYXNo
YXJyYXk+IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQpAQCAtMjUw
LDE1ICsyNTAsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2YWxp
ZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIFNW
R0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlD
bGlwUGF0aDogICAgLy8gPHVyaT4gfCBub25lIHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWx0ZXI6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcykgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KTsKICAgICAgICAgICAgIGlm
IChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICB9CkBAIC0zMDYsNyArMzA2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlSeToKICAgICBjYXNlIENTU1Byb3BlcnR5WDoKICAgICBjYXNlIENTU1Byb3BlcnR5WToKLSAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiB5b3UgY3Jhc2ggaGVyZSwgaXQncyBi
ZWNhdXNlIHlvdSBhZGRlZCBhIGNzcyBwcm9wZXJ0eSBhbmQgYXJlIG5vdCBoYW5kbGluZyBpdApA
QCAtMzE4LDE0ICszMTgsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGlmICh2YWxpZF9wcmltaXRpdmUp
IHsKICAgICAgICAgaWYgKGlkICE9IDApCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkKTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgKENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBp
ZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUt
PnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZS0+
ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgIGlmIChpc0NhbGN1
bGF0aW9uKCp2YWx1ZSkpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBlbHNl
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIChDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQp
OworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQorICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS51bml0KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKKyAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2lu
UXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfRU1TKTsKKyAgICAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3Vs
YXRpb24pKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpOwogICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgIH0KICAgICBpZiAoIXBhcnNlZFZhbHVlIHx8IChtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpICYmICFpblNob3J0aGFuZCgpKSkKQEAgLTM0MSw5ICszNDEsMTEgQEAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiAg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBi
b29sIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8
IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3Qg
aGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgogICAgICAgICBpZiAodmFsdWUtPmlkICE9IDApCiAg
ICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cih2YWx1ZS0+aWQpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19LSFopCkBAIC0zNTMsNyArMzU1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgfQogICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJldC5yZWxl
YXNlKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243402</attachid>
            <date>2014-12-16 16:08:18 -0800</date>
            <delta_ts>2014-12-20 13:40:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141216160908.patch</filename>
            <type>text/plain</type>
            <size>119191</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA3OGU0NmJiOTYwYWQ1
YWFhNTIxZjNkMTI5YTU3YzkzOGVjZjU0MC4uMWU4MTJmMGVmMDdhODFhZDBhYWRiNTVkYWQ1MzYy
NzgyNDBiOGUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJp
ZCBvZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50
IGluCisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENh
bGN1bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAg
SW5zdGVhZCwgaW50cm9kdWNlIGEgbmV3IFZhbHVlV2l0aENhbGN1bGF0aW9uIHR5cGUgd2hpY2gg
d3JhcHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2VkIGNh
bGN1bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxhdGlv
biB2YWx1ZSBpcyBub3cgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAgICAg
ICAgVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3VsYXRp
b24gdmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQSSBp
cyBhbHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIgbmVl
ZCB0byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91bGQg
YmUKKyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8g
YmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTEyLTE2ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIE1hYyBwcm9jZXNzIHN1cHByZXNzaW9u
IGZyb20gV2ViQ29yZSB0byBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDc1
NTJhNzExMDJiNTQwY2NmZTViOGQyMTMxZjgxMjM0NmY5ZTliYTIuLjdkNDBlMzBiOWNlMzU3OTdh
ZGQ1Y2ZmNzdlZDJhZjMyYjRiZjk4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0x
NTgxLDUxICsxNTgxLDUzIEBAIFVSTCBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmlu
ZyYgdXJsKSBjb25zdAogICAgIHJldHVybiBjb21wbGV0ZVVSTChtX2NvbnRleHQsIHVybCk7CiB9
CiAKLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUsIFVuaXRzIHVuaXRmbGFncywgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiBy
ZWxlYXNlQ2FsYykKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZENhbGN1bGF0aW9uVW5pdChWYWx1ZVdp
dGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24sIFVuaXRzIHVuaXRmbGFncykKIHsK
ICAgICBib29sIG11c3RCZU5vbk5lZ2F0aXZlID0gdW5pdGZsYWdzICYgRk5vbk5lZzsKIAotICAg
IGlmICghcGFyc2VDYWxjdWxhdGlvbih2YWx1ZSwgbXVzdEJlTm9uTmVnYXRpdmUgPyBDYWxjdWxh
dGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSkKKyAgICBBU1NFUlQo
IXZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpOworICAgIFJlZlB0cjxDU1NDYWxj
VmFsdWU+IGNhbGN1bGF0aW9uID0gcGFyc2VDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgbXVzdEJlTm9uTmVnYXRpdmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxj
dWxhdGlvblJhbmdlQWxsKTsKKyAgICBpZiAoIWNhbGN1bGF0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBib29sIGIgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fcGFyc2VkQ2FsY3Vs
YXRpb24tPmNhdGVnb3J5KCkpIHsKKyAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKKyAgICBzd2l0
Y2ggKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpKSB7CiAgICAgY2FzZSBDYWxjTnVtYmVyOgotICAg
ICAgICBiID0gKHVuaXRmbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgKHVuaXRm
bGFncyAmIEZJbnRlZ2VyKSAmJiBtX3BhcnNlZENhbGN1bGF0aW9uLT5pc0ludCgpKQotICAgICAg
ICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGlmIChiICYmIG11c3RCZU5vbk5lZ2F0aXZlICYmIG1f
cGFyc2VkQ2FsY3VsYXRpb24tPmlzTmVnYXRpdmUoKSkKLSAgICAgICAgICAgIGIgPSBmYWxzZTsK
KyAgICAgICAgaXNWYWxpZCA9ICh1bml0ZmxhZ3MgJiBGTnVtYmVyKTsKKyAgICAgICAgaWYgKCFp
c1ZhbGlkICYmICh1bml0ZmxhZ3MgJiBGSW50ZWdlcikgJiYgY2FsY3VsYXRpb24tPmlzSW50KCkp
CisgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGlzVmFsaWQgJiYgbXVz
dEJlTm9uTmVnYXRpdmUgJiYgY2FsY3VsYXRpb24tPmlzTmVnYXRpdmUoKSkKKyAgICAgICAgICAg
IGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjTGVuZ3RoOgot
ICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZMZW5ndGgpOworICAgICAgICBpc1ZhbGlkID0gKHVu
aXRmbGFncyAmIEZMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGNQZXJjZW50
OgotICAgICAgICBiID0gKHVuaXRmbGFncyAmIEZQZXJjZW50KTsKLSAgICAgICAgaWYgKGIgJiYg
bXVzdEJlTm9uTmVnYXRpdmUgJiYgbV9wYXJzZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQot
ICAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRmbGFncyAmIEZQ
ZXJjZW50KTsKKyAgICAgICAgaWYgKGlzVmFsaWQgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYgY2Fs
Y3VsYXRpb24tPmlzTmVnYXRpdmUoKSkKKyAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGUGVyY2VudCkgJiYgKHVuaXRmbGFncyAmIEZMZW5ndGgpOworICAgICAgICBp
c1ZhbGlkID0gKHVuaXRmbGFncyAmIEZQZXJjZW50KSAmJiAodW5pdGZsYWdzICYgRkxlbmd0aCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1BlcmNlbnROdW1iZXI6Ci0gICAgICAgIGIg
PSAodW5pdGZsYWdzICYgRlBlcmNlbnQpICYmICh1bml0ZmxhZ3MgJiBGTnVtYmVyKTsKKyAgICAg
ICAgaXNWYWxpZCA9ICh1bml0ZmxhZ3MgJiBGUGVyY2VudCkgJiYgKHVuaXRmbGFncyAmIEZOdW1i
ZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGNBbmdsZToKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGQW5nbGUpOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRmbGFncyAmIEZBbmds
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1RpbWU6Ci0gICAgICAgIGIgPSAodW5p
dGZsYWdzICYgRlRpbWUpOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRmbGFncyAmIEZUaW1lKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjRnJlcXVlbmN5OgotICAgICAgICBiID0gKHVu
aXRmbGFncyAmIEZGcmVxdWVuY3kpOworICAgICAgICBpc1ZhbGlkID0gKHVuaXRmbGFncyAmIEZG
cmVxdWVuY3kpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGNPdGhlcjoKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIGlmICghYiB8fCByZWxlYXNlQ2FsYyA9PSBSZWxlYXNlUGFyc2Vk
Q2FsY1ZhbHVlKQotICAgICAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gYjsgICAgCisgICAgaWYgKGlzVmFsaWQpCisgICAgICAgIHZhbHVlV2l0aENhbGN1bGF0
aW9uLnNldENhbGN1bGF0aW9uKFdURjo6bW92ZShjYWxjdWxhdGlvbikpOworICAgIHJldHVybiBp
c1ZhbGlkOwogfQogCiBpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnNob3VsZEFjY2VwdFVuaXRMZXNz
VmFsdWVzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUpCkBAIC0xNjM0LDIzICsxNjM2LDIzIEBAIGlubGluZSBib29sIENT
U1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
LCBVbml0cyB1CiAgICAgcmV0dXJuICh1bml0ZmxhZ3MgJiAoRkxlbmd0aCB8IEZBbmdsZSB8IEZU
aW1lKSkgJiYgKCF2YWx1ZS5mVmFsdWUgfHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2Rl
IHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSk7CiB9CiAKLWJvb2wgQ1NTUGFy
c2VyOjp2YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlv
biByZWxlYXNlQ2FsYykKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZFVuaXQoVmFsdWVXaXRoQ2FsY3Vs
YXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZSkpCi0gICAg
ICAgIHJldHVybiB2YWxpZENhbGN1bGF0aW9uVW5pdCh2YWx1ZSwgdW5pdGZsYWdzLCByZWxlYXNl
Q2FsYyk7CisgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pKQorICAg
ICAgICByZXR1cm4gdmFsaWRDYWxjdWxhdGlvblVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIHVu
aXRmbGFncyk7CiAgICAgICAgIAogICAgIGJvb2wgYiA9IGZhbHNlOwotICAgIHN3aXRjaCAodmFs
dWUudW5pdCkgeworICAgIHN3aXRjaCAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0
KSB7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjoKICAgICAgICAgYiA9
ICh1bml0ZmxhZ3MgJiBGTnVtYmVyKTsKLSAgICAgICAgaWYgKCFiICYmIHNob3VsZEFjY2VwdFVu
aXRMZXNzVmFsdWVzKHZhbHVlLCB1bml0ZmxhZ3MsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAg
ICAgICB2YWx1ZS51bml0ID0gKHVuaXRmbGFncyAmIEZMZW5ndGgpID8gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWCA6CisgICAgICAgIGlmICghYiAmJiBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVl
cyh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdGZsYWdzLCBjc3NQYXJzZXJNb2RlKSkgeworICAg
ICAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID0gKHVuaXRmbGFncyAm
IEZMZW5ndGgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgodW5pdGZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
REVHIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUyk7CiAgICAgICAgICAgICBiID0gdHJ1ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2VyKSAmJiB2
YWx1ZS5pc0ludCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0ZmxhZ3MgJiBGSW50ZWdlcikgJiYg
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCkKICAgICAgICAgICAgIGIgPSB0cnVl
OwotICAgICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZQb3NpdGl2ZUludGVnZXIpICYmIHZh
bHVlLmlzSW50ICYmIHZhbHVlLmZWYWx1ZSA+IDApCisgICAgICAgIGlmICghYiAmJiAodW5pdGZs
YWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5p
c0ludCAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA+IDApCiAgICAgICAg
ICAgICBiID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U6CkBAIC0xNjk2LDIwICsxNjk4LDIxIEBAIGJvb2wgQ1NTUGFyc2Vy
Ojp2YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIENTU1Bh
cnNlck1vZGUKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaWYgKGIg
JiYgdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2YWx1ZS5mVmFsdWUgPCAwKQorICAgIGlmIChiICYm
IHVuaXRmbGFncyAmIEZOb25OZWcgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUgPCAwKQogICAgICAgICBiID0gZmFsc2U7Ci0gICAgaWYgKGIgJiYgc3RkOjppc2luZih2YWx1
ZS5mVmFsdWUpKQorICAgIGlmIChiICYmIHN0ZDo6aXNpbmYodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS5mVmFsdWUpKQogICAgICAgICBiID0gZmFsc2U7CiAgICAgcmV0dXJuIGI7CiB9CiAK
LWlubGluZSBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKFZhbHVlV2l0
aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKIHsKLSAgICBpZiAobV9wYXJzZWRD
YWxjdWxhdGlvbikgewotICAgICAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbih2YWx1ZSkpOwotICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9u
LnJlbGVhc2UoKSk7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkp
IHsKKyAgICAgICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsK
KyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24uY2FsY3VsYXRpb24oKSk7CiAgICAgfQogCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb247CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9O
KSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKICAgICBBU1NFUlQoKHZhbHVlLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKICAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19DSFMpCkBAIC0xNzM5LDQzICsxNzQyLDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Zv
cndhcmRTbGFzaE9wZXJhdG9yKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gdmFs
dWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcv
JzsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkV2lkdGgoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVl
V2l0aENhbGN1bGF0aW9uKQogewotICAgIGludCBpZCA9IHZhbHVlLmlkOworICAgIGludCBpZCA9
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVl
SW50cmluc2ljIHx8IGlkID09IENTU1ZhbHVlTWluSW50cmluc2ljIHx8IGlkID09IENTU1ZhbHVl
V2Via2l0TWluQ29udGVudCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQgfHwgaWQg
PT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxlIHx8IGlkID09IENTU1ZhbHVlV2Via2l0Rml0
Q29udGVudCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFpZCAmJiB2YWxpZFVu
aXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgIHJldHVybiAhaWQg
JiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnKTsKIH0KIAogLy8gRklYTUU6IENvbWJpbmUgdGhpcyB3aXRoIHZhbGlkV2lkdGggd2hl
biB3ZSBzdXBwb3J0IGZpdC1jb250ZW50LCBldCBhbCwgZm9yIGhlaWdodHMuCi1ib29sIENTU1Bh
cnNlcjo6dmFsaWRIZWlnaHQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6
OnZhbGlkSGVpZ2h0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikK
IHsKLSAgICBpbnQgaWQgPSB2YWx1ZS5pZDsKKyAgICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9
PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJu
ICFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwor
ICAgIHJldHVybiAhaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50
aWZpZXIsIENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVu
dGlmaWVyLCBWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7CiAg
ICAgaWYgKGlkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllcik7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVT
dHJpbmdWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7Ci0g
ICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVl
LnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHJldHVybiBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1ZNQVgpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWUpOworCisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1p
dGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBpZiAodmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
ICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0tIWikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQorICAgICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAjaWYgRU5BQkxFKENTU19J
TUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBp
ZiAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFggJiYgdmFsdWUudW5p
dCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00p
CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pOwogI2VuZGlmCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6
OlFfRU1TKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5n
TWFyZ2luUXVpcmsodmFsdWUuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0g
ICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWUpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9uLnJlbGVhc2UoKSk7CisgICAgaWYgKHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMp
CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5R
dWlyayh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19FTVMpOworICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24uY2FsY3VsYXRpb24oKSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTE3
OTgsMTkgKzE4MDIsMTEgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUGFzc1JlZlB0cjxDU1MKIAogYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewot
ICAgIGlmICghbV92YWx1ZUxpc3QpCisgICAgaWYgKCFtX3ZhbHVlTGlzdCB8fCAhbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICghdmFsdWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdGU6IG1fcGFyc2VkQ2FsY3VsYXRpb24g
aXMgdXNlZCB0byBwYXNzIHRoZSBjYWxjIHZhbHVlIHRvIHZhbGlkVW5pdCBhbmQgdGhlbiBjbGVh
cmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB0
byBhdm9pZCBoYXZpbmcgdG8gcGFzcyBwYXJzZWRDYWxjIHRvIGFsbCB2YWxpZFVuaXQgY2FsbGVy
cy4KLSAgICBBU1NFUlQoIW1fcGFyc2VkQ2FsY3VsYXRpb24pOwotICAgIAotICAgIENTU1ZhbHVl
SUQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwogCiAgICAgdW5zaWduZWQgbnVtID0gaW5T
aG9ydGhhbmQoKSA/IDEgOiBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwogCkBAIC0xODc0LDcgKzE4NzAs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXA6ICAgICAgICAgICAgICAgICAv
LyA8c2hhcGU+IHwgYXV0byB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQorICAgICAgICBlbHNlIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xpcFNoYXBlKHByb3BJZCwgaW1wb3J0
YW50KTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTE5MzIsNyArMTkyOCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6Ci0gICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5
T3V0bGluZUNvbG9yOiAgICAgICAgLy8gPGNvbG9yPiB8IGludmVydCB8IGluaGVyaXQKICAgICAg
ICAgLy8gT3V0bGluZSBjb2xvciBoYXMgImludmVydCIgYXMgYWRkaXRpb25hbCBrZXl3b3JkLgpA
QCAtMTk4NSw2ICsxOTgxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAvLyB6b29tLWluIHwgem9vbS1v
dXQgfCBhbGwtc2Nyb2xsIHwgLXdlYmtpdC1ncmFiIHwgLXdlYmtpdC1ncmFiYmluZyB8IC13ZWJr
aXQtem9vbS1pbiB8CiAgICAgICAgIC8vIC13ZWJraXQtem9vbS1vdXQgXSBdIHwgaW5oZXJpdAog
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0OworICAgICAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSAmdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKTsKICAgICAgICAgd2hpbGUg
KHZhbHVlKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlOwogICAgICAgICAg
ICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CkBAIC0y
MDI3LDcgKzIwMjQsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5uZXh0KCk7IC8vIGNvbW1hCiAgICAgICAgIH0KICAgICAgICAgaWYgKGxpc3QpIHsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUpIHsgLy8gbm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBj
b21wYXRpYmlsaXR5KQorICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAg
IC8vIG5vIHZhbHVlIGFmdGVyIHVybCBsaXN0IChNU0lFIDUgY29tcGF0aWJpbGl0eSkKICAgICAg
ICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpblF1aXJrc01vZGUoKSAmJiB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSAvLyBNU0lFIDUgY29tcGF0aWJpbGl0eSA6LwpAQCAt
MjAzOSw3ICsyMDM3LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICAgICAgIGlkID0gdmFsdWUtPmlkOwotICAgICAgICAg
ICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIHsgLy8g
TVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KKyAgICAgICAgICAgIGlmIChpblF1aXJrc01vZGUoKSAm
JiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSB7CisgICAgICAgICAgICAgICAgLy8gTVNJRSA1
IGNvbXBhdGliaWxpdHkgOi8KICAgICAgICAgICAgICAgICBpZCA9IENTU1ZhbHVlUG9pbnRlcjsK
ICAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1
ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvcHkgfHwgdmFsdWUtPmlk
ID09IENTU1ZhbHVlTm9uZSkKQEAgLTIxMTMsMTcgKzIxMTIsMTcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUtPnN0cmluZykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBD
U1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5zdHJpbmcpKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZSkpIHsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7CiAg
ICAgICAgICAgICBpZiAocGFyc2VHZW5lcmF0ZWRJbWFnZSgqbV92YWx1ZUxpc3QsIHBhcnNlZFZh
bHVlKSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5u
YW1lLCAiLXdlYmtpdC1pbWFnZS1zZXQoIikpIHsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZ1bmN0aW9uLT5u
YW1lLCAiLXdlYmtpdC1pbWFnZS1zZXQoIikpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
cGFyc2VJbWFnZVNldCgpOwogICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTQ2LDIxICsyMTQ1LDIxIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlVGhpbiB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBp
ZCA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6ICAgICAgIC8vIG5v
cm1hbCB8IDxsZW5ndGg+IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRT
cGFjaW5nOiAgICAgICAgIC8vIG5vcm1hbCB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5o
ZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KTsKKyAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
SW5kZW50OgpAQCAtMjE3NSwzNyArMjE3NCwzNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdC
ZWZvcmU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKLSAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVy
Y2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRXaWR0aCgqdmFsdWUpKTsKKyAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkV2lkdGgodmFs
dWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3Bl
cnR5TWluV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxXaWR0aDoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFdpZHRoKCp2YWx1ZSk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRXaWR0aCh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRMb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWxpZFdpZHRoKCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRXaWR0aCh2YWx1ZVdpdGhDYWxjdWxhdGlv
bikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZEhlaWdodCgqdmFsdWUpKTsK
KyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkSGVp
Z2h0KHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1pbkhlaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNh
bEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZEhlaWdodCgqdmFsdWUpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRIZWlnaHQoKnZhbHVlKSk7CisgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZEhlaWdodCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250U2l6ZToKQEAgLTIyMjEsNyArMjIyMCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlk
ID49IENTU1ZhbHVlQmFzZWxpbmUgJiYgaWQgPD0gQ1NTVmFsdWVXZWJraXRCYXNlbGluZU1pZGRs
ZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5n
dGggfCBGUGVyY2VudCkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbTogICAgICAgICAgICAgICAv
LyA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGF1dG8gfCBpbmhlcml0CkBAIC0yMjM5LDE0ICsy
MjM4LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVy
Y2VudCkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDogICAgICAgICAgICAgIC8vIGF1dG8gfCA8
aW50ZWdlcj4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciwgQ1NT
UXVpcmtzTW9kZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5T3JwaGFuczogLy8gPGludGVnZXI+
IHwgaW5oZXJpdCB8IGF1dG8gKFdlJ3ZlIGFkZGVkIHN1cHBvcnQgZm9yIGF1dG8gZm9yIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5KQpAQCAtMjI1NCw3ICsyMjUzLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOworICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgpAQCAtMjMwNCw3ICsyMzAzLDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NT
VmFsdWVSZXNldCB8fCBpZCA9PSBDU1NWYWx1ZURvY3VtZW50KQogICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5l
ZywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYm
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlTcmM6IC8vIE9ubHkgdXNlZCB3aXRoaW4gQGZvbnQtZmFjZSBhbmQgQC13ZWJraXQtZmls
dGVyLCBzbyBjYW5ub3QgdXNlIGluaGVyaXQgfCBpbml0aWFsIG9yIGJlICFpbXBvcnRhbnQuIFRo
aXMgaXMgYSBsaXN0IG9mIHVybHMgb3IgbG9jYWwgcmVmZXJlbmNlcy4KQEAgLTIzNzAsMTcgKzIz
NjksMTcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJh
ZGl1czogewogICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVtICE9IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKTsKICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlZFZhbHVlMjsKICAgICAgICAgaWYgKG51bSA9PSAyKSB7Ci0gICAgICAgICAgICB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+bmV4dCgpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KG5l
eHRWYWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CiAg
ICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSgqdmFsdWUpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gcGFyc2VkVmFsdWUxOwogCkBAIC0yMzg4LDcgKzIz
ODcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5VGFiU2l6ZToKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZh
bHVlLCBGSW50ZWdlciB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgogICAgICAgICBy
ZXR1cm4gcGFyc2VBc3BlY3RSYXRpbyhpbXBvcnRhbnQpOwpAQCAtMjM5Niw3ICsyMzk1LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6CiAgICAgICAg
IHJldHVybiBwYXJzZUJvcmRlclJhZGl1cyhwcm9wSWQsIGltcG9ydGFudCk7CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NT
Mi4xLCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5
Qm94U2hhZG93OgpAQCAtMjQxOSwxNyArMjQxOCwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgaWYgKG51bSAhPSAxICYmIG51bSAhPSAyKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2
YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlcik7CiAgICAgICAg
ICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHBhcnNlZFZhbHVlMjsKICAgICAgICAgICAgIGlmIChudW0gPT0gMikgewotICAgICAg
ICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIpOworICAg
ICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlv
bigqbV92YWx1ZUxpc3QtPm5leHQoKSk7CisgICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZFVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUy
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJz
ZWRWYWx1ZTE7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2
ZVZhbHVlUGFpcihwYXJzZWRWYWx1ZTEucmVsZWFzZSgpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgp
KSwgaW1wb3J0YW50KTsKQEAgLTI0NDQsMTYgKzI0NDMsMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlUmVmbGVjdChwcm9wSWQsIGltcG9ydGFudCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4OgotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0gICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFsR3JvdXA6Ci0gICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSAmJiB2YWx1ZS0+ZlZhbHVlOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NT
dHJpY3RNb2RlKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKICNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQpAQCAtMjQ5NCwxNiArMjQ5MywxNiBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGbGV4R3JvdzoKICAgICBjYXNlIENTU1Byb3BlcnR5RmxleFNocmlu
azoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwg
Rk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcmRlcjoKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2Vy
LCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIHJl
c3RyaWN0IHRoZSBzbWFsbGVzdCB2YWx1ZSB0byBpbnQgbWluICsgMiBiZWNhdXNlIHdlIHVzZSBp
bnQgbWluIGFuZCBpbnQgbWluICsgMSBhcyBzcGVjaWFsIHZhbHVlcyBpbiBhIGhhc2ggc2V0Lgot
ICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSArIDIsIHBhcnNlZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpKTsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1heDxkb3Vi
bGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAyLCBwYXJzZWREb3VibGUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CkBAIC0yNTE0LDE5
ICsyNTEzLDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU21hbGwgfHwg
aWQgPT0gQ1NTVmFsdWVMYXJnZSB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSkKICAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOworICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5maW5p
dGUpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBG
Tm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOgogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTbG93IHx8IGlkID09IENTU1ZhbHVlRmFzdCkK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGVGltZSB8IEZJbnRlZ2Vy
IHwgRk5vbk5lZyk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUgfCBGSW50ZWdlciB8IEZOb25OZWcpOwogICAgICAgICBi
cmVhazsKICNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZsb3dJbnRvOgpAQCAtMjU3Myw4ICsyNTcyLDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEFjY2Vw
dGluZyB2YWx1ZWxlc3MgbnVtYmVycyBpcyBhIHF1aXJrIG9mIHRoZSAtd2Via2l0IHByZWZpeGVk
IHZlcnNpb24gb2YgdGhlIHByb3BlcnR5LgotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqdmFs
dWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZykpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZMZW5ndGggfCBGTm9uTmVnKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsK
ICAgICAgICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgdmFsLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yNjk0LDE5ICsyNjkzLDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
ICAgIGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkNvdW50OgogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2
YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5HYXA6IC8vIG5vcm1hbCB8IDxsZW5ndGg+CiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSG9yaXpvbnRhbCB8fCBpZCA9PSBDU1NWYWx1ZVZl
cnRpY2FsIHx8IGlkID09IENTU1ZhbHVlQXV0bykKQEAgLTI3MTksNyArMjcxOCw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uU3BhbjogLy8gbm9uZSB8IGFsbCB8IDEgKHdp
bGwgYmUgZHJvcHBlZCBpbiB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eSkKICAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlQWxsIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRk51
bWJlciB8IEZOb25OZWcpICYmIHBhcnNlZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxj
VmFsdWUpID09IDEpIHsKKyAgICAgICAgZWxzZSBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykgJiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKSA9PSAxKSB7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVt
blNwYW4sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0yNzI5LDkgKzI3MjgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQWx3YXlzIHBhcnNl
IHRoaXMgcHJvcGVydHkgaW4gc3RyaWN0IG1vZGUsIHNpbmNlIGl0IHdvdWxkIGJlIGFtYmlndW91
cyBvdGhlcndpc2Ugd2hlbiB1c2VkIGluIHRoZSAnY29sdW1ucycgc2hvcnRoYW5kIHByb3BlcnR5
LgotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3Ro
IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkgJiYgcGFyc2VkRG91YmxlKCp2YWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQotICAgICAgICAgICAgICAgIG1fcGFyc2VkQ2Fs
Y3VsYXRpb24uY2xlYXIoKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkg
JiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAvLyBFbmQgb2YgQ1NTMyBwcm9wZXJ0aWVzCkBAIC0yNzQxLDcgKzI3Mzgs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVDbGFtcDoKICAgICAg
ICAgLy8gV2hlbiBzcGVjaWZ5aW5nIG51bWJlciBvZiBsaW5lcywgZG9uJ3QgYWxsb3cgMCBhcyBh
IHZhbGlkIHZhbHVlCiAgICAgICAgIC8vIFdoZW4gc3BlY2lmeWluZyBlaXRoZXIgdHlwZSBvZiB1
bml0LCByZXF1aXJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycwotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSB8fCB2YWx1ZS0+ZlZhbHVlKSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZQ
ZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5mVmFsdWUpICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBG
UGVyY2VudCB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAjaWYg
RU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTaXplQWRqdXN0OgpAQCAtMjc0OSwzNiArMjc0NiwzNiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSBtdWx0aWxlbmd0aCBjYXNlIHdoZXJlIHdlIGFsbG93IHJlbGF0aXZlIHVu
aXRzLgotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBl
cmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhOiAg
ICAgICAgICAgLy8gPGxlbmd0aD4KLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQo
KnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXI6Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQogICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
QXV0byB8fCB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9MaW1pdCB8fCB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xpbWl0IHx8IHZh
bGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6CiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpIHsKLSAgICAgICAgICAgIFN0cmluZyBsaW5lR3JpZFZhbHVlID0gU3RyaW5nKHZhbHVlLT5z
dHJpbmcpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAgICAgICAgICAgU3RyaW5n
IGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJp
bmcpOwogICAgICAgICAgICAgaWYgKCFsaW5lR3JpZFZhbHVlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
bGluZUdyaWRWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc4NiwxMyArMjc4MywxMyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExvY2FsZToKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXREYXNoYm9hcmRSZWdpb246IC8vIDxkYXNoYm9hcmQtcmVn
aW9uPiB8IDxkYXNoYm9hcmQtcmVnaW9uPgotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgaWYg
KHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhwcm9wSWQsIGltcG9ydGFudCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CkBAIC0yOTU2LDE1ICsyOTUzLDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZVNoYXBlUHJvcGVydHkocHJvcElkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmNzc1NoYXBlc0VuYWJsZWQoKSAm
JiAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykp
OworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLmNzc1NoYXBlc0VuYWJsZWQoKSAmJiAhaWQgJiYgdmFsaWRVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUltYWdlVGhyZXNob2xkOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmNzc1NoYXBlc0VuYWJsZWQoKSAmJiAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwg
Rk51bWJlcikpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLmNzc1NoYXBlc0VuYWJsZWQoKSAmJiAhaWQgJiYgdmFsaWRV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKSk7CiAgICAgICAgIGJyZWFrOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKICAgICBjYXNlIENTU1Byb3Bl
cnR5SW1hZ2VPcmllbnRhdGlvbjoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFs
aWRVbml0KCp2YWx1ZSwgRkFuZ2xlKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYg
dmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGQW5nbGUpOwogICAgICAgICBicmVhazsK
ICNlbmRpZgogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKQEAgLTMxMTQsMTAgKzMx
MTEsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgIH0KIAogICAgIGlmICh2YWxpZFByaW1pdGl2ZSkgewotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsICp2YWx1ZSk7CisgICAg
ICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0KLSAgICBBU1NFUlQo
IW1fcGFyc2VkQ2FsY3VsYXRpb24pOworCiAgICAgaWYgKHBhcnNlZFZhbHVlKSB7CiAgICAgICAg
IGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSB8fCBpblNob3J0aGFuZCgpKSB7CiAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBhcnNlZFZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50
KTsKQEAgLTMyMjAsMTYgKzMyMTcsMTcgQEAgYm9vbCBDU1NQYXJzZXI6OnVzZUxlZ2FjeUJhY2tn
cm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBjb25zdAogYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Tm9uRWxlbWVudFNuYXBQb2ludHMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqdmFsLCBGUGVy
Y2VudCB8IEZMZW5ndGgpKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWwpKTsKLSAgICAgICAgZWxzZSBpZiAodmFsLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbgotICAgICAgICAgICAgJiYgdmFsLT5mdW5jdGlvbi0+YXJn
cwotICAgICAgICAgICAgJiYgdmFsLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKLSAgICAg
ICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQo
IikpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWwgPSAqdmFsLT5mdW5j
dGlvbi0+YXJncy5nZXQoKS0+Y3VycmVudCgpOwotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdChw
YXJzZXJWYWwsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNyZWF0ZShj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUocGFyc2VyVmFsKSkpKTsKKyAgICB3aGlsZSAoQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAg
ICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgp
KQorICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbgorICAgICAgICAgICAgJiYgdmFsdWUtPmZ1bmN0aW9u
LT5hcmdzCisgICAgICAgICAgICAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSAx
CisgICAgICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJyZXBlYXQoIikpIHsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKCp2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCktPmN1cnJlbnQoKSk7
CisgICAgICAgICAgICBpZiAodmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVu
Z3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0OjpjcmVhdGUoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpKTsKICAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjUyLDE1
ICszMjUwLDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9sbFNuYXBEZXN0aW5hdGlvbihD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gcG9zaXRpb24gPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIENTU1BhcnNlclZhbHVlKiBjdXJQYXJzZXJWYWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
OwotICAgIGlmICghdmFsaWRVbml0KCpjdXJQYXJzZXJWYWwsIEZQZXJjZW50IHwgRkxlbmd0aCkp
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVYV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKKyAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVhXaXRoQ2FsY3VsYXRp
b24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGNzc1ZhbHVlWCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3Vy
UGFyc2VyVmFsKTsKLSAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGN1clBhcnNlclZhbCA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKmN1clBhcnNlclZh
bCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlWCA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVhXaXRoQ2FsY3VsYXRpb24pOworCisg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVZV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlz
dC0+bmV4dCgpKTsKKyAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVlXaXRoQ2FsY3VsYXRpb24sIEZQ
ZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlWSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqY3VyUGFyc2Vy
VmFsKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlWSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVlXaXRoQ2FsY3VsYXRpb24pOwogICAgIHBvc2l0aW9uLT5hcHBlbmQo
Y3NzVmFsdWVYLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHBvc2l0aW9uLT5hcHBlbmQoY3NzVmFs
dWVZLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcG9zaXRpb24s
IGltcG9ydGFudCk7CkBAIC0zMjcyLDE1ICszMjcwLDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVNjcm9sbFNuYXBDb29yZGluYXRlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbnMgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlZFZhbHVlWCA9ICptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVhXaXRoQ2Fs
Y3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwogICAgICAgICAvLyBEb24ndCBhY2Nl
cHQgb2RkLWxlbmd0aCBsaXN0cyBvZiBjb29yZGluYXRlcy4KICAgICAgICAgaWYgKCFtX3ZhbHVl
TGlzdC0+bmV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSYgcGFyc2VkVmFsdWVZID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgICAg
IGlmICghdmFsaWRVbml0KHBhcnNlZFZhbHVlWCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSB8fCAhdmFs
aWRVbml0KHBhcnNlZFZhbHVlWSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVZV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVYV2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCB8IEZMZW5ndGgpIHx8ICF2YWxpZFVuaXQodmFsdWVZV2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCB8IEZMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBwb3Np
dGlvbnMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUocGFyc2VkVmFsdWVYKSk7
Ci0gICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShw
YXJzZWRWYWx1ZVkpKTsKKyAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlWFdpdGhDYWxjdWxhdGlvbikpOworICAgICAgICBwb3NpdGlvbnMt
PmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVZV2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQogICAgIGlmIChwb3NpdGlv
bnMtPmxlbmd0aCgpKSB7CkBAIC0zNzcyLDEyICszNzcwLDE0IEBAIENTU1BhcnNlcjo6U2l6ZVBh
cmFtZXRlclR5cGUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBw
YXJzZWRWCiAgICAgICAgICAgICByZXR1cm4gUGFnZVNpemU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAgICAgIGlmICh2YWxp
ZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKSAmJiAocHJldlBhcmFtVHlwZSA9PSBOb25l
IHx8IHByZXZQYXJhbVR5cGUgPT0gTGVuZ3RoKSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVz
LmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpKTsKKyAgICBjYXNlIENT
U1ZhbHVlSW52YWxpZDogeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbih2YWx1ZSk7CisgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSAmJiAocHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHBy
ZXZQYXJhbVR5cGUgPT0gTGVuZ3RoKSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVu
ZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAg
ICAgICAgICAgIHJldHVybiBMZW5ndGg7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vbmU7
CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOb25lOwogICAgIH0KQEAgLTM5
NzMsOCArMzk3Myw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgICAgICAgICBwZXJj
ZW50ID0gNTA7CiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShwZXJj
ZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KLSAgICBpZiAo
dmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgpKQotICAg
ICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVu
dCgpKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFs
dWVMaXN0LmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKQEAgLTM5ODksOCArMzk5MCw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VGaWxsUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgICAg
ICAgICBwZXJjZW50ID0gNTA7CiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0K
LSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxp
c3QuY3VycmVudCgpKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTQwMjYsMTkgKzQwMjgsMTcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJW
YWwKIAogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9Ci0gICAgaWYgKHZhbGlk
VW5pdCgqdmFsdWVMaXN0LmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkgeworICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVu
dCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8
IEZMZW5ndGgpKSB7CiAgICAgICAgIGlmICghY3VtdWxhdGl2ZUZsYWdzKSB7CiAgICAgICAgICAg
ICBjdW11bGF0aXZlRmxhZ3MgfD0gWEZpbGxQb3NpdGlvbjsKICAgICAgICAgICAgIGluZGl2aWR1
YWxGbGFnID0gWEZpbGxQb3NpdGlvbjsKICAgICAgICAgfSBlbHNlIGlmIChjdW11bGF0aXZlRmxh
Z3MgJiAoWEZpbGxQb3NpdGlvbiB8IEFtYmlndW91c0ZpbGxQb3NpdGlvbikpIHsKICAgICAgICAg
ICAgIGN1bXVsYXRpdmVGbGFncyB8PSBZRmlsbFBvc2l0aW9uOwogICAgICAgICAgICAgaW5kaXZp
ZHVhbEZsYWcgPSBZRmlsbFBvc2l0aW9uOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKG1fcGFyc2VkQ2FsY3VsYXRpb24pCi0gICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxjdWxh
dGlvbiA9IG51bGxwdHI7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIH0KICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KQEAgLTQyMDAsNyArNDIwMCwxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFs
dWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Qwog
CiBpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OmlzUG90ZW50aWFsUG9zaXRpb25WYWx1ZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1
ZS5pZCkgfHwgdmFsaWRVbml0KHZhbHVlLCBGUGVyY2VudCB8IEZMZW5ndGgsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpOworICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWUuaWQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbih2YWx1ZSk7CisgICAgcmV0dXJuIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmls
bFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+
JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKQEAgLTQzNjQsOSArNDM2NywxMCBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93QwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVB
dXRvKQogICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZFVu
aXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICB9CiAKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMjsKQEAgLTQzNzQsMTMgKzQzNzgsMTQg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sJiBhbGxvd0MKICAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykKICAgICAgICAg
ICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPmlkICE9IENT
U1ZhbHVlQXV0bykgewotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIWluU2hvcnRoYW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0
aGF0IHdoZW4gaXQgaXMgYWR2YW5jZWQgd2UnbGwgZW5kIHVwIGJhY2sgYXQgdGhpcyB2YWx1ZS4K
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqdmFsdWUpOworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKCFwYXJzZWRWYWx1ZTIgJiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZFNpemUpIHsKICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IHdlIHNldCB0aGUgc2Vjb25kIHZhbHVlIHRvIHRoZSBmaXJzdCBpZiBpdCBpcyBvbWl0dGVkLgpA
QCAtNDU4MSw5ICs0NTg2LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLAogCiBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGVsYXkoKQogewotICAgIENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxp
ZFVuaXQodmFsdWUsIEZUaW1lKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZSk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZUaW1lKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKQEAgLTQ1OTcsOSArNDYwMiw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKQogewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZU
aW1lIHwgRk5vbk5lZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWUpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9u
KCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGVGltZSB8IEZOb25OZWcpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIApAQCAtNDYxNiw4ICs0NjIxLDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKICAgICBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUuaWQgPT0gQ1NT
VmFsdWVJbmZpbml0ZSkKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8
IEZOb25OZWcpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1
ZSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZO
b25OZWcpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aENhbGN1bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDY2Nyw4ICs0
NjczLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJl
ZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPEMKIAogICAgIC8vIG5vdyBnZXQgegogICAg
IGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2YWxpZFVuaXQoKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCksIEZMZW5ndGgpKSB7Ci0gICAgICAgICAgICB2YWx1ZTMgPSBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CisgICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZMZW5ndGgpKSB7CisgICAgICAgICAgICB2YWx1ZTMgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00NjgwLDE2
ICs0Njg3LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFu
ZChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDCiAKIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MsIGRvdWJsZSYgcmVzdWx0KQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGFyZ3Mu
Y3VycmVudCgpOwotICAgIGlmICghdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcikpCisgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgp
KTsKKyAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBwYXJzZWREb3VibGUoKnZhbHVl
LCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKLSAgICB2YWx1ZSA9IGFyZ3MubmV4dCgpOwotICAg
IGlmICghdmFsdWUpIHsKKyAgICByZXN1bHQgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24pOworICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBhcmdzLm5leHQoKTsK
KyAgICBpZiAoIW5leHRWYWx1ZSkgewogICAgICAgICAvLyBUaGUgbGFzdCBudW1iZXIgaW4gdGhl
IGZ1bmN0aW9uIGhhcyBubyBjb21tYSBhZnRlciBpdCwgc28gd2UncmUgZG9uZS4KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCisgICAgaWYgKCFp
c0NvbW1hKG5leHRWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhcmdzLm5leHQo
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3MTcsMjIgKzQ3MjQsMjQgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAgICAg
ICAgaW50IG51bVN0ZXBzOwogICAgICAgICBib29sIHN0ZXBBdFN0YXJ0ID0gZmFsc2U7CiAKLSAg
ICAgICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAg
ICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkludGVnZXIpKQorICAgICAgICBD
U1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAg
ICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlcikpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbnVtU3RlcHMgPSBjbGFtcFRvSW50
ZWdlcihjdXJyZW50VmFsdWUtPmZWYWx1ZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNu
J3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9J
bnRlZ2VyKGFyZ3VtZW50LT5mVmFsdWUpOwogICAgICAgICBpZiAobnVtU3RlcHMgPCAxKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5l
eHQoKTsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAKLSAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZSkgeworICAgICAgICBpZiAoYXJndW1lbnQpIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIGEgY29tbWEgc28gd2UgbmVlZCB0byBwYXJzZSB0aGUgc2Vjb25kIHZhbHVlCi0gICAg
ICAgICAgICBpZiAoIWlzQ29tbWEoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGlmICghaXND
b21tYShhcmd1bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
ICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFZhbHVlLT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGN1cnJlbnRWYWx1ZS0+aWQgIT0gQ1NTVmFs
dWVFbmQpCisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAg
IGlmIChhcmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVTdGFydCAmJiBhcmd1bWVudC0+aWQgIT0gQ1NT
VmFsdWVFbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBz
dGVwQXRTdGFydCA9IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKKyAgICAgICAg
ICAgIHN0ZXBBdFN0YXJ0ID0gYXJndW1lbnQtPmlkID09IENTU1ZhbHVlU3RhcnQ7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUo
bnVtU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKQEAgLTQ4OTMsMjMgKzQ5MDIsMjUgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzVmFsaWRDdXN0b21JZGVudChjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUp
CiAvLyBUaGUgZnVuY3Rpb24gcGFyc2VzIFsgPGludGVnZXI+IHx8IDxjdXN0b20taWRlbnQ+IF0g
aW4gPGdyaWQtbGluZT4gKHdoaWNoIGNhbiBiZSBzdGFuZCBhbG9uZSBvciB3aXRoICdzcGFuJyku
CiBib29sIENTU1BhcnNlcjo6cGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZyb21HcmlkUG9zaXRp
b24oUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgbnVtZXJpY1ZhbHVlLCBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+JiBncmlkTGluZU5hbWUpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRklu
dGVnZXIpICYmIHZhbHVlLT5mVmFsdWUpIHsKLSAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIGlzVmFsaWRDdXN0b21JZGVudCgqdmFs
dWUpKSB7Ci0gICAgICAgICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdW
YWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
dmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2
YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgeworICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSogbmV4dFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgaWYg
KG5leHRWYWx1ZSAmJiBpc1ZhbGlkQ3VzdG9tSWRlbnQoKm5leHRWYWx1ZSkpIHsKKyAgICAgICAg
ICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCpuZXh0VmFsdWUp
OwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoaXNWYWxpZEN1c3RvbUlkZW50KCp2YWx1ZSkp
IHsKLSAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlcikgJiYg
dmFsdWUtPmZWYWx1ZSkgewotICAgICAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OworICAgIGlmIChpc1ZhbGlkQ3VzdG9tSWRlbnQodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7Cisg
ICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKKyAgICAgICAgaWYgKENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpKSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBu
ZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKm5leHRWYWx1ZSk7CisgICAgICAgICAgICBpZiAodmFs
aWRVbml0KG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIpICYmIG5leHRWYWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgeworICAgICAgICAgICAgICAgIG51bWVyaWNW
YWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRp
b24pOworICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNTI5MywxMyArNTMw
NCwxOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZFRyYWNrTGlz
dCgpCiBib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1
ZUxpc3QmIGxpc3QpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3Vt
ZW50cyB8fCBhcmd1bWVudHMtPnNpemUoKSA8IDMgfHwgIXZhbGlkVW5pdCgqYXJndW1lbnRzLT52
YWx1ZUF0KDApLCBGUG9zaXRpdmVJbnRlZ2VyKSB8fCAhaXNDb21tYShhcmd1bWVudHMtPnZhbHVl
QXQoMSkpKQorICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGFyZ3VtZW50cy0+dmFsdWVBdCgwKS0+
ZlZhbHVlID4gMCk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RWYWx1ZVdpdGhDYWxj
dWxhdGlvbigqYXJndW1lbnRzLT52YWx1ZUF0KDApKTsKKyAgICBpZiAoIXZhbGlkVW5pdChmaXJz
dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKSB8fCAhaXNDb21tYShhcmd1
bWVudHMtPnZhbHVlQXQoMSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IGhhbmRsZSBjYWxjdWxhdGVkIHZhbHVlcy4KKyAgICBBU1NFUlQoZmly
c3RWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA+IDApOwogICAgIC8vIElmIGFy
Z3VtZW50cy0+dmFsdWVBdCgwKS0+ZlZhbHVlID4gU0laRV9NQVggdGhlbiByZXBldGl0aW9ucyBi
ZWNvbWVzIDAgZHVyaW5nIHRoZSB0eXBlIGNhc3RpbmcsIHRoYXQncyB3aHkgd2UKICAgICAvLyBj
bGFtcCBpdCBkb3duIHRvIGtHcmlkTWF4VHJhY2tzIGJlZm9yZSB0aGUgdHlwZSBjYXN0aW5nLgot
ICAgIHVuc2lnbmVkIHJlcGV0aXRpb25zID0gY2xhbXBUbzx1bnNpZ25lZD4oYXJndW1lbnRzLT52
YWx1ZUF0KDApLT5mVmFsdWUsIDAsIGtHcmlkTWF4VHJhY2tzKTsKKyAgICB1bnNpZ25lZCByZXBl
dGl0aW9ucyA9IGNsYW1wVG88dW5zaWduZWQ+KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUsIDAsIGtHcmlkTWF4VHJhY2tzKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHJlcGVhdGVkVmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgp
OwogICAgIGFyZ3VtZW50cy0+bmV4dCgpOyAvLyBTa2lwIHRoZSByZXBldGl0aW9uIGNvdW50LgpA
QCAtNTM3MywxMyArNTM4OSwxMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlR3JpZFRyYWNrU2l6ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdAogICAgIHJldHVy
biBwYXJzZUdyaWRCcmVhZHRoKGN1cnJlbnRWYWx1ZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYg
Y3VycmVudFZhbHVlKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoY3VycmVu
dFZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCB8fCBjdXJyZW50VmFsdWUuaWQg
PT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS5pZCk7CisgICAgaWYgKHZhbHVl
LmlkID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVdl
YmtpdE1heENvbnRlbnQpCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUuaWQpOwogCi0gICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIpIHsKLSAgICAgICAgZG91YmxlIGZsZXhWYWx1ZSA9IGN1
cnJlbnRWYWx1ZS5mVmFsdWU7CisgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19GUikgeworICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gdmFsdWUuZlZhbHVlOwog
CiAgICAgICAgIC8vIEZyYWN0aW9uYWwgdW5pdCBpcyBhIG5vbi1uZWdhdGl2ZSBkaW1lbnNpb24u
CiAgICAgICAgIGlmIChmbGV4VmFsdWUgPD0gMCkKQEAgLTUzODgsMTAgKzU0MDQsMTEgQEAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRCcmVhZHRoKENT
U1BhcnNlclZhbHVlJiBjdXJyZW4KICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGZsZXhWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19GUik7CiAgICAgfQogCi0g
ICAgaWYgKCF2YWxpZFVuaXQoY3VycmVudFZhbHVlLCBGTm9uTmVnIHwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1
ZSk7CisgICAgaWYgKCF2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOb25OZWcgfCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRHcmlkQXV0b0Zsb3dJZChDU1NWYWx1ZUlEIGlkKQpA
QCAtNTU2MCwxMSArNTU3NywxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdp
b25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAg
ICBhcmcgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgYXJnID0gc2tpcENvbW1hSW5E
YXNoYm9hcmRSZWdpb24oYXJncyk7CiAKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+aWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCgqYXJnLCBGTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmdXaXRoQ2FsY3VsYXRpb24oKmFyZyk7CisgICAg
ICAgICAgICAgICAgdmFsaWQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQo
YXJnV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbGlk
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJnKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGFtb3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoYXJnV2l0aENhbGN1bGF0aW9uKTsKIAogICAgICAgICAgICAgICAgIGlm
IChpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKGFtb3VudCk7CkBA
IC01NzQwLDEyICs1NzU4LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgUmVmUHRyPFJlY3Q+IHJlY3Qg
PSBSZWN0OjpjcmVhdGUoKTsKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKICAgICBpbnQgaSA9IDA7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAg
ICB3aGlsZSAoY3VycmVudFZhbHVlKSB7Ci0gICAgICAgIHZhbGlkID0gY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZMZW5ndGgpOwor
ICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICB3aGls
ZSAoYXJndW1lbnQpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgdmFsaWQgPSBhcmd1bWVudC0+aWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCk7CiAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFsdWUpOworICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NW
YWx1ZUF1dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVB
dXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bik7CiAgICAgICAgIGlmIChpID09IDApCiAgICAgICAgICAgICByZWN0LT5zZXRUb3AobGVuZ3Ro
KTsKICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQpAQCAtNTc1NCwxMCArNTc3MywxMCBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VDbGlwU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgcmVjdC0+c2V0Qm90dG9tKGxlbmd0aCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHJlY3QtPnNldExlZnQobGVuZ3RoKTsKLSAgICAgICAgY3VycmVudFZh
bHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoY3VycmVudFZhbHVlICYmIGFyZ3MtPnNp
emUoKSA9PSA3KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50VmFsdWUtPmlWYWx1ZSA9PSAnLCcpIHsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoYXJndW1lbnQgJiYgYXJncy0+c2l6ZSgp
ID09IDcpIHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgYXJndW1lbnQtPmlWYWx1ZSA9PSAnLCcpIHsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU4MjQs
MTAgKzU4NDMsMTEgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNl
SW5zZXRSb3VuZGVkQ29ybmVycyhQYXNzUmVmUHRyPENTU0Jhc2kKICAgICAgICAgaWYgKGkgLSBp
bmRleEFmdGVyU2xhc2ggPj0gNCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
ICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUp
OworICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZykpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFk
aXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsK
IAogICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkKICAgICAgICAgICAgIHJhZGlpWzBdW2ld
ID0gcmFkaXVzOwpAQCAtNTg2NCwxMCArNTg4NCwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hh
cGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBh
cgogICAgICAgICB9CiAKICAgICAgICAgVW5pdHMgdW5pdEZsYWdzID0gRkxlbmd0aCB8IEZQZXJj
ZW50OwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIHVuaXRGbGFncykgfHwgd2lk
dGhBcmd1bWVudHMuc2l6ZSgpID4gNCkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRGbGFncykgfHwgd2lkdGhBcmd1bWVudHMuc2l6
ZSgpID4gNCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHdpZHRoQXJn
dW1lbnRzLmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7Cisg
ICAgICAgIHdpZHRoQXJndW1lbnRzLmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLm5leHQo
KTsKICAgICB9CiAKQEAgLTU5MDIsMTAgKzU5MjMsMTEgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNoYXBlUmFkaXVzKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSkKICAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVDbG9zZXN0U2lkZSB8fCB2YWx1ZS5pZCA9
PSBDU1NWYWx1ZUZhcnRoZXN0U2lkZSkKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAKLSAgICBpZiAoIXZhbGlkVW5pdCh2YWx1
ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCisgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOworICAgIGlmICghdmFsaWRVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZhbHVlKTsKKyAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6
OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCkBAIC02MDE5
LDE0ICs2MDQxLDE4IEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJz
ZUJhc2ljU2hhcGVQb2x5Z29uKENTU1BhcnNlclZhbHVlTGlzdCYKICAgICBDU1NQYXJzZXJWYWx1
ZSogYXJndW1lbnRYID0gYXJndW1lbnQ7CiAgICAgd2hpbGUgKGFyZ3VtZW50WCkgewogCi0gICAg
ICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudFgsIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbigqYXJndW1l
bnRYKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geExlbmd0aCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqYXJndW1lbnRYKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4
TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50WFdpdGhDYWxjdWxh
dGlvbik7CiAKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WSA9IGFyZ3MubmV4dCgp
OwotICAgICAgICBpZiAoIWFyZ3VtZW50WSB8fCAhdmFsaWRVbml0KCphcmd1bWVudFksIEZMZW5n
dGggfCBGUGVyY2VudCkpCisgICAgICAgIGlmICghYXJndW1lbnRZKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geUxlbmd0aCA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnRZKTsKKyAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFkpOworICAg
ICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFlXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z3VtZW50WVdpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgc2hhcGUtPmFwcGVuZFBvaW50KHhM
ZW5ndGgucmVsZWFzZSgpLCB5TGVuZ3RoLnJlbGVhc2UoKSk7CiAKQEAgLTYwODEsNyArNjEwNyw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQW5kT3JC
b3goQ1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoc2hhcGVW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHNoYXBlRm91bmQgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzQm94VmFsdWUodmFsdWVJZCwgcHJvcElkKSAmJiAhYm94Rm91
bmQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUg
PSBwYXJzZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsICp2YWx1ZSk7CisgICAgICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHBhcnNl
ZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgYm94Rm91bmQgPSB0cnVlOwog
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTYxMDMsMTMgKzYxMjksMTAgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNoYXBlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wSWQpCiAKICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKICAgICBDU1NWYWx1ZUlEIHZhbHVlSWQgPSB2YWx1ZS5pZDsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGtleXdvcmRWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHNoYXBlVmFsdWU7CiAKICAgICBpZiAodmFsdWVJZCA9PSBDU1NWYWx1ZU5v
bmUpIHsKLSAgICAgICAga2V5d29yZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZSh2YWx1ZUlk
LCB2YWx1ZSk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBr
ZXl3b3JkVmFsdWUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gaW1hZ2VWYWx1ZTsKQEAgLTYxMjksNyArNjE1Miw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VDbGlwUGF0aCgpCiAKICAgICBpZiAodmFsdWVJZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHBh
cnNlVmFsaWRQcmltaXRpdmUodmFsdWVJZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOwogICAgIH0KICAgICBpZiAo
dmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwpAQCAtNjM0OSwzMSArNjM3MiwzMSBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogCiBib29sIENTU1BhcnNlcjo6
cGFyc2VMaW5lSGVpZ2h0KGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1BhcnNlclZhbHVlJiB2
YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1
ZS5pZDsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgYm9vbCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwogICAg
IC8vIG5vcm1hbCB8IDxudW1iZXI+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0
CiAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgZWxzZQotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KHZhbHVlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwogICAgIGlmICh2
YWxpZFByaW1pdGl2ZSAmJiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkgfHwgaW5TaG9ydGhhbmQoKSkp
Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFBy
aW1pdGl2ZShpZCwgdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1
bGF0aW9uKSwgaW1wb3J0YW50KTsKICAgICByZXR1cm4gdmFsaWRQcmltaXRpdmU7CiB9CiAKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRTaXplKGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIENTU1ZhbHVl
SUQgaWQgPSB2YWx1ZS5pZDsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgYm9vbCB2YWxpZFByaW1pdGl2ZSA9
IGZhbHNlOwogICAgIC8vIDxhYnNvbHV0ZS1zaXplPiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5n
dGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAogICAgIGlmIChpZCA+PSBDU1NWYWx1ZVh4U21h
bGwgJiYgaWQgPD0gQ1NTVmFsdWVMYXJnZXIpCiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25O
ZWcpOwogICAgIGlmICh2YWxpZFByaW1pdGl2ZSAmJiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkgfHwg
aW5TaG9ydGhhbmQoKSkpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUs
IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFs
dWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwogICAgIHJldHVybiB2YWxpZFByaW1pdGl2
ZTsKIH0KIApAQCAtNjQzOSw4ICs2NDYyLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFdl
aWdodChib29sIGltcG9ydGFudCkKICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
V2VpZ2h0LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpLCBp
bXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHZhbGlkVW5p
dCh2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSkgewotICAgICAgICBp
bnQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUodmFsdWUsIFJlbGVhc2VQ
YXJzZWRDYWxjVmFsdWUpKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbih2YWx1ZSk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
RkludGVnZXIgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSkgeworICAgICAgICBpbnQgd2VpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsK
ICAgICAgICAgaWYgKCEod2VpZ2h0ICUgMTAwKSAmJiB3ZWlnaHQgPj0gMTAwICYmIHdlaWdodCA8
PSA5MDApIHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNyZWF0ZUZvbnRXZWlnaHRWYWx1
ZUtleXdvcmQod2VpZ2h0KSksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTY5MzUsMTIgKzY5NTksOSBAQCBib29sIENTU1BhcnNlcjo6ZmFzdFBhcnNlQ29sb3IoUkdC
QTMyJiByZ2IsIGNvbnN0IFN0cmluZ1R5cGUmIG5hbWUsIGJvb2wgc3RyaWN0KQogICAgIHJldHVy
biBmYWxzZTsKIH0KICAgICAKLWlubGluZSBkb3VibGUgQ1NTUGFyc2VyOjpwYXJzZWREb3VibGUo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJl
bGVhc2VDYWxjKQoraW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShWYWx1ZVdp
dGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7Ci0gICAgZG91YmxlIHJlc3Vs
dCA9IG1fcGFyc2VkQ2FsY3VsYXRpb24gPyBtX3BhcnNlZENhbGN1bGF0aW9uLT5kb3VibGVWYWx1
ZSgpIDogdmFsdWUuZlZhbHVlOwotICAgIGlmIChyZWxlYXNlQ2FsYyA9PSBSZWxlYXNlUGFyc2Vk
Q2FsY1ZhbHVlKQotICAgICAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpID8gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKS0+ZG91YmxlVmFsdWUoKSA6
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwogfQogCiBib29sIENTU1BhcnNl
cjo6aXNDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCkBAIC02OTUyLDE2ICs2OTcz
LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSkKICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiLXdlYmtpdC1tYXgoIikpOwogfQogCi1pbmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRG
cm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoraW5saW5lIGludCBDU1NQYXJzZXI6OmNv
bG9ySW50RnJvbVZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bikKIHsKICAgICBib29sIGlzUGVyY2VudDsKICAgICAKLSAgICBpZiAobV9wYXJzZWRDYWxjdWxh
dGlvbikKLSAgICAgICAgaXNQZXJjZW50ID0gbV9wYXJzZWRDYWxjdWxhdGlvbi0+Y2F0ZWdvcnko
KSA9PSBDYWxjUGVyY2VudDsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRp
b24oKSkKKyAgICAgICAgaXNQZXJjZW50ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRp
b24oKS0+Y2F0ZWdvcnkoKSA9PSBDYWxjUGVyY2VudDsKICAgICBlbHNlCi0gICAgICAgIGlzUGVy
Y2VudCA9IHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOwor
ICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOwogCi0gICAgY29uc3QgZG91YmxlIGRv
dWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKHZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsK
KyAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pOwogICAgIAogICAgIGlmIChkb3VibGVWYWx1ZSA8PSAwLjApCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNjk4MSwzNCArNzAwMiwzNCBAQCBpbmxpbmUgaW50IENTU1BhcnNlcjo6Y29s
b3JJbnRGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQ29sb3JQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgaW50KiBjb2xvckFycmF5
LCBib29sIHBhcnNlQWxwaGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1
ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5jdXJyZW50KCkpOwogICAgIFVuaXRzIHVuaXRUeXBl
ID0gRlVua25vd247CiAgICAgLy8gR2V0IHRoZSBmaXJzdCB2YWx1ZSBhbmQgaXRzIHR5cGUKLSAg
ICBpZiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICBpZiAodmFsaWRVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2Vy
LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgdW5pdFR5cGUgPSBGSW50ZWdlcjsKLSAgICBlbHNl
IGlmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQor
ICAgIGVsc2UgaWYgKHZhbGlkVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgIHVuaXRUeXBlID0gRlBlcmNlbnQ7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29sb3JBcnJheVswXSA9IGNv
bG9ySW50RnJvbVZhbHVlKCpjdXJyZW50VmFsdWUpOworICAgIGNvbG9yQXJyYXlbMF0gPSBjb2xv
ckludEZyb21WYWx1ZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IDM7IGkrKykgewotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9w
ZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgQ1NTUGFyc2Vy
VmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgpOworICAgICAgICBpZiAob3Bl
cmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRv
ckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQo
KmN1cnJlbnRWYWx1ZSwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKKyAg
ICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRUeXBlLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3JB
cnJheVtpXSA9IGNvbG9ySW50RnJvbVZhbHVlKCpjdXJyZW50VmFsdWUpOworICAgICAgICBjb2xv
ckFycmF5W2ldID0gY29sb3JJbnRGcm9tVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwog
ICAgIH0KICAgICBpZiAocGFyc2VBbHBoYSkgewotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdz
LT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgpOworICAgICAgICBp
ZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBv
cGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxp
ZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkp
OworICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJl
ciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNlZERvdWJsZSgqY3VycmVudFZhbHVlLCBSZWxlYXNlUGFy
c2VkQ2FsY1ZhbHVlKTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91Ymxl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgLy8gQ29udmVydCB0aGUgZmxvYXRp
bmcgcG9pbnRlciBudW1iZXIgb2YgYWxwaGEgdG8gYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgWzAs
IDI1NiksCiAgICAgICAgIC8vIHdpdGggYW4gZXF1YWwgZGlzdHJpYnV0aW9uIGFjcm9zcyBhbGwg
MjU2IHZhbHVlcy4KICAgICAgICAgY29sb3JBcnJheVszXSA9IHN0YXRpY19jYXN0PGludD4oc3Rk
OjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIGRvdWJsZVZhbHVlKSkgKiBuZXh0
YWZ0ZXIoMjU2LjAsIDAuMCkpOwpAQCAtNzAyNCwyOSArNzA0NSwyOSBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBpbnQqIGNvbG9y
QXJyYXksIGJvbwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQogewogICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwot
ICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7CisgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+
Y3VycmVudCgpKTsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlCi0gICAgaWYgKCF2YWxpZFVu
aXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgaWYgKCF2YWxp
ZFVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NTU3RyaWN0TW9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBub3JtYWxpemUgdGhlIEh1ZSB2YWx1
ZSBhbmQgY2hhbmdlIGl0IHRvIGJlIGJldHdlZW4gMCBhbmQgMS4wCi0gICAgY29sb3JBcnJheVsw
XSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWUpKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOworICAgIGNv
bG9yQXJyYXlbMF0gPSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZShmaXJzdEFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjAuMDsKICAgICBm
b3IgKGludCBpID0gMTsgaSA8IDM7ICsraSkgewotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdz
LT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgpOworICAgICAgICBp
ZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBv
cGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxp
ZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgp
KTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJj
ZW50LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y29sb3JBcnJheVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAs
IHBhcnNlZERvdWJsZSgqY3VycmVudFZhbHVlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSkpIC8g
MTAwLjA7IC8vIG5lZWRzIHRvIGJlIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4wCisgICAgICAgIGNv
bG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMTAwLCBw
YXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkgLyAxMDAuMDsgLy8gbmVlZHMg
dG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKICAgICB9CiAgICAgaWYgKHBhcnNlQWxwaGEp
IHsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoY3Vy
cmVudFZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50VmFs
dWUtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgIENTU1BhcnNlclZhbHVlJiBvcGVyYXRvckFyZ3Vt
ZW50ID0gKmFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5pdCAh
PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUgIT0g
JywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZOdW1i
ZXIsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKKyAgICAgICAgaWYgKCF2YWxpZFVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5WzNdID0gc3RkOjptYXg8ZG91
YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIHBhcnNlZERvdWJsZSgqY3VycmVudFZhbHVlLCBS
ZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSkpOworICAgICAgICBjb2xvckFycmF5WzNdID0gc3RkOjpt
YXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIHBhcnNlZERvdWJsZShhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbikpKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MTU4LDkg
KzcxNzksOSBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKICAgICAgICAgYWxsb3dTdHls
ZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3BlcnR5ID09
IENTU1Byb3BlcnR5Qm94U2hhZG93OwogICAgIH0KIAotICAgIHZvaWQgY29tbWl0TGVuZ3RoKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKKyAgICB2b2lkIGNvbW1pdExlbmd0aChDU1NQYXJzZXI6OlZh
bHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKIAogICAgICAgICBpZiAoYWxsb3dYKSB7CiAg
ICAgICAgICAgICB4ID0gcHJpbWl0aXZlVmFsdWUucmVsZWFzZSgpOwpAQCAtNzIzOCw2ICs3MjU5
LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGFkb3coQ1NT
UGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIEMKICAgICBTaGFkb3dQYXJzZUNvbnRleHQgY29u
dGV4dChwcm9wSWQsICp0aGlzKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hp
bGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkpKSB7CisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CiAgICAgICAgIC8vIENoZWNr
IGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlWYWx1ZSAh
PSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewpAQCAtNzI1MCwyMiArNzI3MiwyMiBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCiAgICAgICAgICAg
ICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KCp2
YWx1ZSwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2YWxp
ZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKSB7CiAg
ICAgICAgICAgICAvLyBXZSByZXF1aXJlZCBhIGxlbmd0aCBhbmQgZGlkbid0IGdldCBvbmUuIElu
dmFsaWQuCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWxsb3dMZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQmx1ciByYWRpdXMgbXVz
dCBiZSBub24tbmVnYXRpdmUuCi0gICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0JsdXIgJiYg
IXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIC8vIEEgbGVuZ3RoIGlzIGFsbG93
ZWQgaGVyZS4gIENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAgICAgICAgIGNv
bnRleHQuY29tbWl0TGVuZ3RoKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdExl
bmd0aCh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlSW5zZXQpIHsKICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd1N0eWxl
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBjb250ZXh0
LmNvbW1pdFN0eWxlKCp2YWx1ZSk7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFN0eWxlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRo
ZSBvbmx5IG90aGVyIHR5cGUgb2YgdmFsdWUgdGhhdCdzIG9rIGlzIGEgY29sb3IgdmFsdWUuCiAg
ICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZENvbG9yOwpAQCAtNzMw
NiwzNCArNzMyOCwzNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSZWZsZWN0KENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAvLyBib3gtcmVmbGVjdDogPGRpcmVjdGlv
bj4gPG9mZnNldD4gPG1hc2s+CiAKICAgICAvLyBEaXJlY3Rpb24gY29tZXMgZmlyc3QuCi0gICAg
Q1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBzd2l0Y2ggKGN1cnJlbnRW
YWx1ZS0+aWQpIHsKKyAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewogICAgICAgICBjYXNlIENTU1Zh
bHVlQWJvdmU6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVCZWxvdzoKICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxlZnQ6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGRpcmVj
dGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUt
PmlkKTsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gVGhlIG9mZnNl
dCBjb21lcyBuZXh0LgotICAgIGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Cisg
ICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gb2Zmc2V0OwotICAgIGlmICghY3VycmVudFZhbHVlKQorICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIG9mZnNldCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3Vy
cmVudFZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgb2Zmc2V0ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCpjdXJyZW50VmFsdWUpOworICAgICAgICBvZmZzZXQgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIH0KIAogICAgIC8vIE5vdyBmb3Ig
dGhlIG1hc2suCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtYXNrOwotICAgIGN1cnJlbnRWYWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZSkgeworICAgIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICBpZiAodmFsdWUpIHsKICAgICAgICAgaWYgKCFw
YXJzZUJvcmRlckltYWdlKHByb3BJZCwgbWFzaykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtNzM1MywyMCArNzM3NiwyMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbGV4
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgYm9vbCBpbXBvcnRhbnQpCiAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBmbGV4QmFzaXM7CiAKICAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUq
IGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJn
dW1lbnQsIEZOdW1iZXIgfCBGTm9uTmVnKSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBpZiAodmFsaWRV
bml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykpIHsKICAgICAg
ICAgICAgIGlmIChmbGV4R3JvdyA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgIGZsZXhH
cm93ID0gcGFyc2VkRG91YmxlKCphcmd1bWVudCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgZmxleEdyb3cgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24pOwogICAgICAgICAgICAgZWxzZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQot
ICAgICAgICAgICAgICAgIGZsZXhTaHJpbmsgPSBwYXJzZWREb3VibGUoKmFyZ3VtZW50LCBSZWxl
YXNlUGFyc2VkQ2FsY1ZhbHVlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFwYXJzZWREb3VibGUo
KmFyZ3VtZW50LCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZs
ZXhTaHJpbmsgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOworICAgICAg
ICAgICAgZWxzZSBpZiAoIXBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpIHsK
ICAgICAgICAgICAgICAgICAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1
bml0cykgaWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJl
ZW4gc2V0LgogICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFsbG93IDMgbnVtYmVycyB3aXRob3V0IHVu
aXRzIGlmIHRoZSBsYXN0IHZhbHVlIGlzIDAuIEUuZy4sIGZsZXg6MSAxIDEgaXMgaW52YWxpZC4K
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWZsZXhCYXNpcyAmJiAoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2
YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkpCi0gICAg
ICAgICAgICBmbGV4QmFzaXMgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGFyZ3VtZW50LT5pZCwgKmFy
Z3VtZW50KTsKKyAgICAgICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKSkKKyAgICAg
ICAgICAgIGZsZXhCYXNpcyA9IHBhcnNlVmFsaWRQcmltaXRpdmUoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5pZCwgYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIC8vIE5vdCBhIHZhbGlkIGFyZyBmb3IgZmxleC4KICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTc2MzUsOSArNzY1OSw5IEBAIHB1YmxpYzoKICAgICBib29sIGFs
bG93RmluYWxDb21taXQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0K
IAotICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKKyAgICB2b2lk
IGNvbW1pdE51bWJlcihDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbikKICAgICB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJp
bWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUp
OworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gbV9w
YXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsK
ICAgICAgICAgaWYgKCFtX3RvcCkKICAgICAgICAgICAgIG1fdG9wID0gcHJpbWl0aXZlVmFsdWUu
cmVsZWFzZSgpOwogICAgICAgICBlbHNlIGlmICghbV9yaWdodCkKQEAgLTc3MDIsOSArNzcyNiwx
MCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVNsaWNlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBSZWZQdHI8Q1NTQm9yZGVySW1hZwogICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNv
bnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwogICAgIHdo
aWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgeworICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwogICAgICAgICAvLyBG
SVhNRSBjYWxjKCkgaHR0cDovL3dlYmtpdC5vcmcvYi8xNjY2MiA6IGNhbGMgaXMgcGFyc2VkIGJ1
dCB2YWx1ZXMgYXJlIG5vdCBjcmVhdGVkIHlldC4KLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dO
dW1iZXIoKSAmJiAhaXNDYWxjdWxhdGlvbigqdmFsdWUpICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJ
bnRlZ2VyIHwgRk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICAg
ICAgY29udGV4dC5jb21taXROdW1iZXIoKnZhbHVlKTsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxs
b3dOdW1iZXIoKSAmJiAhaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFs
aWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2Vu
dCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmFsbG93Rmls
bCgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpbGwpCiAgICAgICAgICAgICBjb250ZXh0LmNv
bW1pdEZpbGwoKTsKICAgICAgICAgZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKQEAgLTc3NDYs
MTMgKzc3NzEsMTMgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dGaW5hbENvbW1pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dGaW5hbENvbW1pdDsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0
b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQogCi0gICAgdm9pZCBjb21taXROdW1i
ZXIoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNl
cjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogICAgIHsKICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAg
aWYgKHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKyAgICAg
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvKQor
ICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZCk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIuY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gbV9wYXJzZXIu
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKIAogICAg
ICAgICBpZiAoIW1fdG9wKQogICAgICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxl
YXNlKCk7CkBAIC03ODE0LDEwICs3ODM5LDExIEBAIHByaXZhdGU6CiBib29sIENTU1BhcnNlcjo6
cGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYgcmVzdWx0KQogewogICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250
ZXh0KCp0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwotICAgIHdoaWxl
ICgoY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYg
KGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIHZhbGlk
VW5pdHMsIENTU1N0cmljdE1vZGUpIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRv
KSkgewotICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIoKmN1cnJlbnRWYWx1ZSk7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOworICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpKSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYm
ICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIHZhbGlkVW5pdHMsIENTU1N0cmljdE1v
ZGUpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pKSB7CisgICAgICAgICAgICBjb250ZXh0
LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAo
IWluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEg
c2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC03ODc0LDEwICs3OTAwLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1
cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpIC0g
aW5kZXhBZnRlclNsYXNoID49IDQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQor
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7
CisgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
RlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVz
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKIAog
ICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewogICAgICAgICAgICAgcmFkaWlbMF1baV0g
PSByYWRpdXM7CkBAIC03OTIwLDIwICs3OTQ3LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFz
cGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQogICAgIGlmIChudW0gIT0gMykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUmIGx2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+
dmFsdWVBdCgwKTsKICAgICBDU1NQYXJzZXJWYWx1ZSYgb3AgPSAqbV92YWx1ZUxpc3QtPnZhbHVl
QXQoMSk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHJ2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVB
dCgyKTsKIAogICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihvcCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICghdmFsaWRVbml0KGx2YWx1ZSwgRk51bWJlciB8IEZOb25O
ZWcpIHx8ICF2YWxpZFVuaXQocnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gbHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFsdWVB
dCgwKSk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gcnZhbHVlV2l0aENhbGN1bGF0aW9uKCpt
X3ZhbHVlTGlzdC0+dmFsdWVBdCgyKSk7CisgICAgaWYgKCF2YWxpZFVuaXQobHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChydmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCFsdmFsdWUuZlZhbHVlIHx8ICFydmFsdWUuZlZhbHVlKQorICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIGlmICghbHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlIHx8ICFydmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW8sIENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGx2YWx1ZS5mVmFsdWUpLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHJ2YWx1ZS5mVmFsdWUpKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93
UHJlY2lzaW9uVG9GbG9hdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1
ZSkpLCBpbXBvcnRhbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MTI3LDkgKzgxNTUs
MTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50
cyBvbmx5LCB3ZSBub3cgZXhwZWN0IGEgbnVtZXJpYyByYWRpdXMuCiAgICAgaWYgKGdyYWRpZW50
VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBj
YWxjdWxhdGlvbiB2YWx1ZXMuCiAgICAgICAgIGlmICghYXJndW1lbnQgfHwgYXJndW1lbnQtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQp
LnNldEZpcnN0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFy
Z3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3Vs
dCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uKSk7CiAKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1
cy4KICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CkBAIC04MTY0LDkgKzgxOTQsMTEg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
ZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KICAgICAgICAgaWYgKCFhcmd1bWVu
dCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGll
bnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogICAgIH0KIAogICAgIC8vIFdlIG5v
dyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3BzICgwIG9yIG1vcmUpLgpAQCAtODIzNiwx
MSArODI2OCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkTGluZWFyR3JhZGll
bnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgIENTU1BhcnNlclZhbHVl
KiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24oKmFyZ3VtZW50KTsKIAogICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAg
ICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkFuZ2xl
LCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICBpZiAodmFsaWRVbml0KGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIHJlc3Vs
dC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9
IHRydWU7CkBAIC04Mzc3LDggKzg0MTAsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogCiAgICAgaWYgKCFzaGFw
ZVZhbHVlICYmICFzaXplVmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQs
IEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGhTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2
YWxpZFVuaXQoaFNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAg
ICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhT
aXplV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC04Mzg2LDggKzg0MjAsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVk
UmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZgogICAgICAg
ICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZhbGlk
VW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRp
Y2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpOworICAgICAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2U2l6ZVdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwor
ICAgICAgICBpZiAodmFsaWRVbml0KHZTaXplV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodlNpemVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCkBAIC04NDE4LDI4ICs4
NDUzLDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgaWYgKCFhcmdzIHx8ICFhcmdz
LT5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1BhcnNlclZhbHVlKiBh
cmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQorICAgIGlmICgh
YXJncy0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5jdXJyZW50KCkp
OworCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xl
LgotICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7
Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCph
cmd1bWVudCkpOworICAgIGlmICh2YWxpZFVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlv
biwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7
CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UICYmIGVxdWFsSWdub3JpbmdDYXNlKCphcmd1bWVudCwgInRvIikpIHsKKyAgICB9IGVsc2Ug
aWYgKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmlyc3RBcmd1bWVudFdp
dGhDYWxjdWxhdGlvbiwgInRvIikpIHsKICAgICAgICAgLy8gdG8gWyBbbGVmdCB8IHJpZ2h0XSB8
fCBbdG9wIHwgYm90dG9tXSBdCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dEFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVuZFgs
IGVuZFk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247CiAgICAg
ICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1
ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0
aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsK
ICAgICAgICAgaWYgKCFsb2NhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
ODQ0OCwxMSArODQ4NCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBlbmRZID0gbG9jYXRpb247CiAKLSAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIG5leHRBcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgq
YXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7CisgICAgICAgIGxvY2F0aW9uID0gdmFsdWVGcm9tU2lk
ZUtleXdvcmQoKm5leHRBcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKGxvY2F0
aW9uKSB7CiAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGVuZFgpCkBAIC04NTA2LDYgKzg1NDIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRp
YWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAog
ICAgIC8vIFsgZWxsaXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0gXSB8CiAg
ICAgLy8gWyBbIGNpcmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwogICAgICAgICBpZiAoYXJndW1lbnQt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICAgICAgYm9v
bCBiYWRJZGVudCA9IGZhbHNlOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+aWQpIHsK
QEAgLTg1MzMsMTggKzg1NzAsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGll
bnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAgICAg
ICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRV
bml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICB9IGVsc2UgaWYg
KHZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
ewogCiAgICAgICAgICAgICBpZiAoc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgICAgICBob3Jpem9u
dGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbik7CiAKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAg
ICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KCphcmd1bWVudCk7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2U2l6ZVdpdGhD
YWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCh2U2l6ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAgICAgIHZl
cnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxh
dGlvbik7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOwogICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCkBAIC04NjA4LDM4
ICs4NjQ2LDM5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAKIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQ1NT
R3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQsIGJvb2wgZXhwZWN0Q29tbWEpCiB7Ci0gICAgQ1NTUGFy
c2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCk7CisgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKICAgICBib29sIHByZXZpb3Vz
U3RvcFdhc01pZHBvaW50ID0gdHJ1ZTsKIAogICAgIC8vIE5vdyBsb29rIGZvciBjb2xvciBzdG9w
cy4KLSAgICB3aGlsZSAoY3VycmVudFZhbHVlKSB7CisgICAgd2hpbGUgKHZhbHVlKSB7CiAgICAg
ICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KICAgICAgICAg
aWYgKGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEoY3VycmVudFZhbHVl
KSkKKyAgICAgICAgICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgp
OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUpCisgICAgICAgICAgICB2YWx1ZSA9IHZh
bHVlTGlzdC5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDxjb2xvci1zdG9wPiA9IDxj
b2xvcj4gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdPwogICAgICAgICBDU1NHcmFkaWVudENv
bG9yU3RvcCBzdG9wOwotICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZUdyYWRpZW50Q29sb3JP
cktleXdvcmQoKnRoaXMsICpjdXJyZW50VmFsdWUpOworICAgICAgICBzdG9wLm1fY29sb3IgPSBw
YXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoKnRoaXMsICp2YWx1ZSk7CiAgICAgICAgIGlmICgh
c3RvcC5tX2NvbG9yKSB7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNTdG9wV2FzTWlkcG9pbnQp
IC8vIDIgbWlkcG9pbnRzIGluIGEgcm93IGlzIG5vdCBhbGxvd2VkLiBUaGlzIGFsc28gY2F0Y2hl
cyBzdGFydGluZyB3aXRoIGEgbWlkcG9pbnQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICBzdG9wLmlzTWlkcG9pbnQgPSB0cnVlOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CiAKICAgICAgICAgcHJldmlvdXNTdG9wV2FzTWlk
cG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkgewot
ICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCpjdXJyZW50VmFsdWUpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1
ZSA9IHZhbHVlTGlzdC5uZXh0KCk7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVy
Y2VudCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICAgICAgICAgIHZh
bHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcC5pc01p
ZHBvaW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtODg0
MCwxNCArODg3OSwxNSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlSW1h
Z2VSZXNvbHV0aW9uKCkKIAogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CiAgICAgICAgIGlmICghaGF2ZUZy
b21JbWFnZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpIHsKICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKSk7CiAgICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
IGlmICghaGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25hcCkgewogICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpKTsKICAgICAgICAgICAgIGhhdmVTbmFwID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlm
ICghaGF2ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlJlc29sdXRpb24gfCBGTm9u
TmVnKSAmJiB2YWx1ZS0+ZlZhbHVlID4gMCkgewotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
aGF2ZVJlc29sdXRpb24gJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUmVzb2x1
dGlvbiB8IEZOb25OZWcpICYmIHZhbHVlLT5mVmFsdWUgPiAwKSB7CisgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgICAgICAgICBoYXZlUmVzb2x1dGlvbiA9IHRydWU7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05MjE5LDI5ICs5MjU5LDMwIEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVu
dCgpOwogICAgIHVuc2lnbmVkIGFyZ051bWJlciA9IDA7CiAgICAgd2hpbGUgKGFyZ3VtZW50KSB7
CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudCk7CiAgICAgICAgIENTU1BhcnNlcjo6VW5pdHMgdW5pdCA9IGluZm8udW5pdCgpOwog
CiAgICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90
YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDMpIHsKICAgICAgICAgICAg
IC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFuIGFuZ2xlIHJhdGhlciB0aGFuIGEgYmFy
ZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0
KCphcmd1bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFs
aWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8u
dHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9w
ZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMikgewogICAgICAgICAgICAgLy8gM3JkIHBhcmFtIG9m
IHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAg
IGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJp
Y3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNl
IGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRy
YW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAgICAgICAvLyAxc3QgcGFy
YW0gb2YgdHJhbnNsYXRlWigpIGNhbm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlm
ICghdmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAg
ICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NT
U3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFz
dCBwYXJhbSBvZiBwZXJzcGVjdGl2ZSgpIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyIChk
ZXByZWNhdGVkKSBvciBsZW5ndGguCi0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1l
bnQsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAg
ICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZM
ZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgdW5pdCwg
Q1NTU3RyaWN0TW9kZSkpCisgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbiwgdW5pdCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICAvLyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5z
Zm9ybSBvcGVyYXRpb24uCi0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+
YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bikpOwogCiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWFy
Z3VtZW50KQpAQCAtOTMxMSwyMSArOTM1MiwyMiBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRl
clZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqYXJncy5jdXJyZW50KCk7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYg
KCF2YWxpZFVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8
IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IHZhbHVlLmZW
YWx1ZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxh
dGVkIHZhbHVlcy4KKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2F0
dXJhdGUgYW5kIENvbnRyYXN0IGFsbG93IHZhbHVlcyBvdmVyIDEwMCUuCiAgICAgICAgICAgICBp
ZiAoZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVy
YXRpb24KICAgICAgICAgICAgICAgICAmJiBmaWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZh
bHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIGRvdWJsZSBt
YXhBbGxvd2VkID0gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UgPyAxMDAuMCA6IDEuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWxsb3dlZCA9IGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6IDEuMDsKICAgICAgICAgICAgICAgICBpZiAoYW1vdW50
ID4gbWF4QWxsb3dlZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoYW1vdW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzPih2YWx1ZS51bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXM+KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCkp
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MzM1LDExICs5Mzc3LDEy
IEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWls
dGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVl
JiB2YWx1ZSA9ICphcmdzLmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZh
bHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgp
KTsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcz4oYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KSkpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNDksMTEgKzkzOTIsMTEgQEAgUGFzc1JlZlB0
cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1
bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgYXJn
dW1lbnQgPSAqYXJncy5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1
bWVudCwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7CisgICAgICAg
ICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NT
dHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCi0g
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC05MzYzLDExICs5NDA2LDExIEBAIFBhc3NSZWZQdHI8
V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1l
bnRzKENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3Vt
ZW50ID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1l
bnQsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7
CisgICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShhcmd1bWVudCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NTQ0LDggKzk1ODcsOSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IENTU1Byb3BlcnR5SUQmIHByb3BJZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKLSAgICAgICAg
ICAgIGlmICh2YWxpZFVuaXQoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIEZMZW5ndGgpKQotICAg
ICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVl
V2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlm
ICh2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpKQorICAgICAgICAgICAg
ICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05ODAxLDggKzk4NDUsOSBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCiAKICAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIHdoaWxlICh2
YWx1ZSkgewotICAgICAgICBpZiAoIWhhc0xlbmd0aE9yUGVyY2VudGFnZSAmJiB2YWxpZFVuaXQo
KnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSkpOworICAgICAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoIWhh
c0xlbmd0aE9yUGVyY2VudGFnZSAmJiB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgICAgIGhh
c0xlbmd0aE9yUGVyY2VudGFnZSA9IHRydWU7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoQ1NTM19U
RVhUKQpAQCAtOTk3OCwyMSArMTAwMjMsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZh
cmlhbnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2Fs
Y3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQorUmVmUHRyPENTU0NhbGNWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3Vs
YXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQogewogICAgIEFTU0VSVChpc0NhbGN1bGF0
aW9uKHZhbHVlKSk7CiAgICAgCiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUu
ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBU1NF
UlQoIW1fcGFyc2VkQ2FsY3VsYXRpb24pOwotICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBDU1ND
YWxjVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdlKTsKLSAg
ICAKLSAgICBpZiAoIW1fcGFyc2VkQ2FsY3VsYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICphcmdzLCByYW5nZSk7CiB9CiAKICNkZWZpbmUgRU5EX1RP
S0VOIDAKQEAgLTEyMTg2LDExICsxMjIyNSwxMiBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+
IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Vmlld3BvcnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBpZiAoIXZhbHVlKQorICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLT5pZDsKKyAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSk7CisKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAKICAgICBzd2l0Y2ggKHBy
b3BJZCkgewpAQCAtMTIyMDEsNyArMTIyNDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3
cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZURldmljZVdpZHRoIHx8
IGlkID09IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQg
JiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6IC8vIHNob3J0aGFuZAogICAgICAgICByZXR1cm4g
cGFyc2VWaWV3cG9ydFNob3J0aGFuZChwcm9wSWQsIENTU1Byb3BlcnR5TWluV2lkdGgsIENTU1By
b3BlcnR5TWF4V2lkdGgsIGltcG9ydGFudCk7CkBAIC0xMjIxMyw3ICsxMjI1Myw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50
IHwgRk5vbk5lZykpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlk
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206IC8vIHpvb20g
fCBmaXhlZAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVab29tIHx8IGlkID09IENTU1ZhbHVl
Rml4ZWQpCkBAIC0xMjIyOCw3ICsxMjI2OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdw
b3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKICAgICBpZiAodmFsaWRQcmltaXRpdmUpIHsK
LSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCAqdmFsdWUpOwor
ICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAppbmRleCA5ZWM3YTk2YjkzZTVmN2NlYmExNDViMmI3NWU2ZDkzMDlkNmU0
NmIxLi5lNWExYTU5ZWFhZTk1MDlhZWJlOWI2NmMzMzBmY2ExNzg3ZTI0YWU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCkBAIC04MCw2ICs4MCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIEdlbmVyYWxT
eW50YXhFcnJvcgogICAgIH07CiAKKyAgICBjbGFzcyBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBWYWx1ZVdpdGhDYWxjdWxhdGlvbihDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCisgICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsg
fQorCisgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICAgICAgb3BlcmF0b3IgQ1NTUGFyc2VyVmFsdWUmKCkgeyByZXR1cm4gbV92YWx1
ZTsgfQorCisgICAgICAgIENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NhbGN1bGF0aW9uLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVm
UHRyPENTU0NhbGNWYWx1ZT4mJiBjYWxjdWxhdGlvbikgeyBtX2NhbGN1bGF0aW9uID0gY2FsY3Vs
YXRpb247IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENTU1BhcnNlclZhbHVlJiBtX3ZhbHVl
OworICAgICAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBtX2NhbGN1bGF0aW9uOworICAgIH07CisK
ICAgICBDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogCiAgICAgfkNTU1BhcnNl
cigpOwpAQCAtOTIsNyArMTA5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNlQ29s
b3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAg
ICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJp
bmcmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFy
c2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudCwgQ1NT
UGFyc2VyVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZh
bGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAg
ICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBjb25zdCBT
dHJpbmcmLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiwgU3R5bGVTaGVldENvbnRlbnRz
KiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgc3RhdGljIFJlZjxJbW11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50
Kik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25z
dCBTdHJpbmcmKTsKQEAgLTI4MCw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VUZXh0SW5kZW50KCk7CiAgICAgCiAgICAgYm9vbCBwYXJzZUxpbmVCb3hD
b250YWluKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFy
c2VyVmFsdWUmLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UpOworICAgIFJlZlB0cjxD
U1NDYWxjVmFsdWU+IHBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmLCBDYWxjdWxhdGlv
blBlcm1pdHRlZFZhbHVlUmFuZ2UpOwogCiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlVGFnKENT
U1ZhbHVlTGlzdCYpOwogICAgIGJvb2wgcGFyc2VGb250RmVhdHVyZVNldHRpbmdzKGJvb2wgaW1w
b3J0YW50KTsKQEAgLTQwMiw3ICs0MTksNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBjcmVhdGVWaWV3cG9ydFJ1bGUoKTsKICNlbmRpZgogCi0gICAgUmVmPENTU1By
aW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFsdWUm
KTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwogICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3Jl
YXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKTsKIAogICAgIHN0YXRpYyBV
UkwgY29tcGxldGVVUkwoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJs
KTsKQEAgLTQ5Niw4ICs1MTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0dXBQYXJzZXIoY29u
c3QgY2hhciogcHJlZml4LCB1bnNpZ25lZCBwcmVmaXhMZW5ndGgsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWduZWQgc3VmZml4TGVuZ3RoKTsKICAgICBib29sIGluU2hv
cnRoYW5kKCkgY29uc3QgeyByZXR1cm4gbV9pblBhcnNlU2hvcnRoYW5kOyB9CiAKLSAgICBib29s
IHZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICBib29sIHZhbGlkSGVpZ2h0KENTU1Bh
cnNlclZhbHVlJik7CisgICAgYm9vbCB2YWxpZFdpZHRoKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7
CisgICAgYm9vbCB2YWxpZEhlaWdodChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwogCiAgICAgdm9p
ZCBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKIApAQCAtNTc2LDggKzU5Myw2IEBAIHByaXZh
dGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4+PiBtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3I7CiAKLSAgICBSZWZQdHI8Q1NT
Q2FsY1ZhbHVlPiBtX3BhcnNlZENhbGN1bGF0aW9uOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1
bGVTb3VyY2VEYXRhTGlzdD4gbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2s7CiAKICAgICAvLyBkZWZp
bmVzIHVuaXRzIGFsbG93ZWQgZm9yIGEgY2VydGFpbiBwcm9wZXJ0eSwgdXNlZCBpbiBwYXJzZVVu
aXQKQEAgLTYxMSwxNiArNjI2LDE2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0xvZ2dpbmdFcnJv
cnMoKTsKICAgICB2b2lkIGxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIpOwogCi0gICAgYm9vbCB2YWxpZENhbGN1bGF0aW9uVW5pdChDU1NQYXJzZXJWYWx1ZSYs
IFVuaXRzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9O
b3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0
KFZhbHVlV2l0aENhbGN1bGF0aW9uJiwgVW5pdHMpOwogCiAgICAgYm9vbCBzaG91bGRBY2NlcHRV
bml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKIAot
ICAgIGlubGluZSBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVu
aXRmbGFncywgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYyA9IERv
Tm90UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkgeyByZXR1cm4gdmFsaWRVbml0KHZhbHVlLCB1bml0
ZmxhZ3MsIG1fY29udGV4dC5tb2RlLCByZWxlYXNlQ2FsYyk7IH0KLSAgICBib29sIHZhbGlkVW5p
dChDU1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlLCBSZWxlYXNlUGFyc2VkQ2Fs
Y1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVl
KTsKKyAgICBpbmxpbmUgYm9vbCB2YWxpZFVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVl
LCBVbml0cyB1bml0ZmxhZ3MpIHsgcmV0dXJuIHZhbGlkVW5pdCh2YWx1ZSwgdW5pdGZsYWdzLCBt
X2NvbnRleHQubW9kZSk7IH0KKyAgICBib29sIHZhbGlkVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlv
biYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKIAogICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1
YWQoVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLSAgICBpbnQgY29sb3JJbnRG
cm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICBkb3VibGUgcGFyc2VkRG91YmxlKENTU1Bh
cnNlclZhbHVlJiwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiByZWxlYXNlQ2FsYyA9
IERvTm90UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgaW50IGNvbG9ySW50RnJvbVZhbHVl
KFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CisgICAgZG91YmxlIHBhcnNlZERvdWJsZShWYWx1ZVdp
dGhDYWxjdWxhdGlvbiYpOwogICAgIAogICAgIGZyaWVuZCBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRp
b25JbmZvOwogICAgIGZyaWVuZCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25JbmZvOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTUGFyc2VyLmNwcAppbmRleCA4NDc5YWRkNDBjMmY1N2RjMTZiMjc2MDVkOWY3ZjIx
NGEzZDU5NzFkLi5mYWQwMDk0M2RjYmI1MWVhNGU5ZTE4ZGM1M2U1OWUzYjkyYTUwMzQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcApAQCAtMzUsMTEgKzM1LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKKyAgICBpZiAoIW1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CiAKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUtPmlkOworICAgIENTU1ZhbHVlSUQgaWQgPSB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwogCiAgICAgYm9vbCB2YWxpZF9wcmltaXRp
dmUgPSBmYWxzZTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwpAQCAtNjIsNyAr
NjIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgIGlkID49IENTU1ZhbHVlU3VwZXIpCiAgICAg
ICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQs
IFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0
ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlEb21pbmFudEJh
c2VsaW5lOgpAQCAtODcsOCArODcsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1hc2s6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB2YWxp
ZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKICAgICAgICAgICAgIGlm
IChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICB9CkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VNaXRlcmxpbWl0OiAgIC8vIDxtaXRlcmxpbWl0PiB8
IGluaGVyaXQKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51
bWJlciB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICB2YWxpZF9wcmltaXRp
dmUgPSB2YWxpZFVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnLCBT
VkdBdHRyaWJ1dGVNb2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlTGluZWpvaW46ICAgLy8gbWl0ZXIgfCByb3VuZCB8IGJldmVsIHwgaW5oZXJpdApAQCAt
MTE4LDcgKzExOCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbE9wYWNp
dHk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BPcGFjaXR5OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbG9vZE9wYWNpdHk6Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKSk7CisgICAg
ICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5U2hhcGVSZW5kZXJpbmc6CkBAIC0xNjcsOCArMTY3
LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICBGQUxMVEhST1VHSDsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDogLy8gPGFuZ2xlPiAocmVzdHJpY3RlZCB0
byBfZGVnXyBwZXIgU1ZHIDEuMSBzcGVjKSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHIHx8IHZhbHVlLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ERUcpOworICAgICAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgeworICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyk7CiAKICAg
ICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwpAQCAtMTg5LDE2ICsxODksMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAg
IHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZUN1cnJlbnRDb2xvcigpOwogICAgICAgICAg
ICAgZWxzZSBpZiAoKGlkID49IENTU1ZhbHVlQWN0aXZlYm9yZGVyICYmIGlkIDw9IENTU1ZhbHVl
V2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQogICAgICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9yKFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KS0+c3lzdGVtQ29sb3IoaWQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpIHsKICAgICAgICAgICAgICAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAg
ICAgICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVV
UklBbmRDb2xvcih2YWx1ZS0+c3RyaW5nLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuc3RyaW5nLCBjKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZS0+
c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6
OmNyZWF0ZVVSSUFuZE5vbmUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUkkodmFsdWUt
PnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNy
ZWF0ZVVSSSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU1ZHUGFpbnQoKTsK
IApAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5TGln
aHRpbmdDb2xvcjoKICAgICAgICAgaWYgKChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NT
VmFsdWVXaW5kb3d0ZXh0KSB8fAogICAgICAgICAgICAoaWQgPj0gQ1NTVmFsdWVBbGljZWJsdWUg
JiYgaWQgPD0gQ1NTVmFsdWVZZWxsb3dncmVlbikpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpOworICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRlRnJvbVN0cmluZyh2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKQogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRlQ3Vy
cmVudENvbG9yKCk7CiAgICAgICAgIGVsc2UgLy8gVE9ETyA6IHN2Z2NvbG9yIChpY2NDb2xvcikK
QEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlV2lkdGg6ICAgICAgICAgLy8gPGxlbmd0aD4gfCBpbmhlcml0CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVN0cm9rZURhc2hvZmZzZXQ6Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheTogICAgIC8vIG5vbmUgfCA8ZGFzaGFycmF5PiB8
IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKQEAgLTI1MCwxNSArMjUw
LDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9
PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICAgICAgdmFsaWRfcHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBTVkdBdHRyaWJ1
dGVNb2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6
ICAgIC8vIDx1cmk+IHwgbm9uZSB8IGluaGVyaXQKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVy
OgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCk7CiAgICAgICAgICAgICBpZiAocGFyc2Vk
VmFsdWUpCiAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfQpA
QCAtMzA2LDcgKzMwNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5Unk6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVk6Ci0gICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSk7CisgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgLy8gSWYgeW91IGNyYXNoIGhlcmUsIGl0J3MgYmVjYXVzZSB5
b3UgYWRkZWQgYSBjc3MgcHJvcGVydHkgYW5kIGFyZSBub3QgaGFuZGxpbmcgaXQKQEAgLTMxOCwx
NCArMzE4LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBpZiAodmFsaWRfcHJpbWl0aXZlKSB7CiAgICAg
ICAgIGlmIChpZCAhPSAwKQogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVl
LT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT51bml0IDw9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0
ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWUtPmZWYWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwotICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbigq
dmFsdWUpKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fcGFyc2VkQ2FsY3VsYXRpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KTsKKyAgICAg
ICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5p
dCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKKyAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkudW5pdCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxvd2luZ01hcmdpblF1aXJrKHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VNUyk7CisgICAgICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uKSkK
KyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKICAgICB9CiAgICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAobV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSAmJiAhaW5TaG9ydGhhbmQoKSkpCkBAIC0zNDEsOSArMzQxLDExIEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKQogICAgIENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgYm9vbCB2YWxp
ZF9wcmltaXRpdmUgPSB0cnVlOwogICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVn
LCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVX
aXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBT
VkdBdHRyaWJ1dGVNb2RlKTsKICAgICAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IGhhbmRsZSBj
YWxjdWxhdGVkIHZhbHVlcy4KICAgICAgICAgaWYgKHZhbHVlLT5pZCAhPSAwKQogICAgICAgICAg
ICAgcmV0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUt
PmlkKSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0ha
KQpAQCAtMzUzLDcgKzM1NSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VTVkdTdHJva2VEYXNoYXJyYXkoKQogICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwogICAgIH0KICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiByZXQucmVsZWFzZSgpOwog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243608</attachid>
            <date>2014-12-20 13:41:01 -0800</date>
            <delta_ts>2014-12-20 14:02:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141220134100.patch</filename>
            <type>text/plain</type>
            <size>120750</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE0Mzk5YjU5ZWYyNjhj
Y2IyOTAxNWI2MmE2ZDU2MTgxNGZiZTUyMy4uZDgxZjhkZWVmODI4OGNhZjA0OGRhZGExMWRhZTcw
ZWM5ZmJiNTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgR2V0IHJpZCBv
ZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGlu
CisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENhbGN1
bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAgSW5z
dGVhZCwgaW50cm9kdWNlIGEgbmV3IFZhbHVlV2l0aENhbGN1bGF0aW9uIHR5cGUgd2hpY2ggd3Jh
cHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2VkIGNhbGN1
bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxhdGlvbiB2
YWx1ZSBpcyBub3cgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAgICAgICAg
VGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3VsYXRpb24g
dmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQSSBpcyBh
bHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIgbmVlZCB0
byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91bGQgYmUK
KyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gd2Vi
LWJlaGF2aW9yIGNoYW5nZS4KKwogMjAxNC0xMi0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtTVkcgLT4gT1RGIENvbnZlcnRlcl0gTWFrZSBw
bGFjZWhvbGRlcnMgbW9yZSByb2J1c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNTJm
YjcyMmJiMjdhYzIwZWU1YTE1YThjOTQ2ODI4NDc5OTRhZmYxOS4uMjliMGZlNThlMTI2YmJkNWRm
ZmExMDY0MzE3N2Q1YzllZDEyMDVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE1
ODIsNTEgKzE1ODIsNTMgQEAgVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JiB1cmwpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKIH0K
IAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJl
bGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVl
V2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgVW5pdHMgdW5pdEZsYWdzKQog
ewotICAgIGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0ZmxhZ3MgJiBGTm9uTmVnOworICAg
IGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0RmxhZ3MgJiBGTm9uTmVnOwogCi0gICAgaWYg
KCFwYXJzZUNhbGN1bGF0aW9uKHZhbHVlLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9u
UmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpKQorICAgIEFTU0VSVCghdmFs
dWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7CisgICAgUmVmUHRyPENTU0NhbGNWYWx1
ZT4gY2FsY3VsYXRpb24gPSBwYXJzZUNhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uLCBt
dXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0
aW9uUmFuZ2VBbGwpOworICAgIGlmICghY2FsY3VsYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGJvb2wgYiA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9wYXJzZWRDYWxjdWxhdGlv
bi0+Y2F0ZWdvcnkoKSkgeworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAo
Y2FsY3VsYXRpb24tPmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6Ci0gICAgICAg
IGIgPSAodW5pdGZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdz
ICYgRkludGVnZXIpICYmIG1fcGFyc2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCi0gICAgICAgICAg
ICBiID0gdHJ1ZTsKLSAgICAgICAgaWYgKGIgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYgbV9wYXJz
ZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQotICAgICAgICAgICAgYiA9IGZhbHNlOworICAg
ICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZOdW1iZXIpOworICAgICAgICBpZiAoIWlzVmFs
aWQgJiYgKHVuaXRGbGFncyAmIEZJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSkKKyAg
ICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBpZiAoaXNWYWxpZCAmJiBtdXN0QmVO
b25OZWdhdGl2ZSAmJiBjYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICAgICAgaXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGNMZW5ndGg6Ci0gICAg
ICAgIGIgPSAodW5pdGZsYWdzICYgRkxlbmd0aCk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZs
YWdzICYgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6Ci0g
ICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlBlcmNlbnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0
QmVOb25OZWdhdGl2ZSAmJiBtX3BhcnNlZENhbGN1bGF0aW9uLT5pc05lZ2F0aXZlKCkpCi0gICAg
ICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRlBlcmNl
bnQpOworICAgICAgICBpZiAoaXNWYWxpZCAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBjYWxjdWxh
dGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENhbGNQZXJjZW50TGVuZ3RoOgotICAgICAgICBiID0gKHVuaXRm
bGFncyAmIEZQZXJjZW50KSAmJiAodW5pdGZsYWdzICYgRkxlbmd0aCk7CisgICAgICAgIGlzVmFs
aWQgPSAodW5pdEZsYWdzICYgRlBlcmNlbnQpICYmICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGUGVyY2VudCkgJiYgKHVuaXRmbGFncyAmIEZOdW1iZXIpOworICAgICAgICBp
c1ZhbGlkID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KSAmJiAodW5pdEZsYWdzICYgRk51bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY0FuZ2xlOgotICAgICAgICBiID0gKHVuaXRm
bGFncyAmIEZBbmdsZSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkFuZ2xlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjVGltZToKLSAgICAgICAgYiA9ICh1bml0Zmxh
Z3MgJiBGVGltZSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRlRpbWUpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENhbGNGcmVxdWVuY3k6Ci0gICAgICAgIGIgPSAodW5pdGZs
YWdzICYgRkZyZXF1ZW5jeSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkZyZXF1
ZW5jeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY090aGVyOgogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgaWYgKCFiIHx8IHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxj
VmFsdWUpCi0gICAgICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVy
biBiOyAgICAKKyAgICBpZiAoaXNWYWxpZCkKKyAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24u
c2V0Q2FsY3VsYXRpb24oV1RGOjptb3ZlKGNhbGN1bGF0aW9uKSk7CisgICAgcmV0dXJuIGlzVmFs
aWQ7CiB9CiAKIGlubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1
ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKQEAgLTE2MzUsMjcgKzE2MzcsMjcgQEAgaW5saW5lIGJvb2wgQ1NTUGFy
c2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVu
aXRzIHUKICAgICByZXR1cm4gKHVuaXRmbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUp
KSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwg
Y3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6
OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJl
bGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxh
dGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24sIFVuaXRzIHVuaXRGbGFncywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQogewotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIHZhbGlkQ2FsY3VsYXRpb25Vbml0KHZhbHVlLCB1bml0ZmxhZ3MsIHJlbGVhc2VD
YWxjKTsKKyAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCisgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUNhbGN1bGF0aW9uVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
dW5pdEZsYWdzKTsKICAgICAgICAgCiAgICAgYm9vbCBiID0gZmFsc2U7Ci0gICAgc3dpdGNoICh2
YWx1ZS51bml0KSB7CisgICAgc3dpdGNoICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQpIHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgotICAgICAgICBi
ID0gKHVuaXRmbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNjZXB0
VW5pdExlc3NWYWx1ZXModmFsdWUsIHVuaXRmbGFncywgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAg
ICAgICAgIHZhbHVlLnVuaXQgPSAodW5pdGZsYWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bml0ZmxhZ3MgJiBG
QW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgOiBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX01TKTsKKyAgICAgICAgYiA9ICh1bml0RmxhZ3MgJiBGTnVtYmVyKTsKKyAgICAgICAgaWYg
KCFiICYmIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKHZhbHVlV2l0aENhbGN1bGF0aW9uLCB1
bml0RmxhZ3MsIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAgICB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPSAodW5pdEZsYWdzICYgRkxlbmd0aCkgPyBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bml0RmxhZ3MgJiBG
QW5nbGUpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgOiBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX01TKTsKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgh
YiAmJiAodW5pdGZsYWdzICYgRkludGVnZXIpICYmIHZhbHVlLmlzSW50KQorICAgICAgICBpZiAo
IWIgJiYgKHVuaXRGbGFncyAmIEZJbnRlZ2VyKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmlzSW50KQogICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGlmICghYiAmJiAodW5p
dGZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikgJiYgdmFsdWUuaXNJbnQgJiYgdmFsdWUuZlZhbHVl
ID4gMCkKKyAgICAgICAgaWYgKCFiICYmICh1bml0RmxhZ3MgJiBGUG9zaXRpdmVJbnRlZ2VyKSAm
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlzSW50ICYmIHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuZlZhbHVlID4gMCkKICAgICAgICAgICAgIGIgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAg
ICAgYiA9ICh1bml0ZmxhZ3MgJiBGUGVyY2VudCk7CisgICAgICAgIGIgPSAodW5pdEZsYWdzICYg
RlBlcmNlbnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1BhcnNlclZhbHVlOjpRX0VN
UzoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TOgpAQCAtMTY3MiwxNyArMTY3
NCwxNyBAQCBib29sIENTU1BhcnNlcjo6dmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwg
VW5pdHMgdW5pdGZsYWdzLCBDU1NQYXJzZXJNb2RlCiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1ZIOgogICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgogICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYOgotICAgICAgICBiID0gKHVuaXRmbGFncyAm
IEZMZW5ndGgpOworICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZMZW5ndGgpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVM6CiAgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1M6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlRpbWUpOwor
ICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZUaW1lKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkFEOgogICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgogICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgotICAgICAgICBiID0gKHVuaXRmbGFncyAm
IEZBbmdsZSk7CisgICAgICAgIGIgPSAodW5pdEZsYWdzICYgRkFuZ2xlKTsKICAgICAgICAgYnJl
YWs7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWDoKQEAg
LTE2OTcsMjAgKzE2OTksMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVn
ICYmIHZhbHVlLmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdEZsYWdzICYgRk5vbk5lZyAm
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIgPSBm
YWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYgKGIg
JiYgc3RkOjppc2luZih2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkpCiAgICAg
ICAgIGIgPSBmYWxzZTsKICAgICByZXR1cm4gYjsKIH0KIAotaW5saW5lIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0
aENhbGN1bGF0aW9uKQogewotICAgIGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKSB7Ci0gICAgICAg
IEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKG1fcGFyc2VkQ2FsY3VsYXRpb24ucmVsZWFzZSgpKTsKLSAgICB9Cisg
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpCisgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0
aW9uKCkpOwogCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gdmFsdWVXaXRoQ2FsY3VsYXRp
b247CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKICAgICBBU1NFUlQoKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKICAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJO
ICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMpCkBAIC0xNzQwLDQz
ICsxNzQxLDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcvJzsKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OnZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnZh
bGlkV2lkdGgoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogewot
ICAgIGludCBpZCA9IHZhbHVlLmlkOworICAgIGludCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuaWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlSW50cmluc2ljIHx8IGlkID09IENT
U1ZhbHVlTWluSW50cmluc2ljIHx8IGlkID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCB8fCBp
ZCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRGaWxs
QXZhaWxhYmxlIHx8IGlkID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuICFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpOworICAgIHJldHVybiAhaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKIH0KIAogLy8g
RklYTUU6IENvbWJpbmUgdGhpcyB3aXRoIHZhbGlkV2lkdGggd2hlbiB3ZSBzdXBwb3J0IGZpdC1j
b250ZW50LCBldCBhbCwgZm9yIGhlaWdodHMuCi1ib29sIENTU1BhcnNlcjo6dmFsaWRIZWlnaHQo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkSGVpZ2h0KFZhbHVl
V2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKIHsKLSAgICBpbnQgaWQgPSB2
YWx1ZS5pZDsKKyAgICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwog
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJp
bnNpYykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFpZCAmJiB2YWxpZFVuaXQo
dmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgIHJldHVybiAhaWQgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnKTsKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7CiAgICAgaWYgKGlkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
aWRlbnRpZmllcik7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1
ZSk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIg
JiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHZhbHVlLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworCisgICAg
aWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVl
KHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQorICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBpZiAodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VlcgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVk1BWCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9O
KSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBpZiAodmFsdWUudW5pdCA+
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFggJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWUpOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCisgICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogI2Vu
ZGlmCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFs
dWUuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgaWYgKGlzQ2FsY3Vs
YXRpb24odmFsdWUpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSht
X3BhcnNlZENhbGN1bGF0aW9uLnJlbGVhc2UoKSk7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCisgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwor
ICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKQorICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxh
dGlvbigpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTc5OSwxOSArMTgwMSwxMSBA
QCB2b2lkIENTU1BhcnNlcjo6YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTUwogCiBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgaWYgKCFtX3ZhbHVl
TGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICghdmFsdWUpCisgICAgaWYgKCFt
X3ZhbHVlTGlzdCB8fCAhbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgLy8gTm90ZTogbV9wYXJzZWRDYWxjdWxhdGlvbiBpcyB1c2VkIHRvIHBhc3Mg
dGhlIGNhbGMgdmFsdWUgdG8gdmFsaWRVbml0IGFuZCB0aGVuIGNsZWFyZWQgYXQgdGhlIGVuZCBv
ZiB0aGlzIGZ1bmN0aW9uLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRvIGF2b2lkIGhhdmluZyB0
byBwYXNzIHBhcnNlZENhbGMgdG8gYWxsIHZhbGlkVW5pdCBjYWxsZXJzLgotICAgIEFTU0VSVCgh
bV9wYXJzZWRDYWxjdWxhdGlvbik7Ci0gICAgCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLT5p
ZDsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuaWQ7CiAKICAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6
IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAKQEAgLTE4NzUsNyArMTg2OSw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAgICAgICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRv
IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCiAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VDbGlwU2hhcGUocHJvcElkLCBpbXBvcnRhbnQpOwogICAgICAgICBi
cmVhazsKIApAQCAtMTkzMyw3ICsxOTI3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6
ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwgaW5oZXJpdAogICAgICAgICAvLyBPdXRsaW5l
IGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlvbmFsIGtleXdvcmQuCkBAIC0xOTg2LDYgKzE5
ODAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIHpvb20taW4gfCB6b29tLW91dCB8IGFsbC1zY3Jv
bGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIHwgLXdlYmtpdC16b29tLWluIHwK
ICAgICAgICAgLy8gLXdlYmtpdC16b29tLW91dCBdIF0gfCBpbmhlcml0CiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9ICZ2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpOwogICAgICAgICB3aGlsZSAodmFsdWUpIHsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2U7CiAgICAgICAgICAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIwMjgsNyArMjAyMyw4
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsgLy8g
Y29tbWEKICAgICAgICAgfQogICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgaWYgKCF2
YWx1ZSkgeyAvLyBubyB2YWx1ZSBhZnRlciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBhdGliaWxpdHkp
CisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUg
YWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRpYmlsaXR5KQogICAgICAgICAgICAgICAgIGlm
IChsaXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUhhbmQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCkBAIC0yMDQwLDcgKzIwMzYs
OCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIGlmICh2YWx1
ZSkgewogICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAgICBpZiAoaW5RdWly
a3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgeyAvLyBNU0lFIDUgY29tcGF0
aWJpbGl0eSA6LworICAgICAgICAgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUhhbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBNU0lFIDUgY29tcGF0aWJpbGl0
eSA6LwogICAgICAgICAgICAgICAgIGlkID0gQ1NTVmFsdWVQb2ludGVyOwogICAgICAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHZhbHVl
LT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Via2l0Wm9vbU91
dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVO
b25lKQpAQCAtMjExNCwxNyArMjExMSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZykp
OwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChp
c0dlbmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzR2Vu
ZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpIHsKICAgICAgICAgICAgIGlm
IChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQogICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCi0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbiAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0
LWltYWdlLXNldCgiKSkgeworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0
LWltYWdlLXNldCgiKSkgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0
KCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTIxNDcsMjEgKzIxNDQsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVUaGluIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVl
VGhpY2spCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzogICAgICAgLy8gbm9ybWFsIHwgPGxl
bmd0aD4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVu
Z3RoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6
ICAgICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOworICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRl
bnQ6CkBAIC0yMTc2LDM3ICsyMTczLDM3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UGFkZGluZ0VuZDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0JlZm9y
ZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZykpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRoKCp2YWx1ZSkpOworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRXaWR0aCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVy
dHlNaW5XaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkV2lkdGgoKnZhbHVlKTsKKyAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZFdpZHRoKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFdpZHRoKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkSGVpZ2h0KCp2YWx1ZSkpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRIZWln
aHQodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENT
U1Byb3BlcnR5TWluSGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2Fs
SGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkSGVpZ2h0KCp2YWx1ZSk7Cisg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRIZWlnaHQodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZEhlaWdodCgqdmFsdWUpKTsKKyAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkSGVpZ2h0KHZhbHVl
V2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRTaXplOgpAQCAtMjIyMiw3ICsyMjE5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQg
Pj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxl
KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOiAgICAgICAgICAgICAg
IC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKQEAgLTIyNDAsMTQg
KzIyMzcsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OiAgICAgICAgICAgICAgLy8gYXV0
byB8IDxpbnRlZ2VyPiB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2Vy
LCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9k
ZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8
aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9ydCBmb3IgYXV0byBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMjU1LDcgKzIyNTIsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2Rl
KSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CkBAIC0yMzA1
LDcgKzIzMDIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8
fCBpZCA9PSBDU1NWYWx1ZVJlc2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNl
bnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwg
RlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIHdpdGhpbiBAZm9udC1mYWNlIGFu
ZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNhbm5vdCB1c2UgaW5oZXJpdCB8IGluaXRpYWwgb3IgYmUg
IWltcG9ydGFudC4gVGhpcyBpcyBhIGxpc3Qgb2YgdXJscyBvciBsb2NhbCByZWZlcmVuY2VzLgpA
QCAtMjM3MSwxNyArMjM2OCwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzOiB7CiAgICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0gMikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxp
ZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgg
fCBGUGVyY2VudCB8IEZOb25OZWcpOwogICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOworICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICBpZiAobnVtID09IDIpIHsK
LSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZyk7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKm1fdmFsdWVMaXN0LT5uZXh0KCkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1
ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1
ZTE7CiAKQEAgLTIzODksNyArMjM4Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QXNwZWN0UmF0aW86CiAgICAgICAgIHJldHVybiBwYXJzZUFzcGVjdFJhdGlvKGltcG9ydGFudCk7
CkBAIC0yMzk3LDcgKzIzOTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlclJhZGl1czoKICAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVyUmFkaXVzKHByb3BJZCwg
aW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzogLy8gQ1NT
MiBwcm9wZXJ0eSwgZHJvcHBlZCBpbiBDU1MyLjEsIGJhY2sgaW4gQ1NTMywgc28gdHJlYXQgYXMg
Q1NTMwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6CkBAIC0yNDIwLDE3ICsyNDE3LDE3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAobnVtICE9IDEgJiYg
bnVtICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGUG9zaXRpdmVJbnRlZ2VyKTsKICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZh
bHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUx
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAg
ICAgICAgaWYgKG51bSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2
YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+bmV4dCgpKTsKKyAg
ICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdChuZXh0VmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIpOwogICAgICAgICAgICAgICAgIGlmICghdmFs
aWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKICAgICAgICAgICAgIGFk
ZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKHBhcnNlZFZhbHVlMS5y
ZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwpAQCAtMjQ0NSwx
NiArMjQ0MiwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWZsZWN0KHBy
b3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9w
YWNpdHk6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJl
cik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveEZsZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwg
Rk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVu
aXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOworICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVn
ZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYm
IHZhbHVlLT5mVmFsdWU7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYm
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgogI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCkBAIC0yNDk1LDE2ICsyNDkyLDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hyaW5rOgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKTsK
KyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIsIENTU1N0
cmljdE1vZGUpKSB7CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgcmVzdHJp
Y3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBt
aW4gYW5kIGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCi0gICAg
ICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENh
bGNWYWx1ZSkpOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIDIsIHBhcnNlZERvdWJsZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTI1MTUsMTkgKzI1
MTIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBpZCA9
PSBDU1NWYWx1ZUxhcmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQogICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0
ZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZO
b25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6CiAgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0
KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZUaW1lIHwgRkludGVn
ZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGVGltZSB8IEZJbnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAg
ICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Rmxvd0ludG86CkBAIC0yNTc0LDggKzI1NzEsOCBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8g
QWNjZXB0aW5nIHZhbHVlbGVzcyBudW1iZXJzIGlzIGEgcXVpcmsgb2YgdGhlIC13ZWJraXQgcHJl
Zml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCi0gICAgICAgICAgICBpZiAodmFsaWRVbml0
KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1
ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTUsMTkgKzI2OTIsMTkgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0gfHwgaWQgPT0gQ1NTVmFsdWVUaGljaykK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8
IEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwg
RlBlcmNlbnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uQ291
bnQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01v
ZGUpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkdhcDogLy8gbm9ybWFsIHwg
PGxlbmd0aD4KICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5BeGlzOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8
IGlkID09IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQpAQCAtMjcyMCw3
ICsyNzE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAvLyBu
b25lIHwgYWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3BlcnR5
KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWxp
ZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykgJiYgcGFyc2VkRG91YmxlKCp2YWx1ZSwg
UmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkgPT0gMSkgeworICAgICAgICBlbHNlIGlmICh2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWRE
b3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pID09IDEpIHsKICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI3MzAsOSArMjcyNyw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBpbiBzdHJpY3QgbW9kZSwgc2luY2Ug
aXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVuIHVzZWQgaW4gdGhlICdjb2x1bW5z
JyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
VW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWRE
b3VibGUoKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAg
ICAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbi5jbGVhcigpOworICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
Tm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIC8vIEVuZCBvZiBDU1MzIHByb3Bl
cnRpZXMKQEAgLTI3NDIsNyArMjczNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TGluZUNsYW1wOgogICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgbnVtYmVyIG9mIGxp
bmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUKICAgICAgICAgLy8gV2hlbiBzcGVj
aWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUgbm9uLW5lZ2F0aXZlIGludGVnZXJz
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVlLT5mVmFsdWUpICYmIHZhbGlkVW5p
dCgqdmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSk7
CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9k
ZSkpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6CkBAIC0yNzUwLDM2ICsyNzQ1
LDM2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ug
d2hlcmUgd2UgYWxsb3cgcmVsYXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJp
Y3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAgICAgICAvLyA8bGVuZ3RoPgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgpOworICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0
ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0
ZUxpbWl0QmVmb3JlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFm
dGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCgqdmFsdWUs
IEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBo
ZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xpbWl0IHx8IHZh
bGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAg
U3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAgICAgIGVs
c2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgICAgICBTdHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0
cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAgICBp
ZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNzg3LDEzICsyNzgyLDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOgotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdERhc2hib2FyZFJlZ2lvbjogLy8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1y
ZWdpb24+Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rp
b24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NW
YWx1ZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VEYXNoYm9hcmRSZWdpb25zKHByb3BJ
ZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKQEAgLTI5NTcsMTUgKzI5NTIs
MTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShw
cm9wSWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVN
YXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQo
KnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hh
cGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW1hZ2VUaHJlc2hvbGQ6Ci0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hh
cGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyKSk7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVu
dGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVl
LCBGQW5nbGUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAj
aWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpAQCAtMzExNSwxMCArMzExMCwxMCBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgfQogCiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgKnZhbHVlKTsKKyAgICAgICAgcGFyc2Vk
VmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIEFTU0VSVCghbV9wYXJzZWRD
YWxjdWxhdGlvbik7CisKICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgaWYgKCFtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpIHx8IGluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwpAQCAtMzIy
MSwxNiArMzIxNiwxNyBAQCBib29sIENTU1BhcnNlcjo6dXNlTGVnYWN5QmFja2dyb3VuZFNpemVT
aG9ydGhhbmRCZWhhdmlvcigpIGNvbnN0CiBib29sIENTU1BhcnNlcjo6cGFyc2VOb25FbGVtZW50
U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNl
cGFyYXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCp2YWwsIEZQZXJjZW50IHwgRkxl
bmd0aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoKnZhbCkpOwotICAgICAgICBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OkZ1bmN0aW9uCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAg
ICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgewotICAg
ICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbCA9ICp2YWwtPmZ1bmN0aW9uLT5hcmdz
LmdldCgpLT5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0KHBhcnNlclZhbCwg
Rkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShwYXJzZXJWYWwpKSkpOworICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmICh2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCisgICAg
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uCisgICAgICAgICAgICAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MK
KyAgICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDEKKyAgICAg
ICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlcGVh
dCgiKSkgeworICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24oKnZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKS0+Y3VycmVudCgpKTsKKyAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNyZWF0ZShjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkpOwogICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNTMsMTUgKzMy
NDksMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBwb3NpdGlvbiA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBp
ZiAobV92YWx1ZUxpc3QtPnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Q1NTUGFyc2VyVmFsdWUqIGN1clBhcnNlclZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgaWYgKCF2YWxpZFVuaXQoKmN1clBhcnNlclZhbCwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVhXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlWFdpdGhDYWxjdWxhdGlv
biwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQ
YXJzZXJWYWwpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgY3VyUGFyc2VyVmFsID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbGlkVW5pdCgqY3VyUGFyc2VyVmFs
LCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWFdpdGhDYWxjdWxhdGlvbik7CisKKyAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVlXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5uZXh0KCkpOworICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlWVdpdGhDYWxjdWxhdGlvbiwg
RlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJz
ZXJWYWwpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlWVdpdGhDYWxjdWxhdGlvbik7CiAgICAgcG9zaXRpb24tPmFwcGVu
ZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NW
YWx1ZVkucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwb3NpdGlv
biwgaW1wb3J0YW50KTsKQEAgLTMyNzMsMTUgKzMyNjksMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VkVmFsdWVYID0gKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlWFdpdGhD
YWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgICAgIC8vIERvbid0IGFj
Y2VwdCBvZGQtbGVuZ3RoIGxpc3RzIG9mIGNvb3JkaW5hdGVzLgogICAgICAgICBpZiAoIW1fdmFs
dWVMaXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1Bh
cnNlclZhbHVlJiBwYXJzZWRWYWx1ZVkgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAg
ICAgaWYgKCF2YWxpZFVuaXQocGFyc2VkVmFsdWVYLCBGUGVyY2VudCB8IEZMZW5ndGgpIHx8ICF2
YWxpZFVuaXQocGFyc2VkVmFsdWVZLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVlXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVhXaXRoQ2FsY3VsYXRpb24s
IEZQZXJjZW50IHwgRkxlbmd0aCkgfHwgIXZhbGlkYXRlVW5pdCh2YWx1ZVlXaXRoQ2FsY3VsYXRp
b24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShwYXJzZWRW
YWx1ZVgpKTsKLSAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKHBhcnNlZFZhbHVlWSkpOworICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVYV2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIHBv
c2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVlXaXRoQ2Fs
Y3VsYXRpb24pKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAgICAgaWYg
KHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKQEAgLTM3NzQsMTIgKzM3NzAsMTQgQEAgQ1NTUGFyc2Vy
OjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1
ZUxpc3QmIHBhcnNlZFYKICAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAgICAg
aWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1UeXBl
ID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7Ci0gICAgICAgICAgICBwYXJz
ZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSkpOworICAg
IGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpICYmIChwcmV2UGFyYW1UeXBlID09
IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7CisgICAgICAgICAgICBwYXJzZWRW
YWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIExlbmd0aDsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gTm9uZTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5vbmU7CiAg
ICAgfQpAQCAtMzk3NSw4ICszOTczLDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUZpbGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAg
ICAgICAgIHBlcmNlbnQgPSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAg
fQotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVl
TGlzdC5jdXJyZW50KCkpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1
bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtMzk5MSw4ICszOTkwLDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1
ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5jdXJyZW50KCksIEZQ
ZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICBpZiAodmFsaWRh
dGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDAyOCwxOSArNDAyOCwxNyBAQCBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29t
cG9uZW50KENTU1BhcnNlclZhbAogCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAg
IH0KLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3QuY3VycmVudCgpLCBGUGVyY2VudCB8IEZM
ZW5ndGgpKSB7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
KnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsKICAgICAgICAgaWYgKCFjdW11bGF0aXZl
RmxhZ3MpIHsKICAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9uOwog
ICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBYRmlsbFBvc2l0aW9uOwogICAgICAgICB9IGVs
c2UgaWYgKGN1bXVsYXRpdmVGbGFncyAmIChYRmlsbFBvc2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBv
c2l0aW9uKSkgewogICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247
CiAgICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRDYWxjdWxhdGlvbikKLSAgICAgICAgICAg
ICAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNDIwMiw3ICs0MjAwLDEwIEBAIHZvaWQg
Q1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIFJlZlB0cjxDCiAKIGlubGluZSBib29sIENTU1BhcnNlcjo6aXNQb3RlbnRpYWxQ
b3NpdGlvblZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gaXNGaWxs
UG9zaXRpb25LZXl3b3JkKHZhbHVlLmlkKSB8fCB2YWxpZFVuaXQodmFsdWUsIEZQZXJjZW50IHwg
Rkxlbmd0aCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7CisgICAgaWYgKGlzRmlsbFBvc2l0aW9u
S2V5d29yZCh2YWx1ZS5pZCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsaWRh
dGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpOwogfQogCiB2
b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUy
KQpAQCAtNDM2Niw5ICs0MzY3LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCYgYWxsb3dDCiAgICAgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIGVsc2Ug
ewotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpCisg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7
CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHBhcnNl
ZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBw
YXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFs
dWUyOwpAQCAtNDM3NiwxMyArNDM3OCwxNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93QwogICAg
ICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVl
LT5pVmFsdWUgPT0gJywnKQogICAgICAgICAgICAgYWxsb3dDb21tYSA9IGZhbHNlOwogICAgICAg
ICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQ
ZXJjZW50KSkgewogICAgICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdCBpcyBhZHZhbmNlZCB3ZSds
bCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5wcmV2aW91cygpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFyc2Vk
VmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAm
JiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSkgewogICAgICAgICAv
LyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8g
dGhlIGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCkBAIC00NTg2LDkgKzQ1ODksOSBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3Bl
cnR5SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VB
bmltYXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7CisgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUpKQor
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDYwMiw5ICs0NjA1LDkgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigp
CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlv
bigpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
OworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwgRk5v
bk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjIxLDggKzQ2
MjQsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoKQogICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUluZmluaXRlKQogICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsK
LSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICBpZiAodmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykpCisgICAgICAgIHJl
dHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00NjcyLDggKzQ2NzYsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dWUxLCBSZWZQdHI8QwogCiAgICAgLy8gbm93IGdldCB6CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5pdCgqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgRkxlbmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAg
ICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpIHsK
KyAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ2ODUsMTYgKzQ2OTAsMTYgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1
ZT4mIHZhbHVlMSwgUmVmUHRyPEMKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgZG91YmxlJiByZXN1
bHQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy5jdXJyZW50KCk7Ci0gICAg
aWYgKCF2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyKSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgIGlmICghdmFs
aWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpOwotICAgIHZhbHVlID0gYXJncy5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkg
eworICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IGFyZ3MubmV4dCgpOworICAgIGlmICghbmV4
dFZhbHVlKSB7CiAgICAgICAgIC8vIFRoZSBsYXN0IG51bWJlciBpbiB0aGUgZnVuY3Rpb24gaGFz
IG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3ZSdyZSBkb25lLgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKKyAgICBpZiAoIWlzQ29tbWEobmV4dFZh
bHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGFyZ3MubmV4dCgpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNDcyMiwyMiArNDcyNywyNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKQogICAgICAgICBpbnQgbnVtU3Rl
cHM7CiAgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxzZTsKIAotICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoIXZh
bGlkVW5pdCgqY3VycmVudFZhbHVlLCBGSW50ZWdlcikpCisgICAgICAgIENTU1BhcnNlclZhbHVl
KiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9JbnRlZ2VyKGN1cnJl
bnRWYWx1ZS0+ZlZhbHVlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUg
Y2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIG51bVN0ZXBzID0gY2xhbXBUb0ludGVnZXIoYXJn
dW1lbnQtPmZWYWx1ZSk7CiAgICAgICAgIGlmIChudW1TdGVwcyA8IDEpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOworICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAotICAgICAgICBpZiAoY3VycmVudFZhbHVl
KSB7CisgICAgICAgIGlmIChhcmd1bWVudCkgewogICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBj
b21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAgICAgICAgIGlm
ICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3Vt
ZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPmlk
ICE9IENTU1ZhbHVlU3RhcnQgJiYgY3VycmVudFZhbHVlLT5pZCAhPSBDU1NWYWx1ZUVuZCkKKyAg
ICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50LT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZUVuZCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHN0ZXBBdFN0YXJ0
ID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVN0YXJ0OworICAgICAgICAgICAgc3RlcEF0
U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywg
c3RlcEF0U3RhcnQpOwpAQCAtNDg5OCwyMyArNDkwNSwyNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNWYWxpZEN1c3RvbUlkZW50KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIC8vIFRoZSBm
dW5jdGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBpbiA8Z3JpZC1s
aW5lPiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9yIHdpdGggJ3NwYW4nKS4KIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIGdyaWRMaW5lTmFtZSkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlcikgJiYg
dmFsdWUtPmZWYWx1ZSkgewotICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICBpZiAodmFsdWUgJiYgaXNWYWxpZEN1c3RvbUlkZW50KCp2YWx1ZSkpIHsKLSAg
ICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCptX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIENTU1BhcnNlclZh
bHVlKiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICBpZiAobmV4dFZh
bHVlICYmIGlzVmFsaWRDdXN0b21JZGVudCgqbmV4dFZhbHVlKSkgeworICAgICAgICAgICAgZ3Jp
ZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7CiAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmIChpc1ZhbGlkQ3VzdG9tSWRlbnQoKnZhbHVlKSkgewotICAg
ICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgaWYgKHZhbHVlICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyKSAmJiB2YWx1ZS0+
ZlZhbHVlKSB7Ci0gICAgICAgICAgICBudW1lcmljVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAg
aWYgKGlzVmFsaWRDdXN0b21JZGVudCh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpIHsKKyAgICAgICAg
Z3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOworICAgICAgICBpZiAoQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1
ZVdpdGhDYWxjdWxhdGlvbigqbmV4dFZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVu
aXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlcikgJiYgbmV4dFZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgICAgICAgICAgbnVtZXJpY1ZhbHVl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7
CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01Mjk4LDEzICs1MzA3LDE4
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tMaXN0KCkK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1JlcGVhdEZ1bmN0aW9uKENTU1ZhbHVlTGlz
dCYgbGlzdCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJndW1lbnRz
IHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFsaWRVbml0KCphcmd1bWVudHMtPnZhbHVl
QXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgx
KSkpCisgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5zaXplKCkgPCAzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoYXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFs
dWUgPiAwKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdFZhbHVlV2l0aENhbGN1bGF0
aW9uKCphcmd1bWVudHMtPnZhbHVlQXQoMCkpOworICAgIGlmICghdmFsaWRhdGVVbml0KGZpcnN0
VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3Vt
ZW50cy0+dmFsdWVBdCgxKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgIEFTU0VSVChmaXJz
dFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlID4gMCk7CiAgICAgLy8gSWYgYXJn
dW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVuIHJlcGV0aXRpb25zIGJl
Y29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdoeSB3ZQogICAgIC8vIGNs
YW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0eXBlIGNhc3RpbmcuCi0g
ICAgdW5zaWduZWQgcmVwZXRpdGlvbnMgPSBjbGFtcFRvPHVuc2lnbmVkPihhcmd1bWVudHMtPnZh
bHVlQXQoMCktPmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOworICAgIHVuc2lnbmVkIHJlcGV0
aXRpb25zID0gY2xhbXBUbzx1bnNpZ25lZD4oZmlyc3RWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gcmVwZWF0ZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgYXJndW1lbnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCkBA
IC01Mzc4LDEzICs1MzkyLDEzIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VHcmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0CiAgICAgcmV0dXJu
IHBhcnNlR3JpZEJyZWFkdGgoY3VycmVudFZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiBj
dXJyZW50VmFsdWUpCitQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmIChjdXJyZW50
VmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGN1cnJlbnRWYWx1ZS5pZCA9
PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLmlkKTsKKyAgICBpZiAodmFsdWUu
aWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlV2Vi
a2l0TWF4Q29udGVudCkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAKLSAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19GUikgewotICAgICAgICBkb3VibGUgZmxleFZhbHVlID0gY3Vy
cmVudFZhbHVlLmZWYWx1ZTsKKyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0ZSKSB7CisgICAgICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CiAK
ICAgICAgICAgLy8gRnJhY3Rpb25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4K
ICAgICAgICAgaWYgKGZsZXhWYWx1ZSA8PSAwKQpAQCAtNTM5MywxMCArNTQwNywxMSBAQCBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NT
UGFyc2VyVmFsdWUmIGN1cnJlbgogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoZmxleFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKICAgICB9CiAKLSAg
ICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKQorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVl
KTsKKyAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk5vbk5lZyB8
IEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShjdXJyZW50VmFsdWUpOworICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRBdXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQp
CkBAIC01NTY1LDExICs1NTgwLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJl
Z2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAg
ICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgICAgICBhcmcgPSBza2lwQ29tbWFJ
bkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKIAotICAgICAgICAgICAgICAgIHZhbGlkID0gYXJnLT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCphcmcsIEZMZW5ndGgpOworICAgICAgICAg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ1dpdGhDYWxjdWxhdGlvbigqYXJnKTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRl
VW5pdChhcmdXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwogICAgICAgICAgICAgICAgIGlmICgh
dmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmcpOworICAgICAgICAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50
KTsKQEAgLTU3NDUsMTIgKzU3NjEsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBSZWZQdHI8UmVjdD4g
cmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwogICAgIGludCBp
ID0gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgp
OwotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKLSAgICAgICAgdmFsaWQgPSBjdXJyZW50VmFs
dWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0
aCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOworICAg
IHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICB2YWxpZCA9IGFyZ3VtZW50LT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoKTsKICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7
CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYXJndW1lbnQtPmlk
ID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKTsKICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNldFRv
cChsZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChpID09IDEpCkBAIC01NzU5LDEwICs1Nzc2LDEw
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obGVuZ3RoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVjdC0+c2V0TGVmdChsZW5ndGgpOwotICAgICAgICBj
dXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYg
YXJncy0+c2l6ZSgpID09IDcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlID09ICcs
JykgewotICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKKyAgICAg
ICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmdz
LT5zaXplKCkgPT0gNykgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgeworICAgICAg
ICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTgyOSwxMCArNTg0NiwxMSBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNl
cjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaQogICAgICAgICBp
ZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bih2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pOwogCiAgICAgICAgIGlmICghaW5kZXhBZnRlclNsYXNoKQogICAgICAgICAgICAg
cmFkaWlbMF1baV0gPSByYWRpdXM7CkBAIC01ODY5LDEwICs1ODg3LDExIEBAIFBhc3NSZWZQdHI8
Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVJbnNldChDU1NQYXJzZXJW
YWx1ZUxpc3QmIGFyCiAgICAgICAgIH0KIAogICAgICAgICBVbml0cyB1bml0RmxhZ3MgPSBGTGVu
Z3RoIHwgRlBlcmNlbnQ7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgdW5pdEZs
YWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQorICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBpZiAo
IXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzKSB8fCB3aWR0
aEFyZ3VtZW50cy5zaXplKCkgPiA0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgq
YXJndW1lbnQpKTsKKyAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBhcmd1bWVu
dCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIApAQCAtNTkwNywxMCArNTkyNiwxMSBAQCBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlKQogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRl
IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RTaWRlKQogICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIAotICAgIGlmICgh
dmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKKyAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7CisgICAgaWYgKCF2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogfQogCiBQYXNzUmVmUHRyPENTU0Jhc2lj
U2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlz
dCYgYXJncykKQEAgLTYwMjQsMTQgKzYwNDQsMTggQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBl
PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Jgog
ICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFggPSBhcmd1bWVudDsKICAgICB3aGlsZSAoYXJn
dW1lbnRYKSB7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50WCwgRkxlbmd0aCB8
IEZQZXJjZW50KSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRYV2l0aENh
bGN1bGF0aW9uKCphcmd1bWVudFgpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVu
dFhXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudFgpOworICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
YXJndW1lbnRYV2l0aENhbGN1bGF0aW9uKTsKIAogICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJn
dW1lbnRZID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRZIHx8ICF2YWxpZFVu
aXQoKmFyZ3VtZW50WSwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgaWYgKCFhcmd1bWVu
dFkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFkpOworICAgICAgICBpZiAo
IXZhbGlkYXRlVW5pdChhcmd1bWVudFlXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVu
dFkpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHlMZW5ndGggPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKTsKIAogICAgICAg
ICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxlYXNlKCksIHlMZW5ndGgucmVsZWFzZSgp
KTsKIApAQCAtNjA4Niw3ICs2MTEwLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkKICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAg
ICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb3hWYWx1ZSh2YWx1
ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUodmFsdWVJZCwgKnZh
bHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAg
ICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwpA
QCAtNjEwOCwxMyArNjEzMiwxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlU2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIAogICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1ZhbHVlSUQgdmFs
dWVJZCA9IHZhbHVlLmlkOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4ga2V5d29yZFZh
bHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZTsKIAogICAgIGlm
ICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBrZXl3b3JkVmFsdWUgPSBwYXJz
ZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsIHZhbHVlKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRWYWx1ZS5yZWxlYXNlKCk7CisgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAg
fQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwpAQCAtNjEzNCw3ICs2MTU1LDcg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNsaXBQYXRoKCkKIAogICAg
IGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VWYWxpZFByaW1pdGl2ZSh2YWx1ZUlkLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWVJZCk7CiAgICAgfQogICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC02MzU0LDMxICs2Mzc1
LDMxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWls
eSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVIZWlnaHQoYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1
ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlk
UHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gbm9ybWFsIHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8
IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKSk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3Qt
Pm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZSksIGltcG9ydGFudCk7
CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFBy
aW1pdGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwogICAgIHJldHVy
biB2YWxpZFByaW1pdGl2ZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9v
bCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsK
ICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gPGFic29sdXRlLXNpemU+
IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAg
ICAgaWYgKGlkID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZl
ICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFs
dWUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXpl
LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFu
dCk7CiAgICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZlOwogfQogCkBAIC02NDQ0LDggKzY0NjUsOSBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1F1aXJrc01vZGUpKSB7Ci0gICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBhcnNlZERvdWJsZSh2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpOworICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICBpZiAodmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1F1
aXJrc01vZGUpKSB7CisgICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNl
ZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBpZiAoISh3ZWlnaHQgJSAx
MDApICYmIHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkgewogICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZCh3ZWlnaHQpKSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjk0MCwxMiArNjk2Miw5IEBAIGJv
b2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlw
ZSYgbmFtZSwgYm9vbCBzdHJpY3QpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAotaW5saW5l
IGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMpCitpbmxpbmUgZG91Ymxl
IENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbikKIHsKLSAgICBkb3VibGUgcmVzdWx0ID0gbV9wYXJzZWRDYWxjdWxhdGlvbiA/
IG1fcGFyc2VkQ2FsY3VsYXRpb24tPmRvdWJsZVZhbHVlKCkgOiB2YWx1ZS5mVmFsdWU7Ci0gICAg
aWYgKHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpCi0gICAgICAgIG1fcGFy
c2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkgPyB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi5jYWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWU7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9uKENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKQEAgLTY5NTcsMTYgKzY5NzYsMTYgQEAgYm9vbCBDU1NQYXJzZXI6Omlz
Q2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgICAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW1heCgiKSk7CiB9CiAK
LWlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRo
Q2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogewogICAgIGJvb2wgaXNQZXJjZW50
OwogICAgIAotICAgIGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKQotICAgICAgICBpc1BlcmNlbnQg
PSBtX3BhcnNlZENhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OworICAgIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKQorICAgICAgICBpc1BlcmNlbnQg
PSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpLT5jYXRlZ29yeSgpID09IENhbGNQ
ZXJjZW50OwogICAgIGVsc2UKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWUudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgICAgIGlzUGVyY2VudCA9IHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0U7CiAKLSAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUo
dmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGNvbnN0IGRvdWJsZSBkb3VibGVW
YWx1ZSA9IHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgCiAgICAgaWYg
KGRvdWJsZVZhbHVlIDw9IDAuMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02OTg2LDM0ICs3MDA1
LDM0IEBAIGlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCiBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlLCBpbnQqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKIHsKICAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
LSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Mt
PmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5pdFR5cGUgPSBGVW5rbm93bjsKICAgICAvLyBHZXQg
dGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlwZQotICAgIGlmICh2YWxpZFVuaXQoKmN1cnJlbnRW
YWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQorICAgIGlmICh2YWxpZGF0ZVVuaXQoZmly
c3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQogICAg
ICAgICB1bml0VHlwZSA9IEZJbnRlZ2VyOwotICAgIGVsc2UgaWYgKHZhbGlkVW5pdCgqY3VycmVu
dFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgZWxzZSBpZiAodmFsaWRhdGVV
bml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2Rl
KSkKICAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKICAgICBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoKmN1
cnJlbnRWYWx1ZSk7CisgICAgY29sb3JBcnJheVswXSA9IGNvbG9ySW50RnJvbVZhbHVlKGZpcnN0
QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsr
KSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZh
bHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1
bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQg
IT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9
ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0g
YXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCB1bml0
VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJ
bnRGcm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xv
ckludEZyb21WYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgfQogICAgIGlmIChw
YXJzZUFscGhhKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYg
Y3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3Bl
cmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3Vt
ZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQu
aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVu
dFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZh
bHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RN
b2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZh
bHVlID0gcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUp
OworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24pOwogICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51
bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwKICAgICAg
ICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRpb24gYWNyb3NzIGFsbCAyNTYgdmFsdWVzLgog
ICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1heDxkb3VibGU+
KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91YmxlVmFsdWUpKSAqIG5leHRhZnRlcigyNTYuMCwg
MC4wKSk7CkBAIC03MDI5LDI5ICs3MDQ4LDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
UGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGludCogY29sb3JBcnJheSwgYm9vCiBi
b29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwg
ZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFs
dWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5jdXJyZW50KCkpOwog
ICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZh
bHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pdChmaXJz
dEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIG5vcm1hbGl6ZSB0aGUgSHVlIHZhbHVlIGFuZCBjaGFu
Z2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFuZCAxLjAKLSAgICBjb2xvckFycmF5WzBdID0gKCgoc3Rh
dGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUoKmN1cnJlbnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENh
bGNWYWx1ZSkpICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwLjA7CisgICAgY29sb3JBcnJheVsw
XSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKGZpcnN0QXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24pKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOwogICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQYXJzZXJWYWx1
ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChvcGVyYXRv
ckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJn
dW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3Vy
cmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAg
ICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQsIENT
U1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFy
cmF5W2ldID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEwMCwgcGFyc2Vk
RG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSkgLyAxMDAuMDsg
Ly8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKKyAgICAgICAgY29sb3JBcnJh
eVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAsIHBhcnNlZERv
dWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSAvIDEwMC4wOyAvLyBuZWVkcyB0byBiZSB2
YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAogICAgIH0KICAgICBpZiAocGFyc2VBbHBoYSkgewotICAg
ICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFs
dWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZh
bHVlICE9ICcsJykKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAq
YXJncy0+bmV4dCgpOworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5l
eHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+
KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWUpKSk7CisgICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxk
b3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKSkpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxNjMsOSArNzE4
Miw5IEBAIHN0cnVjdCBTaGFkb3dQYXJzZUNvbnRleHQgewogICAgICAgICBhbGxvd1N0eWxlID0g
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlCb3hTaGFkb3c7CiAgICAgfQogCi0gICAgdm9pZCBjb21taXRMZW5ndGgoQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQgY29tbWl0TGVuZ3RoKENTU1BhcnNlcjo6VmFsdWVX
aXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogICAgIHsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgIGlmIChhbGxvd1gpIHsKICAgICAg
ICAgICAgIHggPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CkBAIC03MjQzLDYgKzcyNjIsNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJz
ZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgIFNoYWRvd1BhcnNlQ29udGV4dCBjb250ZXh0
KHByb3BJZCwgKnRoaXMpOwogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKICAgICB3aGlsZSAo
KHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKSkpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAgICAgLy8gQ2hlY2sgZm9y
IGEgY29tbWEgYnJlYWsgZmlyc3QuCiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aVZhbHVlICE9ICcs
JyB8fCAhY29udGV4dC5hbGxvd0JyZWFrKSB7CkBAIC03MjU1LDIyICs3Mjc1LDIyIEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBDCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZ29vZC4gIENvbW1pdCBpdC4KICAgICAgICAgICAgIGNv
bnRleHQuY29tbWl0VmFsdWUoKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWxpZFVuaXQoKnZhbHVl
LCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKICAg
ICAgICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3QgZ2V0IG9uZS4gSW52
YWxpZC4KICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAgICAvLyBCbHVyIHJhZGl1cyBtdXN0
IGJlIG5vbi1uZWdhdGl2ZS4KLSAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAh
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAg
ICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQSBsZW5ndGggaXMgYWxs
b3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBhbmQgYWRkIGl0LgotICAgICAgICAgICAg
Y29udGV4dC5jb21taXRMZW5ndGgoKnZhbHVlKTsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
TGVuZ3RoKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVJbnNldCkgewogICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFsbG93U3R5
bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgIGNvbnRl
eHQuY29tbWl0U3R5bGUoKnZhbHVlKTsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0U3R5bGUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
VGhlIG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4K
ICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkQ29sb3I7CkBAIC03
MzExLDM0ICs3MzMxLDM1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIC8vIGJveC1yZWZsZWN0OiA8ZGlyZWN0
aW9uPiA8b2Zmc2V0PiA8bWFzaz4KIAogICAgIC8vIERpcmVjdGlvbiBjb21lcyBmaXJzdC4KLSAg
ICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
KyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlyZWN0aW9uOwotICAgIHN3aXRjaCAoY3VycmVu
dFZhbHVlLT5pZCkgeworICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVBYm92ZToKICAgICAgICAgY2FzZSBDU1NWYWx1ZUJlbG93OgogICAgICAgICBjYXNlIENT
U1ZhbHVlTGVmdDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZVJpZ2h0OgotICAgICAgICAgICAgZGly
ZWN0aW9uID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1
ZS0+aWQpOworICAgICAgICAgICAgZGlyZWN0aW9uID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBUaGUgb2Zm
c2V0IGNvbWVzIG5leHQuCi0gICAgY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBvZmZzZXQ7Ci0gICAgaWYgKCFjdXJyZW50VmFsdWUpCisgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgb2Zmc2V0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KCpj
dXJyZW50VmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRh
dGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvZmZzZXQgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgfQogCiAgICAgLy8gTm93
IGZvciB0aGUgbWFzay4KICAgICBSZWZQdHI8Q1NTVmFsdWU+IG1hc2s7Ci0gICAgY3VycmVudFZh
bHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlKSB7CisgICAg
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIGlmICh2YWx1ZSkgewogICAgICAgICBp
ZiAoIXBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCBtYXNrKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC03MzU4LDIwICs3Mzc5LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCkKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZsZXhCYXNpczsKIAogICAgIHdoaWxlIChDU1NQYXJzZXJW
YWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRVbml0
KCphcmd1bWVudCwgRk51bWJlciB8IEZOb25OZWcpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2
YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkg
ewogICAgICAgICAgICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAg
ICAgZmxleEdyb3cgPSBwYXJzZWREb3VibGUoKmFyZ3VtZW50LCBSZWxlYXNlUGFyc2VkQ2FsY1Zh
bHVlKTsKKyAgICAgICAgICAgICAgICBmbGV4R3JvdyA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0
VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleFNocmluayA9IHBhcnNlZERvdWJsZSgqYXJndW1l
bnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoIXBhcnNl
ZERvdWJsZSgqYXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgZmxleFNocmluayA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7
CisgICAgICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAw
IChzYW5zIHVuaXRzKSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFs
cmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAgICAgICAgZmxleEJhc2lzID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgMyBudW1iZXJzIHdp
dGhvdXQgdW5pdHMgaWYgdGhlIGxhc3QgdmFsdWUgaXMgMC4gRS5nLiwgZmxleDoxIDEgMSBpcyBp
bnZhbGlkLgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcp
KSkKLSAgICAgICAgICAgIGZsZXhCYXNpcyA9IHBhcnNlVmFsaWRQcmltaXRpdmUoYXJndW1lbnQt
PmlkLCAqYXJndW1lbnQpOworICAgICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5l
ZykpKQorICAgICAgICAgICAgZmxleEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkLCBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gTm90IGEgdmFsaWQgYXJnIGZvciBmbGV4Lgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzY0MCw5ICs3NjYyLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgYWxsb3dGaW5hbENvbW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGaW5hbENv
bW1pdDsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3Rv
cC5nZXQoKTsgfQogCi0gICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQorICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24m
IHZhbHVlV2l0aENhbGN1bGF0aW9uKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZl
VmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pOwogICAgICAgICBpZiAoIW1fdG9wKQogICAgICAgICAgICAgbV90b3AgPSBwcmlt
aXRpdmVWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVsc2UgaWYgKCFtX3JpZ2h0KQpAQCAtNzcw
Nyw5ICs3NzI5LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlU2xpY2UoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NCb3JkZXJJbWFnCiAgICAgQm9yZGVySW1hZ2VT
bGljZVBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CiAg
ICAgICAgIC8vIEZJWE1FIGNhbGMoKSBodHRwOi8vd2Via2l0Lm9yZy9iLzE2NjYyIDogY2FsYyBp
cyBwYXJzZWQgYnV0IHZhbHVlcyBhcmUgbm90IGNyZWF0ZWQgeWV0LgotICAgICAgICBpZiAoY29u
dGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9uKCp2YWx1ZSkgJiYgdmFsaWRVbml0
KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcigqdmFsdWUpOworICAgICAgICBpZiAo
Y29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0
aW9uKSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5v
bk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICAgICAgY29udGV4dC5j
b21taXROdW1iZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGNv
bnRleHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRmlsbCkKICAgICAgICAg
ICAgIGNvbnRleHQuY29tbWl0RmlsbCgpOwogICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQo
KSkgewpAQCAtNzc1MSwxMyArNzc3NCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0ZpbmFs
Q29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAKLSAgICB2
b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgdm9pZCBjb21taXRO
dW1iZXIoQ1NTUGFyc2VyOjpWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRp
b24pCiAgICAgewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZh
bHVlOwotICAgICAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
cHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUuaWQpOworICAgICAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZCA9PSBD
U1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgICAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOwogCiAgICAgICAgIGlmICghbV90b3ApCiAgICAgICAgICAgICBtX3RvcCA9IHByaW1p
dGl2ZVZhbHVlLnJlbGVhc2UoKTsKQEAgLTc4MTksMTAgKzc4NDIsMTEgQEAgcHJpdmF0ZToKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUXVhZChVbml0cyB2YWxpZFVuaXRzLCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCiB7CiAgICAgQm9yZGVySW1hZ2VRdWFkUGFy
c2VDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFs
dWU7Ci0gICAgd2hpbGUgKChjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkg
ewotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICh2YWxpZFVuaXQoKmN1cnJl
bnRWYWx1ZSwgdmFsaWRVbml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgY3VycmVudFZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUF1dG8pKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcigqY3Vy
cmVudFZhbHVlKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CisgICAgd2hpbGUgKCh2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmIChjb250ZXh0LmFs
bG93TnVtYmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRV
bml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAg
ICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgewogICAgICAgICAgICAgLy8gSWYgd2Un
cmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTc4NzksMTAgKzc5MDMsMTEgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQm9yZGVyUmFkaXVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKGkgLSBpbmRleEFmdGVyU2xhc2ggPj0gNCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50IHwgRk5vbk5lZykpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENh
bGN1bGF0aW9uKHZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgIGlmICghaW5kZXhBZnRlclNsYXNoKSB7CiAgICAg
ICAgICAgICByYWRpaVswXVtpXSA9IHJhZGl1czsKQEAgLTc5MjUsMjAgKzc5NTAsMjEgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0UmF0aW8oYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKG51
bSAhPSAzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZSYgbHZh
bHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDApOwogICAgIENTU1BhcnNlclZhbHVlJiBvcCA9
ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgxKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgcnZhbHVlID0g
Km1fdmFsdWVMaXN0LT52YWx1ZUF0KDIpOwogCiAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJh
dG9yKG9wKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCF2YWxpZFVuaXQobHZh
bHVlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkVW5pdChydmFsdWUsIEZOdW1iZXIgfCBG
Tm9uTmVnKSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBsdmFsdWVXaXRoQ2FsY3VsYXRpb24o
Km1fdmFsdWVMaXN0LT52YWx1ZUF0KDApKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBydmFs
dWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDIpKTsKKyAgICBpZiAoIXZh
bGlkYXRlVW5pdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSB8fCAh
dmFsaWRhdGVVbml0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWx2YWx1ZS5mVmFsdWUgfHwgIXJ2YWx1
ZS5mVmFsdWUpCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2
YWx1ZXMuCisgICAgaWYgKCFsdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUgfHwg
IXJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NT
QXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobHZhbHVlLmZW
YWx1ZSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocnZhbHVlLmZWYWx1ZSkpLCBpbXBvcnRhbnQp
OworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW8sIENTU0FzcGVj
dFJhdGlvVmFsdWU6OmNyZWF0ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGx2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocnZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSksIGltcG9ydGFudCk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTgxMzIsOSArODE1OCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXBy
ZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwog
ICAgIC8vIEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgYSBudW1lcmlj
IHJhZGl1cy4KICAgICBpZiAoZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFk
aWVudCkgewogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KICAgICAgICAgaWYg
KCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFk
aWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBkb3duY2FzdDxDU1NS
YWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAogICAgICAgICAvLyBD
b21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVzLgogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKQEAgLTgxNjksOSArODE5NywxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNh
dGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRpb24gdmFs
dWVzLgogICAgICAgICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRp
dXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAg
ICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRS
YWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
KSk7CiAgICAgfQogCiAgICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3Rv
cHMgKDAgb3IgbW9yZSkuCkBAIC04MjQxLDExICs4MjcxLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgUmVmCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwog
ICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwogCiAgICAgYm9v
bCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgotICAgIGlmICh2
YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgIHJl
c3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOwor
ICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NT
U3RyaWN0TW9kZSkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAogICAgICAgICBhcmdzLT5u
ZXh0KCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKQEAgLTgzODIsOCArODQxMyw5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2
ZXJ0aWNhbFNpemU7CiAKICAgICBpZiAoIXNoYXBlVmFsdWUgJiYgIXNpemVWYWx1ZSkgewotICAg
ICAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAg
ICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFy
Z3VtZW50KTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gaFNpemVXaXRoQ2FsY3VsYXRp
b24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdChoU2l6ZVdpdGhDYWxjdWxh
dGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAgaG9yaXpvbnRhbFNpemUg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoaFNpemVXaXRoQ2FsY3VsYXRpb24pOwogICAg
ICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzOTEsOCArODQyMyw5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkxlbmd0aCB8
IEZQZXJjZW50KSkgewotICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZT
aXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQo
dlNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAg
IHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxj
dWxhdGlvbik7CiAKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudCkKQEAgLTg0MjMsMjggKzg0NTYsMjkgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDU1NWYWwKICAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVu
dCgpOwotICAgIGlmICghYXJndW1lbnQpCisgICAgaWYgKCFhcmdzLT5jdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CisKICAgICBib29sIGV4cGVjdENv
bW1hID0gZmFsc2U7CiAgICAgLy8gTG9vayBmb3IgYW5nbGUuCi0gICAgaWYgKHZhbGlkVW5pdCgq
YXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRB
bmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CisgICAgaWYgKHZh
bGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmlj
dE1vZGUpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAogICAgICAgICBhcmdzLT5u
ZXh0KCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3Vt
ZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UoKmFyZ3VtZW50LCAidG8iKSkgeworICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1bWVudFdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVO
VCAmJiBlcXVhbElnbm9yaW5nQ2FzZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCAidG8i
KSkgewogICAgICAgICAvLyB0byBbIFtsZWZ0IHwgcmlnaHRdIHx8IFt0b3AgfCBib3R0b21dIF0K
LSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQp
CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0QXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Cisg
ICAgICAgIGlmICghbmV4dEFyZ3VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZW5kWCwgZW5kWTsKICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbjsKICAgICAgICAgYm9vbCBpc0hvcml6b250
YWwgPSBmYWxzZTsKIAotICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCph
cmd1bWVudCwgaXNIb3Jpem9udGFsKTsKKyAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRl
S2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOwogICAgICAgICBpZiAoIWxvY2F0
aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04NDUzLDExICs4NDg3LDExIEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVuZFkg
PSBsb2NhdGlvbjsKIAotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAg
aWYgKCFhcmd1bWVudCkKKyAgICAgICAgbmV4dEFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAg
ICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCphcmd1bWVudCwgaXNIb3Jpem9u
dGFsKTsKKyAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqbmV4dEFyZ3Vt
ZW50LCBpc0hvcml6b250YWwpOwogICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICBpZiAoZW5kWCkKQEAgLTg1MTEs
NiArODU0NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgLy8gWyBlbGxpcHNlIHx8
IFsgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gXXsyfSBdIHwKICAgICAvLyBbIFsgY2lyY2xlIHwg
ZWxsaXBzZV0gfHwgPHNpemUta2V5d29yZD4gXQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
KytpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uKCphcmd1bWVudCk7CiAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICBib29sIGJhZElkZW50ID0gZmFsc2U7
CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50LT5pZCkgewpAQCAtODUzOCwxOCArODU3Mywx
OSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVu
Z3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CiAKICAgICAgICAgICAg
IGlmIChzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKIAogICAgICAg
ICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKHZhbGlk
VW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICB2
ZXJ0aWNhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1
bWVudCk7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZTaXplV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZTaXplV2l0aENhbGN1bGF0aW9uKTsKICAgICAg
ICAgICAgICAgICArK2k7CiAgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKQEAgLTg2MTMsMzggKzg2NDksMzkgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRD
b2xvclN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmFkaWVudFZhbHVl
JiBncmFkaWVudCwgYm9vbCBleHBlY3RDb21tYSkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3Vy
cmVudFZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpOwogICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzTWlkcG9p
bnQgPSB0cnVlOwogCiAgICAgLy8gTm93IGxvb2sgZm9yIGNvbG9yIHN0b3BzLgotICAgIHdoaWxl
IChjdXJyZW50VmFsdWUpIHsKKyAgICB3aGlsZSAodmFsdWUpIHsKICAgICAgICAgLy8gTG9vayBm
b3IgdGhlIGNvbW1hIGJlZm9yZSB0aGUgbmV4dCBzdG9wLgogICAgICAgICBpZiAoZXhwZWN0Q29t
bWEpIHsKLSAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAgICAg
ICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlTGlzdC5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWN1cnJlbnRWYWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQo
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gPGNvbG9yLXN0b3A+ID0gPGNvbG9yPiBbIDxwZXJj
ZW50YWdlPiB8IDxsZW5ndGg+IF0/CiAgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7
Ci0gICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZCgqdGhp
cywgKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3JhZGllbnRD
b2xvck9yS2V5d29yZCgqdGhpcywgKnZhbHVlKTsKICAgICAgICAgaWYgKCFzdG9wLm1fY29sb3Ip
IHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0b3BXYXNNaWRwb2ludCkgLy8gMiBtaWRwb2lu
dHMgaW4gYSByb3cgaXMgbm90IGFsbG93ZWQuIFRoaXMgYWxzbyBjYXRjaGVzIHN0YXJ0aW5nIHdp
dGggYSBtaWRwb2ludC4KICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIHN0b3AuaXNNaWRwb2ludCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Y3VycmVudFZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKyAgICAgICAgICAgIHZhbHVlID0gdmFs
dWVMaXN0Lm5leHQoKTsKIAogICAgICAgICBwcmV2aW91c1N0b3BXYXNNaWRwb2ludCA9IHN0b3Au
aXNNaWRwb2ludDsKIAotICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAg
ICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
KmN1cnJlbnRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWVMaXN0
Lm5leHQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICAgICAgaWYgKHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewor
ICAgICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1
ZUxpc3QubmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wLmlzTWlkcG9pbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC04ODQ1LDE0ICs4ODgy
LDE1IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VJbWFnZVJlc29sdXRp
b24oKQogCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKICAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFs
dWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAgICAgaWYgKCFoYXZlRnJvbUltYWdlICYm
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZyb21JbWFnZSkgewogICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAg
ICAgICAgICAgIGhhdmVGcm9tSW1hZ2UgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKCFoYXZl
U25hcCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbmFwKSB7CiAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwog
ICAgICAgICAgICAgaGF2ZVNuYXAgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFoYXZlUmVz
b2x1dGlvbiAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUmVzb2x1dGlvbiB8IEZOb25OZWcpICYmIHZh
bHVlLT5mVmFsdWUgPiAwKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1
dGlvbiAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZSZXNvbHV0aW9uIHwg
Rk5vbk5lZykgJiYgdmFsdWUtPmZWYWx1ZSA+IDApIHsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAg
ICAgICAgICAgIGhhdmVSZXNvbHV0aW9uID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkyMjQsMjkgKzkyNjIsMzAgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybVZhbHVlKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSkKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CiAg
ICAgdW5zaWduZWQgYXJnTnVtYmVyID0gMDsKICAgICB3aGlsZSAoYXJndW1lbnQpIHsKKyAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50
KTsKICAgICAgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0ID0gaW5mby51bml0KCk7CiAKICAgICAg
ICAgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRy
YW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMykgewogICAgICAgICAgICAgLy8gNHRo
IHBhcmFtIG9mIHJvdGF0ZTNkKCkgaXMgYW4gYW5nbGUgcmF0aGVyIHRoYW4gYSBiYXJlIG51bWJl
ciwgdmFsaWRhdGUgaXQgYXMgc3VjaAotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3Vt
ZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0
aW9uICYmIGFyZ051bWJlciA9PSAyKSB7CiAgICAgICAgICAgICAvLyAzcmQgcGFyYW0gb2YgdHJh
bnNsYXRlM2QoKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0gICAgICAgICAgICBpZiAoIXZhbGlk
VW5pdCgqYXJndW1lbnQsIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYg
KCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIENTU1N0cmlj
dE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2Ug
aWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJh
bnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJh
bSBvZiB0cmFuc2xhdGVaKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYg
KCF2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3Bl
Y3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewogICAgICAgICAgICAgLy8g
MXN0IHBhcmFtIG9mIHBlcnNwZWN0aXZlKCkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIg
KGRlcHJlY2F0ZWQpIG9yIGxlbmd0aC4KLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KCphcmd1
bWVudCwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
IHwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50LCB1
bml0LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVVbml0KGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCB1bml0LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJl
bnQgdHJhbnNmb3JtIG9wZXJhdGlvbi4KLSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KSk7CisgICAgICAgIHRyYW5zZm9y
bVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAg
IGlmICghYXJndW1lbnQpCkBAIC05MzE2LDIxICs5MzU1LDIyIEBAIFBhc3NSZWZQdHI8V2ViS2l0
Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENT
U1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYXJncy5z
aXplKCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICphcmdzLmN1cnJl
bnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRlBlcmNl
bnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7CisgICAgICAg
ICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgYW1vdW50
ID0gdmFsdWUuZlZhbHVlOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFu
ZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBTYXR1cmF0ZSBhbmQgQ29udHJhc3QgYWxsb3cgdmFsdWVzIG92ZXIgMTAwJS4KICAg
ICAgICAgICAgIGlmIChmaWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0
ZUZpbHRlck9wZXJhdGlvbgogICAgICAgICAgICAgICAgICYmIGZpbHRlclR5cGUgIT0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgZG91YmxlIG1heEFsbG93ZWQgPSB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSA/IDEwMC4wIDogMS4wOworICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhB
bGxvd2VkID0gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDEwMC4wIDogMS4wOwogICAgICAgICAgICAgICAg
IGlmIChhbW91bnQgPiBtYXhBbGxvd2VkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1
ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGFtb3VudCwgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4oYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0KSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNDAs
MTEgKzkzODAsMTIgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKmFyZ3MuY3VycmVudCgpOwotICAgICAgICAgICAgaWYgKCF2
YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJn
cy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodmFsdWUuZlZhbHVlLCBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0KSkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAg
ICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzPihhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQp
KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTM1NCwxMSArOTM5NSwx
MSBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVp
bHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIENTU1Bh
cnNlclZhbHVlJiBhcmd1bWVudCA9ICphcmdzLmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmICgh
dmFsaWRVbml0KGFyZ3VtZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVu
dCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50KSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+
YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bikpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNjgsMTEgKzk0MDks
MTEgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgYXJndW1lbnQgPSAqYXJncy5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkVW5pdChhcmd1bWVudCwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQor
ICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5h
cHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50KSk7CisgICAgICAgICAg
ICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTk1NjYsOCArOTYwNyw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpbihD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
T3JpZ2luWjogewotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSwgRkxlbmd0aCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgICAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAgICAgaWYgKHZhbHVlKQogICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTk4MjMsOCArOTg2NSw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VU
ZXh0SW5kZW50KCkKIAogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7CiAgICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIGlmICghaGFzTGVuZ3RoT3JQ
ZXJjZW50YWdlICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVl
KSk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2
YWx1ZSk7CisgICAgICAgIGlmICghaGFzTGVuZ3RoT3JQZXJjZW50YWdlICYmIHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbikpOwogICAgICAgICAgICAgaGFzTGVuZ3RoT3JQZXJjZW50YWdlID0gdHJ1ZTsKICAg
ICAgICAgfQogI2lmIEVOQUJMRShDU1MzX1RFWFQpCkBAIC0xMDAwMCwyMSArMTAwNDMsMTUgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJh
bmdlKQorUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdl
KQogewogICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVlKSk7CiAgICAgCiAgICAgQ1NTUGFy
c2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYg
KCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBBU1NFUlQoIW1fcGFyc2VkQ2FsY3VsYXRpb24pOwotICAg
IG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgKmFyZ3MsIHJhbmdlKTsKLSAgICAKLSAgICBpZiAoIW1fcGFyc2VkQ2FsY3VsYXRp
b24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWUuZnVuY3Rpb24tPm5hbWUsICphcmdzLCBy
YW5nZSk7CiB9CiAKICNkZWZpbmUgRU5EX1RPS0VOIDAKQEAgLTEyMjA4LDExICsxMjI0NSwxMiBA
QCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxl
KCkKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQorICAgIGlmICghbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWVJ
RCBpZCA9IHZhbHVlLT5pZDsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisKKyAgICBDU1NWYWx1ZUlEIGlkID0g
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZl
ID0gZmFsc2U7CiAKICAgICBzd2l0Y2ggKHByb3BJZCkgewpAQCAtMTIyMjMsNyArMTIyNjEsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBp
ZCA9PSBDU1NWYWx1ZURldmljZVdpZHRoIHx8IGlkID09IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQog
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6
IC8vIHNob3J0aGFuZAogICAgICAgICByZXR1cm4gcGFyc2VWaWV3cG9ydFNob3J0aGFuZChwcm9w
SWQsIENTU1Byb3BlcnR5TWluV2lkdGgsIENTU1Byb3BlcnR5TWF4V2lkdGgsIGltcG9ydGFudCk7
CkBAIC0xMjIzNSw3ICsxMjI3Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENTU1Byb3BlcnR5VXNlclpvb206IC8vIHpvb20gfCBmaXhlZAogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVab29tIHx8IGlkID09IENTU1ZhbHVlRml4ZWQpCkBAIC0xMjI1MCw3ICsxMjI4
OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRW
YWx1ZTsKICAgICBpZiAodmFsaWRQcmltaXRpdmUpIHsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZVZhbGlkUHJpbWl0aXZlKGlkLCAqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IHBh
cnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAyOTg4
YTZhMWM5NjVhOTI2MDE5ZTdjODQ4MGNkNGVhN2VlOWJhN2Q4Li5hZDBkNDQ1MjM2YTVhZTE4MjQ0
YWRiMWE2MzZlZTkzNzA0YTc2NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC04MCw2ICs4
MCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIEdlbmVyYWxTeW50YXhFcnJvcgogICAgIH07CiAKKyAg
ICBjbGFzcyBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBleHBs
aWNpdCBWYWx1ZVdpdGhDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCisgICAgICAg
ICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsgfQorCisgICAgICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgb3BlcmF0b3Ig
Q1NTUGFyc2VyVmFsdWUmKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgICAgIENTU0NhbGNW
YWx1ZSogY2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NhbGN1bGF0aW9uLmdldCgpOyB9
CisgICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVmUHRyPENTU0NhbGNWYWx1ZT4mJiBjYWxj
dWxhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaXNDYWxjdWxhdGlvbihtX3ZhbHVlKTsK
KyAgICAgICAgICAgIG1fY2FsY3VsYXRpb24gPSBjYWxjdWxhdGlvbjsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG1fdmFsdWU7CisgICAgICAgIFJl
ZlB0cjxDU1NDYWxjVmFsdWU+IG1fY2FsY3VsYXRpb247CisgICAgfTsKKwogICAgIENTU1BhcnNl
cihjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAKICAgICB+Q1NTUGFyc2VyKCk7CkBAIC05Miw3
ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNv
bG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgYm9v
bCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50
Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFs
dWUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50LCBDU1NQYXJzZXJWYWx1ZSYp
OworICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUo
Q1NTVmFsdWVJRCBpZGVudCwgVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKICAgICBib29sIHBhcnNl
RGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KTsKICAgICBzdGF0aWMgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0cmluZyYpOwpA
QCAtMjgyLDcgKzMwMyw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZVRleHRJbmRlbnQoKTsKICAgICAKICAgICBib29sIHBhcnNlTGluZUJveENvbnRhaW4oYm9vbCBp
bXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYsIENh
bGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CisgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4g
cGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFs
dWVSYW5nZSk7CiAKICAgICBib29sIHBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7
CiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOwpAQCAt
NDA0LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNy
ZWF0ZVZpZXdwb3J0UnVsZSgpOwogI2VuZGlmCiAKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOworICAgIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKFZhbHVlV2l0aENh
bGN1bGF0aW9uJik7CiAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVT
dHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAgc3RhdGljIFVSTCBjb21wbGV0ZVVS
TChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAtNDk4LDgg
KzUxOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVm
aXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3Vm
Zml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpOwogICAgIGJvb2wgaW5TaG9ydGhhbmQoKSBjb25z
dCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0KIAotICAgIGJvb2wgdmFsaWRXaWR0aChD
U1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgdmFsaWRIZWlnaHQoQ1NTUGFyc2VyVmFsdWUmKTsK
KyAgICBib29sIHZhbGlkV2lkdGgoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKKyAgICBib29sIHZh
bGlkSGVpZ2h0KFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAKICAgICB2b2lkIGRlbGV0ZUZvbnRG
YWNlT25seVZhbHVlcygpOwogCkBAIC01NzgsOCArNTk5LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+
IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsKIAotICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1f
cGFyc2VkQ2FsY3VsYXRpb247Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJjZURhdGFM
aXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFjazsKIAogICAgIC8vIGRlZmluZXMgdW5pdHMgYWxs
b3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdApAQCAtNjEzLDE2
ICs2MzIsMTYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTG9nZ2luZ0Vycm9ycygpOwogICAgIHZv
aWQgbG9nRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlcik7CiAKLSAg
ICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpOworICAgIGJvb2wgdmFsaWRhdGVDYWxjdWxhdGlvblVuaXQoVmFsdWVXaXRo
Q2FsY3VsYXRpb24mLCBVbml0cyk7CiAKICAgICBib29sIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFs
dWVzKENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCi0gICAgaW5saW5l
IGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBS
ZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNl
UGFyc2VkQ2FsY1ZhbHVlKSB7IHJldHVybiB2YWxpZFVuaXQodmFsdWUsIHVuaXRmbGFncywgbV9j
b250ZXh0Lm1vZGUsIHJlbGVhc2VDYWxjKTsgfQotICAgIGJvb2wgdmFsaWRVbml0KENTU1BhcnNl
clZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1vZGUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25k
aXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGlu
bGluZSBib29sIHZhbGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWUsIFVuaXRz
IHVuaXRGbGFncykgeyByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlLCB1bml0RmxhZ3MsIG1fY29u
dGV4dC5tb2RlKTsgfQorICAgIGJvb2wgdmFsaWRhdGVVbml0KFZhbHVlV2l0aENhbGN1bGF0aW9u
JiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwogCiAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlUXVh
ZChVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBjb2xvckludEZy
b21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGRvdWJsZSBwYXJzZWREb3VibGUoQ1NTUGFy
c2VyVmFsdWUmLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0g
RG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUo
VmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKKyAgICBkb3VibGUgcGFyc2VkRG91YmxlKFZhbHVlV2l0
aENhbGN1bGF0aW9uJik7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlv
bkluZm87CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRlck9wZXJhdGlvbkluZm87CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NQYXJzZXIuY3BwCmluZGV4IDg0NzlhZGQ0MGMyZjU3ZGMxNmIyNzYwNWQ5ZjdmMjE0
YTNkNTk3MWQuLmRiZjkyYzQ2YmE2NTllMWQ4YjdjNjFlOWVkZjMxYjQxMDYzMjlhMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQorICAgIGlmICghbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsK
IAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZS0+aWQ7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAKICAgICBib29sIHZhbGlkX3ByaW1pdGl2
ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CkBAIC02Miw3ICs2
Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgaWQgPj0gQ1NTVmFsdWVTdXBlcikKICAgICAg
ICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCwg
U1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmli
dXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eURvbWluYW50
QmFzZWxpbmU6CkBAIC04Nyw4ICs4Nyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3Bl
cnR5TWFzazoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAg
aWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+
IHwgaW5oZXJpdAotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
TnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIHZhbGlkX3ByaW1p
dGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25O
ZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VMaW5lam9pbjogICAvLyBtaXRlciB8IHJvdW5kIHwgYmV2ZWwgfCBpbmhlcml0
CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxs
T3BhY2l0eToKICAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNpdHk6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpKTsK
KyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTaGFwZVJlbmRlcmluZzoKQEAgLTE2
Nyw4ICsxNjcsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiAvLyA8YW5nbGU+IChyZXN0
cmljdGVkIHRvIF9kZWdfIHBlciBTVkcgMS4xIHNwZWMpIHwgaW5oZXJpdAotICAgICAgICBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRyk7CisgICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Cisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVH
KTsKIAogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CkBAIC0xODksMTYgKzE4OSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7CiAg
ICAgICAgICAgICBlbHNlIGlmICgoaWQgPj0gQ1NTVmFsdWVBY3RpdmVib3JkZXIgJiYgaWQgPD0g
Q1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ29sb3IoUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5zeXN0ZW1Db2xvcihpZCkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFy
ZW50OwogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLCBjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6
OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlLT5zdHJpbmcsIGMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kQ29sb3IodmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIGMpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmROb25l
KHZhbHVlLT5zdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBT
VkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0
cmluZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFs
dWUpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVS
SSh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQ
YWludDo6Y3JlYXRlVVJJKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdQ
YWludCgpOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJv
cGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVlQXF1YSAmJiBp
ZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8CiAgICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUFs
aWNlYmx1ZSAmJiBpZCA8PSBDU1NWYWx1ZVllbGxvd2dyZWVuKSkKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUZyb21TdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3RyaW5nKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NT
VmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpj
cmVhdGVDdXJyZW50Q29sb3IoKTsKICAgICAgICAgZWxzZSAvLyBUT0RPIDogc3ZnY29sb3IgKGlj
Y0NvbG9yKQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VXaWR0aDogICAgICAgICAvLyA8bGVuZ3RoPiB8IGluaGVyaXQKICAgICBjYXNl
IENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldDoKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsK
KyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxk
YXNoYXJyYXk+IHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQpAQCAt
MjUwLDE1ICsyNTAsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IGlkID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFs
aWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlDbGlwUGF0aDogICAgLy8gPHVyaT4gfCBub25lIHwgaW5oZXJpdAogICAgIGNhc2UgQ1NT
UHJvcGVydHlGaWx0ZXI6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KTsKICAgICAgICAg
ICAgIGlmIChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwogICAgICAgICB9CkBAIC0zMDYsNyArMzA2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZH
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NT
UHJvcGVydHlSeToKICAgICBjYXNlIENTU1Byb3BlcnR5WDoKICAgICBjYXNlIENTU1Byb3BlcnR5
WToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiB5b3UgY3Jhc2ggaGVy
ZSwgaXQncyBiZWNhdXNlIHlvdSBhZGRlZCBhIGNzcyBwcm9wZXJ0eSBhbmQgYXJlIG5vdCBoYW5k
bGluZyBpdApAQCAtMzE4LDE0ICszMTgsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGlmICh2YWxpZF9w
cmltaXRpdmUpIHsKICAgICAgICAgaWYgKGlkICE9IDApCiAgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkKTsKLSAgICAgICAgZWxz
ZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0
cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAg
ICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIg
JiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxz
ZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWly
ayh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgIGlm
IChpc0NhbGN1bGF0aW9uKCp2YWx1ZSkpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJzZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAg
ICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcs
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQorICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykg
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykK
KyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93
aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAgICAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVX
aXRoQ2FsY3VsYXRpb24pKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpOwogICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICht
X3ZhbHVlTGlzdC0+Y3VycmVudCgpICYmICFpblNob3J0aGFuZCgpKSkKQEAgLTM0MSw5ICszNDEs
MTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hh
cnJheSgpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKICAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAgd2hpbGUgKHZhbHVlKSB7
Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBpZiAoIXZhbGlk
X3ByaW1pdGl2ZSkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgogICAgICAgICBpZiAodmFsdWUt
PmlkICE9IDApCiAgICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19LSFopCkBAIC0zNTMsNyArMzU1LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiAgICAgICAgICAgICB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQogICAgIGlmICghdmFsaWRfcHJpbWl0
aXZlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIHJldC5yZWxlYXNlKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243609</attachid>
            <date>2014-12-20 14:02:52 -0800</date>
            <delta_ts>2014-12-20 22:23:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141220140252.patch</filename>
            <type>text/plain</type>
            <size>121236</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE0Mzk5YjU5ZWYyNjhj
Y2IyOTAxNWI2MmE2ZDU2MTgxNGZiZTUyMy4uZDgxZjhkZWVmODI4OGNhZjA0OGRhZGExMWRhZTcw
ZWM5ZmJiNTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTEyLTA4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiBlcnJvci1w
cm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGluIENTU1BhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgR2V0IHJpZCBv
ZiBlcnJvci1wcm9uZSBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIGFyZ3VtZW50IGlu
CisgICAgICAgIENTU1BhcnNlciB0aGF0IGRldGVybWluZXMgdGhlIHRoZSBtX3BhcnNlZENhbGN1
bGF0aW9uIG1lbWJlciBzaG91bGQKKyAgICAgICAgYmUgcmVsZWFzZWQuCisKKyAgICAgICAgSW5z
dGVhZCwgaW50cm9kdWNlIGEgbmV3IFZhbHVlV2l0aENhbGN1bGF0aW9uIHR5cGUgd2hpY2ggd3Jh
cHMgYQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSBhbmQgYW4gb3B0aW9uYWwgcGFyc2VkIGNhbGN1
bGF0aW9uIHZhbHVlLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIHBhcnNlZCBjYWxjdWxhdGlvbiB2
YWx1ZSBpcyBub3cgYXNzb2NpYXRlZCB3aXRoIGl0cyBDU1NQYXJzZXJWYWx1ZS4KKyAgICAgICAg
VGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byB1c2UgYSBwYXJzZWQgY2FsY3VsYXRpb24g
dmFsdWUgZm9yIHRoZQorICAgICAgICB3cm9uZyBDU1NQYXJzZXJWYWx1ZS4gVGhlIEFQSSBpcyBh
bHNvIGVhc2llciB0byB1c2UgYXMgZGV2ZWxvcGVycyBubworICAgICAgICBsb25nZXIgbmVlZCB0
byBleHBsaWNpdGx5IGluZGljYXRlIGlmIHRoZSBjYWxjdWxhdGlvbiB2YWx1ZSBzaG91bGQgYmUK
KyAgICAgICAgcmVsZWFzZWQgb3Igbm90LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gd2Vi
LWJlaGF2aW9yIGNoYW5nZS4KKwogMjAxNC0xMi0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtTVkcgLT4gT1RGIENvbnZlcnRlcl0gTWFrZSBw
bGFjZWhvbGRlcnMgbW9yZSByb2J1c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNTJm
YjcyMmJiMjdhYzIwZWU1YTE1YThjOTQ2ODI4NDc5OTRhZmYxOS4uMTBiNjA3ZWY2ZjZkNzMzMWFk
ZmNmNDg3MWM3YmI0MDM3MTg5ZWUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE1
ODIsODAgKzE1ODIsODIgQEAgVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JiB1cmwpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKIH0K
IAotYm9vbCBDU1NQYXJzZXI6OnZhbGlkQ2FsY3VsYXRpb25Vbml0KENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0aW9uIHJl
bGVhc2VDYWxjKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVl
V2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgVW5pdHMgdW5pdEZsYWdzKQog
ewotICAgIGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0ZmxhZ3MgJiBGTm9uTmVnOworICAg
IGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1bml0RmxhZ3MgJiBGTm9uTmVnOwogCi0gICAgaWYg
KCFwYXJzZUNhbGN1bGF0aW9uKHZhbHVlLCBtdXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9u
UmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpKQorICAgIEFTU0VSVCghdmFs
dWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7CisgICAgUmVmUHRyPENTU0NhbGNWYWx1
ZT4gY2FsY3VsYXRpb24gPSBwYXJzZUNhbGN1bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uLCBt
dXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0
aW9uUmFuZ2VBbGwpOworICAgIGlmICghY2FsY3VsYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGJvb2wgYiA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9wYXJzZWRDYWxjdWxhdGlv
bi0+Y2F0ZWdvcnkoKSkgeworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAo
Y2FsY3VsYXRpb24tPmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIENhbGNOdW1iZXI6Ci0gICAgICAg
IGIgPSAodW5pdGZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdGZsYWdz
ICYgRkludGVnZXIpICYmIG1fcGFyc2VkQ2FsY3VsYXRpb24tPmlzSW50KCkpCi0gICAgICAgICAg
ICBiID0gdHJ1ZTsKLSAgICAgICAgaWYgKGIgJiYgbXVzdEJlTm9uTmVnYXRpdmUgJiYgbV9wYXJz
ZWRDYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQotICAgICAgICAgICAgYiA9IGZhbHNlOworICAg
ICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZOdW1iZXIpOworICAgICAgICBpZiAoIWlzVmFs
aWQgJiYgKHVuaXRGbGFncyAmIEZJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSkKKyAg
ICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBpZiAoaXNWYWxpZCAmJiBtdXN0QmVO
b25OZWdhdGl2ZSAmJiBjYWxjdWxhdGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICAgICAgaXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGNMZW5ndGg6Ci0gICAg
ICAgIGIgPSAodW5pdGZsYWdzICYgRkxlbmd0aCk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZs
YWdzICYgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY1BlcmNlbnQ6Ci0g
ICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlBlcmNlbnQpOwotICAgICAgICBpZiAoYiAmJiBtdXN0
QmVOb25OZWdhdGl2ZSAmJiBtX3BhcnNlZENhbGN1bGF0aW9uLT5pc05lZ2F0aXZlKCkpCi0gICAg
ICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRlBlcmNl
bnQpOworICAgICAgICBpZiAoaXNWYWxpZCAmJiBtdXN0QmVOb25OZWdhdGl2ZSAmJiBjYWxjdWxh
dGlvbi0+aXNOZWdhdGl2ZSgpKQorICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENhbGNQZXJjZW50TGVuZ3RoOgotICAgICAgICBiID0gKHVuaXRm
bGFncyAmIEZQZXJjZW50KSAmJiAodW5pdGZsYWdzICYgRkxlbmd0aCk7CisgICAgICAgIGlzVmFs
aWQgPSAodW5pdEZsYWdzICYgRlBlcmNlbnQpICYmICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGUGVyY2VudCkgJiYgKHVuaXRmbGFncyAmIEZOdW1iZXIpOworICAgICAgICBp
c1ZhbGlkID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KSAmJiAodW5pdEZsYWdzICYgRk51bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY0FuZ2xlOgotICAgICAgICBiID0gKHVuaXRm
bGFncyAmIEZBbmdsZSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkFuZ2xlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxjVGltZToKLSAgICAgICAgYiA9ICh1bml0Zmxh
Z3MgJiBGVGltZSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRlRpbWUpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENhbGNGcmVxdWVuY3k6Ci0gICAgICAgIGIgPSAodW5pdGZs
YWdzICYgRkZyZXF1ZW5jeSk7CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkZyZXF1
ZW5jeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsY090aGVyOgogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgaWYgKCFiIHx8IHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRDYWxj
VmFsdWUpCi0gICAgICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJldHVy
biBiOyAgICAKKyAgICBpZiAoaXNWYWxpZCkKKyAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24u
c2V0Q2FsY3VsYXRpb24oV1RGOjptb3ZlKGNhbGN1bGF0aW9uKSk7CisgICAgcmV0dXJuIGlzVmFs
aWQ7CiB9CiAKLWlubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1
ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK2lubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExl
c3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0RmxhZ3MsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICAvLyBRaXJrcyBtb2RlIGFuZCBzdmcgcHJlc2Vu
dGF0aW9uIGF0dHJpYnV0ZXMgYWNjZXB0IHVuaXQgbGVzcyB2YWx1ZXMuCi0gICAgcmV0dXJuICh1
bml0ZmxhZ3MgJiAoRkxlbmd0aCB8IEZBbmdsZSB8IEZUaW1lKSkgJiYgKCF2YWx1ZS5mVmFsdWUg
fHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZH
QXR0cmlidXRlTW9kZSk7CisgICAgcmV0dXJuICh1bml0RmxhZ3MgJiAoRkxlbmd0aCB8IEZBbmds
ZSB8IEZUaW1lKSkgJiYgKCF2YWx1ZS5mVmFsdWUgfHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWly
a3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSk7CiB9CiAKLWJvb2wg
Q1NTUGFyc2VyOjp2YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0Zmxh
Z3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNv
bmRpdGlvbiByZWxlYXNlQ2FsYykKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0ZVVuaXQoVmFsdWVX
aXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1
ZSkpCi0gICAgICAgIHJldHVybiB2YWxpZENhbGN1bGF0aW9uVW5pdCh2YWx1ZSwgdW5pdGZsYWdz
LCByZWxlYXNlQ2FsYyk7CisgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRp
b24pKQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDYWxjdWxhdGlvblVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIHVuaXRGbGFncyk7CiAgICAgICAgIAogICAgIGJvb2wgYiA9IGZhbHNlOwotICAg
IHN3aXRjaCAodmFsdWUudW5pdCkgeworICAgIHN3aXRjaCAodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS51bml0KSB7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjoK
LSAgICAgICAgYiA9ICh1bml0ZmxhZ3MgJiBGTnVtYmVyKTsKLSAgICAgICAgaWYgKCFiICYmIHNo
b3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKHZhbHVlLCB1bml0ZmxhZ3MsIGNzc1BhcnNlck1vZGUp
KSB7Ci0gICAgICAgICAgICB2YWx1ZS51bml0ID0gKHVuaXRmbGFncyAmIEZMZW5ndGgpID8gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgodW5p
dGZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHIDogQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19NUyk7CisgICAgICAgIGIgPSAodW5pdEZsYWdzICYgRk51bWJlcik7Cisg
ICAgICAgIGlmICghYiAmJiBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgdW5pdEZsYWdzLCBjc3NQYXJzZXJNb2RlKSkgeworICAgICAgICAgICAgdmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID0gKHVuaXRGbGFncyAmIEZMZW5ndGgpID8gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5p
dEZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHIDogQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19NUyk7CiAgICAgICAgICAgICBiID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoIWIgJiYgKHVuaXRmbGFncyAmIEZJbnRlZ2VyKSAmJiB2YWx1ZS5pc0ludCkKKyAg
ICAgICAgaWYgKCFiICYmICh1bml0RmxhZ3MgJiBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5pc0ludCkKICAgICAgICAgICAgIGIgPSB0cnVlOwotICAgICAgICBpZiAo
IWIgJiYgKHVuaXRmbGFncyAmIEZQb3NpdGl2ZUludGVnZXIpICYmIHZhbHVlLmlzSW50ICYmIHZh
bHVlLmZWYWx1ZSA+IDApCisgICAgICAgIGlmICghYiAmJiAodW5pdEZsYWdzICYgRlBvc2l0aXZl
SW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCAmJiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA+IDApCiAgICAgICAgICAgICBiID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0U6Ci0gICAgICAgIGIgPSAodW5pdGZsYWdzICYgRlBlcmNlbnQpOworICAgICAgICBiID0gKHVu
aXRGbGFncyAmIEZQZXJjZW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQYXJzZXJW
YWx1ZTo6UV9FTVM6CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoKQEAgLTE2
NzIsMjMgKzE2NzQsMjMgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19WSDoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1J
TjoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWDoKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGTGVuZ3RoKTsKKyAgICAgICAgYiA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TOgogICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TOgotICAgICAgICBiID0gKHVuaXRmbGFncyAm
IEZUaW1lKTsKKyAgICAgICAgYiA9ICh1bml0RmxhZ3MgJiBGVGltZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUc6CiAgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1JBRDoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JB
RDoKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTjoKLSAgICAgICAgYiA9ICh1
bml0ZmxhZ3MgJiBGQW5nbGUpOworICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZBbmdsZSk7CiAg
ICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxF
KFJFU09MVVRJT05fTUVESUFfUVVFUlkpCiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0RQUFg6CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQSToKICAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToKLSAgICAgICAgYiA9ICh1bml0ZmxhZ3MgJiBGUmVz
b2x1dGlvbik7CisgICAgICAgIGIgPSAodW5pdEZsYWdzICYgRlJlc29sdXRpb24pOwogICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19IWjoKQEAg
LTE2OTcsMjAgKzE2OTksMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnZhbGlkVW5pdChDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgQ1NTUGFyc2VyTW9kZQogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoYiAmJiB1bml0ZmxhZ3MgJiBGTm9uTmVn
ICYmIHZhbHVlLmZWYWx1ZSA8IDApCisgICAgaWYgKGIgJiYgdW5pdEZsYWdzICYgRk5vbk5lZyAm
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8IDApCiAgICAgICAgIGIgPSBm
YWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlLmZWYWx1ZSkpCisgICAgaWYgKGIg
JiYgc3RkOjppc2luZih2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkpCiAgICAg
ICAgIGIgPSBmYWxzZTsKICAgICByZXR1cm4gYjsKIH0KIAotaW5saW5lIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0
aENhbGN1bGF0aW9uKQogewotICAgIGlmIChtX3BhcnNlZENhbGN1bGF0aW9uKSB7Ci0gICAgICAg
IEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKG1fcGFyc2VkQ2FsY3VsYXRpb24ucmVsZWFzZSgpKTsKLSAgICB9Cisg
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpCisgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0
aW9uKCkpOwogCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gdmFsdWVXaXRoQ2FsY3VsYXRp
b247CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKICAgICBBU1NFUlQoKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKICAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJO
ICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMpCkBAIC0xNzQwLDQz
ICsxNzQxLDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcvJzsKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OnZhbGlkV2lkdGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnZh
bGlkYXRlV2lkdGgoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQog
ewotICAgIGludCBpZCA9IHZhbHVlLmlkOworICAgIGludCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuaWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlSW50cmluc2ljIHx8IGlkID09
IENTU1ZhbHVlTWluSW50cmluc2ljIHx8IGlkID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCB8
fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRG
aWxsQXZhaWxhYmxlIHx8IGlkID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFpZCAmJiB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgIHJldHVybiAhaWQgJiYgdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKIH0KIAog
Ly8gRklYTUU6IENvbWJpbmUgdGhpcyB3aXRoIHZhbGlkV2lkdGggd2hlbiB3ZSBzdXBwb3J0IGZp
dC1jb250ZW50LCBldCBhbCwgZm9yIGhlaWdodHMuCi1ib29sIENTU1BhcnNlcjo6dmFsaWRIZWln
aHQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlSGVpZ2h0
KFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKIHsKLSAgICBpbnQg
aWQgPSB2YWx1ZS5pZDsKKyAgICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1p
bkludHJpbnNpYykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFpZCAmJiB2YWxp
ZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgIHJldHVybiAh
aWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKTsKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudGlmaWVyLCBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiB7CiAgICAgaWYgKGlk
ZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWRlbnRpZmllcik7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1
ZSh2YWx1ZSk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHZh
bHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWUpOwotICAgIGlmICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZN
QVgpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwor
CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmlu
Z1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbik7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQorICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBp
ZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVlcgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVk1BWCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNP
TFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBpZiAodmFsdWUu
dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFggJiYgdmFsdWUudW5pdCA8PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCisgICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwogI2VuZGlmCi0gICAgaWYgKHZhbHVlLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQot
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVp
cmsodmFsdWUuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgaWYgKGlz
Q2FsY3VsYXRpb24odmFsdWUpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShtX3BhcnNlZENhbGN1bGF0aW9uLnJlbGVhc2UoKSk7CisgICAgaWYgKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCisgICAgICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19F
TVMpOworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKQorICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5j
YWxjdWxhdGlvbigpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTc5OSwxOSArMTgw
MSwxMSBAQCB2b2lkIENTU1BhcnNlcjo6YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTUwogCiBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgaWYgKCFt
X3ZhbHVlTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICghdmFsdWUpCisgICAg
aWYgKCFtX3ZhbHVlTGlzdCB8fCAhbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgLy8gTm90ZTogbV9wYXJzZWRDYWxjdWxhdGlvbiBpcyB1c2VkIHRv
IHBhc3MgdGhlIGNhbGMgdmFsdWUgdG8gdmFsaWRVbml0IGFuZCB0aGVuIGNsZWFyZWQgYXQgdGhl
IGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRvIGF2b2lkIGhh
dmluZyB0byBwYXNzIHBhcnNlZENhbGMgdG8gYWxsIHZhbGlkVW5pdCBjYWxsZXJzLgotICAgIEFT
U0VSVCghbV9wYXJzZWRDYWxjdWxhdGlvbik7Ci0gICAgCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZh
bHVlLT5pZDsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAKICAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgp
ID8gMSA6IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAKQEAgLTE4NzUsNyArMTg2OSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAgICAgICAgICAgICAgIC8vIDxzaGFwZT4g
fCBhdXRvIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCiAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VDbGlwU2hhcGUocHJvcElkLCBpbXBvcnRhbnQpOwogICAg
ICAgICBicmVhazsKIApAQCAtMTkzMyw3ICsxOTI3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
Q29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwgaW5oZXJpdAogICAgICAgICAvLyBP
dXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlvbmFsIGtleXdvcmQuCkBAIC0xOTg2
LDYgKzE5ODAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIHpvb20taW4gfCB6b29tLW91dCB8IGFs
bC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIHwgLXdlYmtpdC16b29t
LWluIHwKICAgICAgICAgLy8gLXdlYmtpdC16b29tLW91dCBdIF0gfCBpbmhlcml0CiAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9ICZ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpOwogICAgICAgICB3aGlsZSAodmFsdWUp
IHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2U7CiAgICAgICAgICAgICBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIwMjgsNyAr
MjAyMyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsgLy8gY29tbWEKICAgICAgICAgfQogICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAg
aWYgKCF2YWx1ZSkgeyAvLyBubyB2YWx1ZSBhZnRlciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBhdGli
aWxpdHkpCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gbm8g
dmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRpYmlsaXR5KQogICAgICAgICAgICAg
ICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUhhbmQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCkBAIC0yMDQwLDcg
KzIwMzYsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZSkgewogICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAgICBpZiAo
aW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgeyAvLyBNU0lFIDUg
Y29tcGF0aWJpbGl0eSA6LworICAgICAgICAgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUhhbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBNU0lFIDUgY29tcGF0
aWJpbGl0eSA6LwogICAgICAgICAgICAgICAgIGlkID0gQ1NTVmFsdWVQb2ludGVyOwogICAgICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
KHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Via2l0
Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVOb25lKQpAQCAtMjExNCwxNyArMjExMSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7CisgICAgICAg
IH0gZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0
cmluZykpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgeworICAgICAgICB9IGVsc2UgaWYg
KGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpIHsKICAgICAgICAg
ICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQog
ICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19J
TUFHRV9TRVQpCi0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbiAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LWltYWdlLXNldCgiKSkgeworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsSWdu
b3JpbmdDYXNlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LWltYWdlLXNldCgiKSkgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUlt
YWdlU2V0KCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTIxNDcsMjEgKzIxNDQsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVUaGluIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENT
U1ZhbHVlVGhpY2spCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxl
bmd0aCB8IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzogICAgICAgLy8gbm9ybWFs
IHwgPGxlbmd0aD4gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoKTsKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNw
YWNpbmc6ICAgICAgICAgLy8gbm9ybWFsIHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhl
cml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOworICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRl
eHRJbmRlbnQ6CkBAIC0yMTc2LDM3ICsyMTczLDM3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGlu
Z0JlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWxpZFdpZHRoKCp2YWx1ZSkpOwor
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsaWRhdGVX
aWR0aCh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlNaW5XaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNh
bFdpZHRoOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkV2lkdGgoKnZhbHVlKTsKKyAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVdpZHRoKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkV2lkdGgoKnZhbHVlKSk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVdpZHRoKHZhbHVl
V2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1heEhlaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbGlkSGVp
Z2h0KCp2YWx1ZSkpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZU5v
bmUgfHwgdmFsaWRhdGVIZWlnaHQodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
SGVpZ2h0KCp2YWx1ZSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVIZWlnaHQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlIZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZEhlaWdo
dCgqdmFsdWUpKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IHZhbGlkYXRlSGVpZ2h0KHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgpAQCAtMjIyMiw3ICsyMjE5LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NW
YWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm90dG9tOiAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0
byB8IGluaGVyaXQKQEAgLTIyNDAsMTQgKzIyMzcsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRV
bml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50KSk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Wklu
ZGV4OiAgICAgICAgICAgICAgLy8gYXV0byB8IDxpbnRlZ2VyPiB8IGluaGVyaXQKICAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZh
bGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUg
YWRkZWQgc3VwcG9ydCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0y
MjU1LDcgKzIyNTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8p
CiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUG9zaXRp
dmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRl
Z2VyLCBDU1NRdWlya3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQ6CkBAIC0yMzA1LDcgKzIzMDIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVJlc2V0IHx8IGlkID09IENT
U1ZhbHVlRG9jdW1lbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQo
KnZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2Rl
KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1
c2VkIHdpdGhpbiBAZm9udC1mYWNlIGFuZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNhbm5vdCB1c2Ug
aW5oZXJpdCB8IGluaXRpYWwgb3IgYmUgIWltcG9ydGFudC4gVGhpcyBpcyBhIGxpc3Qgb2YgdXJs
cyBvciBsb2NhbCByZWZlcmVuY2VzLgpAQCAtMjM3MSwxNyArMjM2OCwxNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7CiAgICAgICAgIGlm
IChudW0gIT0gMSAmJiBudW0gIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwogICAgICAgICBp
ZiAoIXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSgqdmFsdWUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwog
ICAgICAgICBpZiAobnVtID09IDIpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5uZXh0KCkpOwor
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKICAgICAgICAgICAgIGlm
ICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7
CisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
bmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBw
YXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAKQEAgLTIzODksNyArMjM4Niw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJT
aXplOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2Vy
IHwgRk5vbk5lZyk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW86CiAgICAgICAgIHJldHVybiBwYXJz
ZUFzcGVjdFJhdGlvKGltcG9ydGFudCk7CkBAIC0yMzk3LDcgKzIzOTQsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKICAgICAgICAgcmV0dXJuIHBh
cnNlQm9yZGVyUmFkaXVzKHByb3BJZCwgaW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5
T3V0bGluZU9mZnNldDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVl
LCBGTGVuZ3RoKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFNoYWRvdzogLy8gQ1NTMiBwcm9wZXJ0eSwgZHJvcHBlZCBpbiBDU1MyLjEsIGJh
Y2sgaW4gQ1NTMywgc28gdHJlYXQgYXMgQ1NTMwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFk
b3c6CkBAIC0yNDIwLDE3ICsyNDE3LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVtICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBG
UG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKTsKICAgICAgICAgICAg
IGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICAgICAgaWYgKG51bSA9PSAyKSB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRlBvc2l0aXZlSW50ZWdlcik7CisgICAgICAg
ICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKCpt
X3ZhbHVlTGlzdC0+bmV4dCgpKTsKKyAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkYXRlVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIpOwog
ICAgICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNl
ZFZhbHVlMTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZl
VmFsdWVQYWlyKHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkp
LCBpbXBvcnRhbnQpOwpAQCAtMjQ0NSwxNiArMjQ0MiwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VSZWZsZWN0KHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlcik7CisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENT
U1N0cmljdE1vZGUpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoK
LSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGSW50ZWdlciB8IEZO
b25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlLT5mVmFsdWU7CisgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZO
b25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZh
bHVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgog
I2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCkBAIC0yNDk1LDE2ICsyNDkyLDE2IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcp
KTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgogICAgIGNhc2UgQ1NTUHJv
cGVydHlGbGV4U2hyaW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFs
dWUsIEZOdW1iZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRVbml0
KCp2YWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIGlmICh2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewog
ICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4g
KyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5kIGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFs
dWVzIGluIGEgaGFzaCBzZXQuCi0gICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91Ymxl
KCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpOworICAgICAgICAgICAgZG91YmxlIHJl
c3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSAr
IDIsIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgIH0KQEAgLTI1MTUsMTkgKzI1MTIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVTbWFsbCB8fCBpZCA9PSBDU1NWYWx1ZUxhcmdlIHx8IGlkID09IENTU1ZhbHVl
TWVkaXVtKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVu
aXQoKnZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcpOworICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5l
Zyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3Bl
ZWQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNs
b3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZUaW1lIHwgRkludGVnZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGVGltZSB8IEZJ
bnRlZ2VyIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfUkVHSU9O
UykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CkBAIC0yNTc0LDggKzI1NzEs
OCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVlbGVzcyBudW1iZXJzIGlzIGEg
cXVpcmsgb2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCi0g
ICAgICAgICAgICBpZiAodmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9u
TmVnKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcpKSB7Cisg
ICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2YWwp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgp
LCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OTUs
MTkgKzI2OTIsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgaWQgPT0gQ1NTVmFsdWVNZWRpdW0g
fHwgaWQgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFs
aWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZMZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlkICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZQb3Np
dGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAhaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRl
Z2VyLCBDU1NRdWlya3NNb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbHVtbkdhcDogLy8gbm9ybWFsIHwgPGxlbmd0aD4KICAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlTm9ybWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5n
dGggfCBGTm9uTmVnKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlzOgogICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IGlkID09IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0g
Q1NTVmFsdWVBdXRvKQpAQCAtMjcyMCw3ICsyNzE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2x1bW5TcGFuOiAvLyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGlu
IHRoZSB1bnByZWZpeGVkIHByb3BlcnR5KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwg
fHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykg
JiYgcGFyc2VkRG91YmxlKCp2YWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkgPT0gMSkgewor
ICAgICAgICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pID09IDEp
IHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBp
bXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI3MzAs
OSArMjcyNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0
eSBpbiBzdHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3
aGVuIHVzZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3VibGUoKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
dmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAgICAgICAgbV9wYXJzZWRDYWxjdWxhdGlvbi5jbGVh
cigpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWRE
b3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIC8vIEVuZCBvZiBDU1MzIHByb3BlcnRpZXMKQEAgLTI3NDIsNyArMjczNyw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgogICAgICAgICAvLyBXaGVu
IHNwZWNpZnlpbmcgbnVtYmVyIG9mIGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFs
dWUKICAgICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVp
cmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZh
bHVlLT5mVmFsdWUpICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkg
JiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50
IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUo
SU9TX1RFWFRfQVVUT1NJWklORykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVB
ZGp1c3Q6CkBAIC0yNzUwLDM2ICsyNzQ1LDM2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ugd2hlcmUgd2UgYWxsb3cgcmVsYXRpdmUgdW5pdHMuCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRlBl
cmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7CisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2Vu
dCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICNlbmRpZgogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAg
ICAgICAvLyA8bGVuZ3RoPgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCgqdmFs
dWUsIEZMZW5ndGgpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9k
ZSkpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQogICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb0xpbWl0IHx8IHZhbGlkVW5pdCgqdmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5l
ZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENT
U1N0cmljdE1vZGUpKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkgewotICAgICAgICAgICAgU3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFs
dWUtPnN0cmluZyk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgICAgICBT
dHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9y
dGFudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzg3LDEzICsyNzgyLDEz
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TG9jYWxlOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogLy8gPGRhc2hib2Fy
ZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAg
ICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4gcGFy
c2VEYXNoYm9hcmRSZWdpb25zKHByb3BJZCwgaW1wb3J0YW50KTsKICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKQEAgLTI5NTcsMTUgKzI5NTIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBwYXJzZWRWYWx1
ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxl
ZCgpICYmICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9u
TmVnKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW1hZ2VUaHJl
c2hvbGQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAmJiB2YWxpZFVuaXQo
KnZhbHVlLCBGTnVtYmVyKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3NzU2hhcGVzRW5hYmxlZCgpICYmICFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpKTsKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGQW5nbGUpOworICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSk7CiAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQpA
QCAtMzExNSwxMCArMzExMCwxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogCiAgICAgaWYgKHZhbGlkUHJp
bWl0aXZlKSB7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwg
KnZhbHVlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAg
fQotICAgIEFTU0VSVCghbV9wYXJzZWRDYWxjdWxhdGlvbik7CisKICAgICBpZiAocGFyc2VkVmFs
dWUpIHsKICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpIHx8IGluU2hvcnRoYW5k
KCkpIHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFz
ZSgpLCBpbXBvcnRhbnQpOwpAQCAtMzIyMSwxNiArMzIxNiwxNyBAQCBib29sIENTU1BhcnNlcjo6
dXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpIGNvbnN0CiBib29sIENT
U1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJzZXJW
YWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsaWRV
bml0KCp2YWwsIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbCkpOwotICAgICAgICBlbHNlIGlmICh2
YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICAgICAmJiB2YWwt
PmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWwtPmZ1bmN0aW9uLT5hcmdzLT5zaXpl
KCkgPT0gMQotICAgICAgICAgICAgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+
bmFtZSwgInJlcGVhdCgiKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZh
bCA9ICp2YWwtPmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCk7Ci0gICAgICAgICAgICBp
ZiAodmFsaWRVbml0KHBhcnNlclZhbCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aFJl
cGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShwYXJzZXJWYWwpKSkpOwor
ICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2
YWx1ZSk7CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQ
ZXJjZW50IHwgRkxlbmd0aCkpCisgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKKyAgICAgICAgZWxzZSBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisgICAgICAgICAgICAm
JiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MKKyAgICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+
YXJncy0+c2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LT5mdW5jdGlvbi0+bmFtZSwgInJlcGVhdCgiKSkgeworICAgICAgICAgICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKnZhbHVlLT5mdW5jdGlvbi0+YXJncy5n
ZXQoKS0+Y3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNy
ZWF0ZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24p
KSkpOwogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMyNTMsMTUgKzMyNDksMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Ny
b2xsU25hcERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbiA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSAhPSAyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1clBhcnNlclZhbCA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKmN1clBhcnNlclZhbCwg
RlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVhXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICghdmFsaWRhdGVV
bml0KHZhbHVlWFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgY3VyUGFyc2VyVmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAo
IXZhbGlkVW5pdCgqY3VyUGFyc2VyVmFsLCBGUGVyY2VudCB8IEZMZW5ndGgpKQorICAgIFJlZlB0
cjxDU1NWYWx1ZT4gY3NzVmFsdWVYID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
WFdpdGhDYWxjdWxhdGlvbik7CisKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVlXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5uZXh0KCkpOworICAgIGlmICghdmFsaWRhdGVVbml0
KHZhbHVlWVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVZID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCpjdXJQYXJzZXJWYWwpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWVZID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlWVdpdGhDYWxjdWxhdGlv
bik7CiAgICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgcG9zaXRpb24tPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgYWRk
UHJvcGVydHkocHJvcElkLCBwb3NpdGlvbiwgaW1wb3J0YW50KTsKQEAgLTMyNzMsMTUgKzMyNjks
MTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICB3
aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYg
cGFyc2VkVmFsdWVYID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlWFdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7CiAgICAgICAgIC8vIERvbid0IGFjY2VwdCBvZGQtbGVuZ3RoIGxpc3RzIG9mIGNvb3JkaW5h
dGVzLgogICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZWRWYWx1ZVkgPSAqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQocGFyc2VkVmFsdWVYLCBG
UGVyY2VudCB8IEZMZW5ndGgpIHx8ICF2YWxpZFVuaXQocGFyc2VkVmFsdWVZLCBGUGVyY2VudCB8
IEZMZW5ndGgpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVlXaXRoQ2FsY3Vs
YXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dCh2YWx1ZVhXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkgfHwgIXZhbGlkYXRl
VW5pdCh2YWx1ZVlXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShwYXJzZWRWYWx1ZVgpKTsKLSAgICAgICAgcG9zaXRpb25zLT5hcHBl
bmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHBhcnNlZFZhbHVlWSkpOworICAgICAgICBw
b3NpdGlvbnMtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVYV2l0aENh
bGN1bGF0aW9uKSk7CisgICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVlXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKQEAgLTM3NzQs
MTIgKzM3NzAsMTQgQEAgQ1NTUGFyc2VyOjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBh
cnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QmIHBhcnNlZFYKICAgICAgICAgICAgIHJldHVy
biBQYWdlU2l6ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENT
U1ZhbHVlSW52YWxpZDoKLSAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZO
b25OZWcpICYmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5n
dGgpKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZSkpOworICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CisgICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICAg
ICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25O
ZWcpICYmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgp
KSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIExlbmd0
aDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKKyAgICB9CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgfQpAQCAtMzk3NSw4ICszOTczLDkgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsKICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQoKnZhbHVlTGlzdC5j
dXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAg
ICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMzk5MSw4ICszOTkw
LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblko
Q1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsK
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQotICAgIGlmICh2YWxpZFVuaXQo
KnZhbHVlTGlzdC5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3Vy
cmVudCgpKTsKKyAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCB8IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
NDAyOCwxOSArNDAyOCwxNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbAogCiAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KCp2YWx1ZUxpc3Qu
Y3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgpKSB7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkpOworICAgIGlmICh2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpIHsK
ICAgICAgICAgaWYgKCFjdW11bGF0aXZlRmxhZ3MpIHsKICAgICAgICAgICAgIGN1bXVsYXRpdmVG
bGFncyB8PSBYRmlsbFBvc2l0aW9uOwogICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBYRmls
bFBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgaWYgKGN1bXVsYXRpdmVGbGFncyAmIChYRmlsbFBv
c2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBvc2l0aW9uKSkgewogICAgICAgICAgICAgY3VtdWxhdGl2
ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247CiAgICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlG
aWxsUG9zaXRpb247Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRD
YWxjdWxhdGlvbikKLSAgICAgICAgICAgICAgICBtX3BhcnNlZENhbGN1bGF0aW9uID0gbnVsbHB0
cjsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZUxpc3Qu
Y3VycmVudCgpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAt
NDIwMiw3ICs0MjAwLDEwIEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRp
b24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDCiAKIGlubGluZSBib29s
IENTU1BhcnNlcjo6aXNQb3RlbnRpYWxQb3NpdGlvblZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gaXNGaWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLmlkKSB8fCB2YWxp
ZFVuaXQodmFsdWUsIEZQZXJjZW50IHwgRkxlbmd0aCwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSk7
CisgICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1ZS5pZCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZh
bHVlKTsKKyAgICByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCB8IEZMZW5ndGgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24o
Q1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwg
UmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQpAQCAtNDM2Niw5ICs0MzY3LDEwIEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCYgYWxsb3dDCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAg
ICAgIHBhcnNlZFZhbHVlMSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pOwogICAgIGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUs
IEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVl
V2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSgqdmFsdWUpOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwpAQCAtNDM3NiwxMyArNDM3OCwxNCBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wmIGFsbG93QwogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQogICAgICAgICAgICAgYWxs
b3dDb21tYSA9IGZhbHNlOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVB
dXRvKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVy
Y2VudCkpIHsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1
bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewogICAgICAgICAgICAgICAgIGlmICgh
aW5TaG9ydGhhbmQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQg
d2hlbiBpdCBpcyBhZHZhbmNlZCB3ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgogICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5wcmV2aW91cygpOwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAmJiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZSkgewogICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ug
c2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhlIGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCkBAIC00
NTg2LDkgKzQ1ODksOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsCiAKIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCiB7Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5p
dCh2YWx1ZSwgRlRpbWUpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRlRpbWUpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtNDYwMiw5ICs0NjA1LDkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRp
bWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZSk7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
Km1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZUaW1lIHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCkBAIC00NjIxLDggKzQ2MjQsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQogICAgIENTU1BhcnNlclZhbHVl
JiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS5pZCA9PSBD
U1NWYWx1ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVy
IHwgRk5vbk5lZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWUpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZh
bHVlKTsKKyAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
IHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC00Njcy
LDggKzQ2NzYsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhh
bmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8QwogCiAgICAgLy8gbm93IGdldCB6
CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKHZhbGlkVW5p
dCgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRkxlbmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVl
MyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCkpIHsKKyAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTQ2ODUsMTYgKzQ2OTAsMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2lu
U2hvcnRoYW5kKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPEMKIAogYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVl
TGlzdCYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyKSkK
KyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5j
dXJyZW50KCkpOworICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHBhcnNlZERv
dWJsZSgqdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwotICAgIHZhbHVlID0gYXJncy5u
ZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkgeworICAgIHJlc3VsdCA9IHBhcnNlZERvdWJsZShhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbik7CisgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IGFy
Z3MubmV4dCgpOworICAgIGlmICghbmV4dFZhbHVlKSB7CiAgICAgICAgIC8vIFRoZSBsYXN0IG51
bWJlciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3ZSdyZSBkb25l
LgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkK
KyAgICBpZiAoIWlzQ29tbWEobmV4dFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGFyZ3MubmV4dCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDcyMiwyMiArNDcyNywyNCBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rp
b24oKQogICAgICAgICBpbnQgbnVtU3RlcHM7CiAgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBm
YWxzZTsKIAotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gYXJncy0+Y3Vy
cmVudCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGSW50ZWdlcikp
CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Vt
ZW50KTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZJbnRlZ2VyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVw
cyA9IGNsYW1wVG9JbnRlZ2VyKGN1cnJlbnRWYWx1ZS0+ZlZhbHVlKTsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIG51bVN0
ZXBzID0gY2xhbXBUb0ludGVnZXIoYXJndW1lbnQtPmZWYWx1ZSk7CiAgICAgICAgIGlmIChudW1T
dGVwcyA8IDEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgY3VycmVudFZh
bHVlID0gYXJncy0+bmV4dCgpOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKIAot
ICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7CisgICAgICAgIGlmIChhcmd1bWVudCkgewogICAg
ICAgICAgICAgLy8gVGhlcmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNv
bmQgdmFsdWUKLSAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAgICAg
ICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50VmFsdWUtPmlkICE9IENTU1ZhbHVlU3RhcnQgJiYgY3VycmVudFZhbHVl
LT5pZCAhPSBDU1NWYWx1ZUVuZCkKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZVN0YXJ0ICYmIGFyZ3Vt
ZW50LT5pZCAhPSBDU1NWYWx1ZUVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIHN0ZXBBdFN0YXJ0ID0gY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVN0
YXJ0OworICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVT
dGFydDsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwpAQCAtNDg5OCwyMyArNDkwNSwy
NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEN1c3RvbUlkZW50KGNvbnN0IENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKIC8vIFRoZSBmdW5jdGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1
c3RvbS1pZGVudD4gXSBpbiA8Z3JpZC1saW5lPiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9y
IHdpdGggJ3NwYW4nKS4KIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50
RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSkKIHsKLSAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVu
aXQoKnZhbHVlLCBGSW50ZWdlcikgJiYgdmFsdWUtPmZWYWx1ZSkgewotICAgICAgICBudW1lcmlj
VmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgaXNWYWxpZEN1
c3RvbUlkZW50KCp2YWx1ZSkpIHsKLSAgICAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7CisgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIp
ICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7CisgICAgICAgIG51bWVy
aWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4
dCgpOworICAgICAgICBpZiAobmV4dFZhbHVlICYmIGlzVmFsaWRDdXN0b21JZGVudCgqbmV4dFZh
bHVlKSkgeworICAgICAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5n
VmFsdWUoKm5leHRWYWx1ZSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChpc1ZhbGlkQ3Vz
dG9tSWRlbnQoKnZhbHVlKSkgewotICAgICAgICBncmlkTGluZU5hbWUgPSBjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIHZhbHVlID0g
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIHZhbGlkVW5pdCgqdmFs
dWUsIEZJbnRlZ2VyKSAmJiB2YWx1ZS0+ZlZhbHVlKSB7Ci0gICAgICAgICAgICBudW1lcmljVmFs
dWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CisgICAgaWYgKGlzVmFsaWRDdXN0b21JZGVudCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbikpIHsKKyAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICBpZiAoQ1NTUGFyc2VyVmFs
dWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbmV4dFZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50
ZWdlcikgJiYgbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5l
eHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC01Mjk4LDEzICs1MzA3LDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VHcmlkVHJhY2tMaXN0KCkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja1Jl
cGVhdEZ1bmN0aW9uKENTU1ZhbHVlTGlzdCYgbGlzdCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3VtZW50cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwotICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhdmFs
aWRVbml0KCphcmd1bWVudHMtPnZhbHVlQXQoMCksIEZQb3NpdGl2ZUludGVnZXIpIHx8ICFpc0Nv
bW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgxKSkpCisgICAgaWYgKCFhcmd1bWVudHMgfHwgYXJndW1l
bnRzLT5zaXplKCkgPCAzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoYXJn
dW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiAwKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudHMtPnZhbHVlQXQoMCkpOworICAg
IGlmICghdmFsaWRhdGVVbml0KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIpIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgxKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQg
dmFsdWVzLgorICAgIEFTU0VSVChmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZh
bHVlID4gMCk7CiAgICAgLy8gSWYgYXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpF
X01BWCB0aGVuIHJlcGV0aXRpb25zIGJlY29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywg
dGhhdCdzIHdoeSB3ZQogICAgIC8vIGNsYW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVm
b3JlIHRoZSB0eXBlIGNhc3RpbmcuCi0gICAgdW5zaWduZWQgcmVwZXRpdGlvbnMgPSBjbGFtcFRv
PHVuc2lnbmVkPihhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFj
a3MpOworICAgIHVuc2lnbmVkIHJlcGV0aXRpb25zID0gY2xhbXBUbzx1bnNpZ25lZD4oZmlyc3RW
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgMCwga0dyaWRNYXhUcmFja3MpOwog
CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgYXJndW1lbnRzLT5uZXh0KCk7IC8vIFNraXAg
dGhlIHJlcGV0aXRpb24gY291bnQuCkBAIC01Mzc4LDEzICs1MzkyLDEzIEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlz
dCYgaW5wdXRMaXN0CiAgICAgcmV0dXJuIHBhcnNlR3JpZEJyZWFkdGgoY3VycmVudFZhbHVlKTsK
IH0KIAotUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRC
cmVhZHRoKENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUpCitQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIHZh
bHVlKQogewotICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250
ZW50IHx8IGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZh
bHVlLmlkKTsKKyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8
IHZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKKyAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAKLSAgICBpZiAo
Y3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19GUikgewotICAgICAg
ICBkb3VibGUgZmxleFZhbHVlID0gY3VycmVudFZhbHVlLmZWYWx1ZTsKKyAgICBpZiAodmFsdWUu
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKSB7CisgICAgICAgIGRvdWJsZSBmbGV4
VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CiAKICAgICAgICAgLy8gRnJhY3Rpb25hbCB1bml0IGlzIGEg
bm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KICAgICAgICAgaWYgKGZsZXhWYWx1ZSA8PSAwKQpAQCAt
NTM5MywxMCArNTQwNywxMSBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbgogICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZmxleFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0ZSKTsKICAgICB9CiAKLSAgICBpZiAoIXZhbGlkVW5pdChjdXJyZW50VmFsdWUsIEZO
b25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQorICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShj
dXJyZW50VmFsdWUpOworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRB
dXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQpCkBAIC01NTY1LDExICs1NTgwLDEyIEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAg
ICAgICAgICBhcmcgPSBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKIAotICAgICAg
ICAgICAgICAgIHZhbGlkID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KCph
cmcsIEZMZW5ndGgpOworICAgICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ1dp
dGhDYWxjdWxhdGlvbigqYXJnKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+aWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmdXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgp
OwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBh
cmctPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmcpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoQ2FsY3Vs
YXRpb24pOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAg
ICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKQEAgLTU3NDUsMTIgKzU3NjEsMTMgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICBSZWZQdHI8UmVjdD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgIGJvb2wg
dmFsaWQgPSB0cnVlOwogICAgIGludCBpID0gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVu
dFZhbHVlID0gYXJncy0+Y3VycmVudCgpOwotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKLSAg
ICAgICAgdmFsaWQgPSBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVu
aXQoKmN1cnJlbnRWYWx1ZSwgRkxlbmd0aCk7CisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50
ID0gYXJncy0+Y3VycmVudCgpOworICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAg
ICAgICB2YWxpZCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKICAgICAgICAgaWYgKCF2YWxpZCkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxl
bmd0aCA9IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbGVuZ3RoID0gYXJndW1lbnQtPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgaWYgKGkgPT0gMCkK
ICAgICAgICAgICAgIHJlY3QtPnNldFRvcChsZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChpID09
IDEpCkBAIC01NzU5LDEwICs1Nzc2LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFw
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZWN0
LT5zZXRCb3R0b20obGVuZ3RoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVjdC0+c2V0
TGVmdChsZW5ndGgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0gICAg
ICAgIGlmIChjdXJyZW50VmFsdWUgJiYgYXJncy0+c2l6ZSgpID09IDcpIHsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1
cnJlbnRWYWx1ZS0+aVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1
ZSA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAg
ICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykgeworICAgICAgICAgICAgaWYg
KGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBhcmd1bWVudC0+
aVZhbHVlID09ICcsJykgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTgyOSwxMCArNTg0NiwxMSBAQCBQYXNzUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NS
ZWZQdHI8Q1NTQmFzaQogICAgICAgICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUs
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgIGlmICghaW5kZXhB
ZnRlclNsYXNoKQogICAgICAgICAgICAgcmFkaWlbMF1baV0gPSByYWRpdXM7CkBAIC01ODY5LDEw
ICs1ODg3LDExIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJh
c2ljU2hhcGVJbnNldChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyCiAgICAgICAgIH0KIAogICAgICAg
ICBVbml0cyB1bml0RmxhZ3MgPSBGTGVuZ3RoIHwgRlBlcmNlbnQ7Ci0gICAgICAgIGlmICghdmFs
aWRVbml0KCphcmd1bWVudCwgdW5pdEZsYWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0
KQorICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigq
YXJndW1lbnQpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbiwgdW5pdEZsYWdzKSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSgqYXJndW1lbnQpKTsKKyAgICAgICAgd2lkdGhBcmd1bWVu
dHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbikpOwogICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwogICAgIH0KIApAQCAtNTkw
NywxMCArNTkyNiwxMSBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogICAgIGlmICh2YWx1ZS5p
ZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RT
aWRlKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLmlkKTsKIAotICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbih2YWx1ZSk7CisgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOworICAgIHJl
dHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwog
fQogCiBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBl
Q2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKQEAgLTYwMjQsMTQgKzYwNDQsMTggQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHln
b24oQ1NTUGFyc2VyVmFsdWVMaXN0JgogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFggPSBh
cmd1bWVudDsKICAgICB3aGlsZSAoYXJndW1lbnRYKSB7CiAKLSAgICAgICAgaWYgKCF2YWxpZFVu
aXQoKmFyZ3VtZW50WCwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFgpOworICAgICAgICBp
ZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVy
Y2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1
bWVudFgpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uKTsKIAogICAg
ICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlm
ICghYXJndW1lbnRZIHx8ICF2YWxpZFVuaXQoKmFyZ3VtZW50WSwgRkxlbmd0aCB8IEZQZXJjZW50
KSkKKyAgICAgICAgaWYgKCFhcmd1bWVudFkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudFkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFlXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudFkpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHlMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0
aENhbGN1bGF0aW9uKTsKIAogICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxl
YXNlKCksIHlMZW5ndGgucmVsZWFzZSgpKTsKIApAQCAtNjA4Niw3ICs2MTEwLDcgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9w
ZXJ0eUlEIHByb3BJZCkKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChzaGFwZVZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICAgICAgc2hhcGVGb3VuZCA9IHRydWU7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNCb3hWYWx1ZSh2YWx1ZUlkLCBwcm9wSWQpICYmICFib3hGb3VuZCkgewotICAg
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFs
aWRQcmltaXRpdmUodmFsdWVJZCwgKnZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWVJZCk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtNjEwOCwxMyArNjEzMiwxMCBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCkKIAogICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwogICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4ga2V5d29yZFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc2hhcGVWYWx1ZTsKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewotICAg
ICAgICBrZXl3b3JkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKHZhbHVlSWQsIHZhbHVlKTsK
ICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRWYWx1
ZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJZCk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZh
bHVlOwpAQCAtNjEzNCw3ICs2MTU1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNsaXBQYXRoKCkKIAogICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVlTm9uZSkgewog
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gcGFyc2VWYWxpZFBy
aW1pdGl2ZSh2YWx1ZUlkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAgfQogICAgIGlmICh2YWx1ZS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CkBAIC02MzU0LDMxICs2Mzc1LDMxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBD
U1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVI
ZWlnaHQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOworICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgLy8gbm9ybWFs
IHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICBlbHNlCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUs
IEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZO
dW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CiAgICAgaWYgKHZhbGlkUHJp
bWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZl
KGlkLCB2YWx1ZSksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24p
LCBpbXBvcnRhbnQpOwogICAgIHJldHVybiB2YWxpZFByaW1pdGl2ZTsKIH0KIAogYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgQ1NTUGFyc2VyVmFs
dWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9
IHZhbHVlLmlkOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9u
KCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS5pZDsKICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7
CiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxlbmd0aD4gfCA8
cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYgKGlkID49IENTU1ZhbHVlWHhTbWFsbCAmJiBp
ZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAg
IGVsc2UKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGgg
fCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7
CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNo
b3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFy
c2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdp
dGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZlOwog
fQogCkBAIC02NDQ0LDggKzY0NjUsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0
KGJvb2wgaW1wb3J0YW50KQogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCksIGltcG9y
dGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodmFsaWRVbml0KHZh
bHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7Ci0gICAgICAgIGludCB3
ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZSwgUmVsZWFzZVBhcnNl
ZENhbGNWYWx1ZSkpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKHZhbHVlKTsKKyAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
SW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7CisgICAgICAgIGludCB3ZWlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwog
ICAgICAgICBpZiAoISh3ZWlnaHQgJSAxMDApICYmIHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9
IDkwMCkgewogICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVl
S2V5d29yZCh3ZWlnaHQpKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNjk0MCwxMiArNjk2Miw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JB
MzImIHJnYiwgY29uc3QgU3RyaW5nVHlwZSYgbmFtZSwgYm9vbCBzdHJpY3QpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogICAgIAotaW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNlZERvdWJsZShD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVs
ZWFzZUNhbGMpCitpbmxpbmUgZG91YmxlIENTU1BhcnNlcjo6cGFyc2VkRG91YmxlKFZhbHVlV2l0
aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKIHsKLSAgICBkb3VibGUgcmVzdWx0
ID0gbV9wYXJzZWRDYWxjdWxhdGlvbiA/IG1fcGFyc2VkQ2FsY3VsYXRpb24tPmRvdWJsZVZhbHVl
KCkgOiB2YWx1ZS5mVmFsdWU7Ci0gICAgaWYgKHJlbGVhc2VDYWxjID09IFJlbGVhc2VQYXJzZWRD
YWxjVmFsdWUpCi0gICAgICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBudWxscHRyOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9u
KCkgPyB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDog
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWU7CiB9CiAKIGJvb2wgQ1NTUGFyc2Vy
Ojppc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKQEAgLTY5NTcsMTYgKzY5NzYs
MTYgQEAgYm9vbCBDU1NQYXJzZXI6OmlzQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQogICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUs
ICItd2Via2l0LW1heCgiKSk7CiB9CiAKLWlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xvckludEZy
b21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCitpbmxpbmUgaW50IENTU1BhcnNlcjo6Y29s
b3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9u
KQogewogICAgIGJvb2wgaXNQZXJjZW50OwogICAgIAotICAgIGlmIChtX3BhcnNlZENhbGN1bGF0
aW9uKQotICAgICAgICBpc1BlcmNlbnQgPSBtX3BhcnNlZENhbGN1bGF0aW9uLT5jYXRlZ29yeSgp
ID09IENhbGNQZXJjZW50OworICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpKQorICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OwogICAgIGVsc2UKLSAgICAgICAgaXNQZXJj
ZW50ID0gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7Cisg
ICAgICAgIGlzUGVyY2VudCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CiAKLSAgICBjb25zdCBkb3VibGUgZG91
YmxlVmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwor
ICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbik7CiAgICAgCiAgICAgaWYgKGRvdWJsZVZhbHVlIDw9IDAuMCkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC02OTg2LDM0ICs3MDA1LDM0IEBAIGlubGluZSBpbnQgQ1NTUGFyc2VyOjpjb2xv
ckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiBib29sIENTU1BhcnNlcjo6cGFy
c2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBpbnQqIGNvbG9yQXJyYXks
IGJvb2wgcGFyc2VBbHBoYSkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1
ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVl
ID0gYXJncy0+Y3VycmVudCgpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5pdFR5cGUg
PSBGVW5rbm93bjsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlwZQotICAg
IGlmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQor
ICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVn
ZXIsIENTU1N0cmljdE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJbnRlZ2VyOwotICAgIGVs
c2UgaWYgKHZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkp
CisgICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsK
ICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb2xvckFycmF5WzBd
ID0gY29sb3JJbnRGcm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgY29sb3JBcnJheVswXSA9
IGNvbG9ySW50RnJvbVZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlm
IChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9w
ZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlk
VW5pdCgqY3VycmVudFZhbHVlLCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkp
OworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5p
dFR5cGUsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9tVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAg
ICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZyb21WYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbik7CiAgICAgfQogICAgIGlmIChwYXJzZUFscGhhKSB7Ci0gICAgICAgIGN1cnJlbnRWYWx1
ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQ
YXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywnKQorICAg
ICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Cisg
ICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAgICAgICBp
ZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Mt
Pm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUs
IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBw
YXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAvLyBDb252ZXJ0
IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGluIHRo
ZSByYW5nZSBbMCwgMjU2KSwKICAgICAgICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRpb24g
YWNyb3NzIGFsbCAyNTYgdmFsdWVzLgogICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGljX2Nh
c3Q8aW50PihzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91YmxlVmFs
dWUpKSAqIG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CkBAIC03MDI5LDI5ICs3MDQ4LDI5IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUs
IGludCogY29sb3JBcnJheSwgYm9vCiBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJz
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxw
aGEpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPmN1cnJl
bnQoKTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uKCphcmdzLT5jdXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBp
ZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICBpZiAoIXZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
LCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIG5vcm1hbGl6
ZSB0aGUgSHVlIHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFuZCAxLjAKLSAg
ICBjb2xvckFycmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3VibGUoKmN1cnJl
bnRWYWx1ZSwgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZSkpICUgMzYwKSArIDM2MCkgJSAzNjApIC8g
MzYwLjA7CisgICAgY29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91
YmxlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSAlIDM2MCkgKyAzNjApICUgMzYwKSAv
IDM2MC4wOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCAh
PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgY3VycmVudFZhbHVlLT5pVmFsdWUgIT0gJywn
KQorICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0
KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAoIXZhbGlkVW5pdCgqY3VycmVudFZhbHVlLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9k
ZSkpCisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
KCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbiwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6
Om1pbjxkb3VibGU+KDEwMCwgcGFyc2VkRG91YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJz
ZWRDYWxjVmFsdWUpKSkgLyAxMDAuMDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFu
ZCAxLjAKKyAgICAgICAgY29sb3JBcnJheVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjpt
aW48ZG91YmxlPigxMDAsIHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSAv
IDEwMC4wOyAvLyBuZWVkcyB0byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAogICAgIH0KICAg
ICBpZiAocGFyc2VBbHBoYSkgewotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmdzLT5uZXh0KCk7
Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIGN1cnJlbnRWYWx1ZS0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgQ1NTUGFyc2VyVmFs
dWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgpOworICAgICAgICBpZiAob3BlcmF0
b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFy
Z3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGN1cnJlbnRWYWx1ZSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmN1
cnJlbnRWYWx1ZSwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAg
ICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NT
U3RyaWN0TW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJy
YXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91
YmxlKCpjdXJyZW50VmFsdWUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpKSk7CisgICAgICAgIGNv
bG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFy
c2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTcxNjMsOSArNzE4Miw5IEBAIHN0cnVjdCBTaGFkb3dQYXJzZUNvbnRleHQg
ewogICAgICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hT
aGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7CiAgICAgfQogCi0gICAg
dm9pZCBjb21taXRMZW5ndGgoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQgY29tbWl0
TGVuZ3RoKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0
aW9uKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVW
YWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5j
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAg
ICAgIGlmIChhbGxvd1gpIHsKICAgICAgICAgICAgIHggPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNl
KCk7CkBAIC03MjQzLDYgKzcyNjIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQwogICAgIFNo
YWRvd1BhcnNlQ29udGV4dCBjb250ZXh0KHByb3BJZCwgKnRoaXMpOwogICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZTsKICAgICB3aGlsZSAoKHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKSkpIHsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVl
KTsKICAgICAgICAgLy8gQ2hlY2sgZm9yIGEgY29tbWEgYnJlYWsgZmlyc3QuCiAgICAgICAgIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKICAgICAgICAgICAg
IGlmICh2YWx1ZS0+aVZhbHVlICE9ICcsJyB8fCAhY29udGV4dC5hbGxvd0JyZWFrKSB7CkBAIC03
MjU1LDIyICs3Mjc1LDIyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBh
cnNlU2hhZG93KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZ29vZC4gIENv
bW1pdCBpdC4KICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0VmFsdWUoKTsKLSAgICAgICAgfSBl
bHNlIGlmICh2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgeworICAg
ICAgICB9IGVsc2UgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCwgQ1NTU3RyaWN0TW9kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3Ro
IGFuZCBkaWRuJ3QgZ2V0IG9uZS4gSW52YWxpZC4KICAgICAgICAgICAgIGlmICghY29udGV4dC5h
bGxvd0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
ICAgICAvLyBCbHVyIHJhZGl1cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KLSAgICAgICAgICAgIGlm
IChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYm
ICF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAg
ICAgICAgLy8gQSBsZW5ndGggaXMgYWxsb3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBh
bmQgYWRkIGl0LgotICAgICAgICAgICAgY29udGV4dC5jb21taXRMZW5ndGgoKnZhbHVlKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0TGVuZ3RoKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKICAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbnNldCkgewogICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LmFsbG93U3R5bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0U3R5bGUoKnZhbHVlKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuY29tbWl0U3R5bGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0
J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4KICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGFyc2VkQ29sb3I7CkBAIC03MzExLDM0ICs3MzMxLDM1IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
IC8vIGJveC1yZWZsZWN0OiA8ZGlyZWN0aW9uPiA8b2Zmc2V0PiA8bWFzaz4KIAogICAgIC8vIERp
cmVjdGlvbiBjb21lcyBmaXJzdC4KLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlyZWN0
aW9uOwotICAgIHN3aXRjaCAoY3VycmVudFZhbHVlLT5pZCkgeworICAgIHN3aXRjaCAodmFsdWUt
PmlkKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBYm92ZToKICAgICAgICAgY2FzZSBDU1NWYWx1
ZUJlbG93OgogICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKICAgICAgICAgY2FzZSBDU1NWYWx1
ZVJpZ2h0OgotICAgICAgICAgICAgZGlyZWN0aW9uID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOworICAgICAgICAgICAgZGlyZWN0aW9uID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICAvLyBUaGUgb2Zmc2V0IGNvbWVzIG5leHQuCi0gICAgY3VycmVudFZhbHVl
ID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQ7Ci0gICAgaWYgKCFjdXJyZW50
VmFsdWUpCisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgb2Zmc2V0ID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGlmICghdmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCkp
CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1
ZSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVu
Z3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvZmZz
ZXQgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7CisgICAgICAg
IG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7CiAgICAgfQogCiAgICAgLy8gTm93IGZvciB0aGUgbWFzay4KICAgICBSZWZQdHI8Q1NTVmFs
dWU+IG1hc2s7Ci0gICAgY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBp
ZiAoY3VycmVudFZhbHVlKSB7CisgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAg
IGlmICh2YWx1ZSkgewogICAgICAgICBpZiAoIXBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCBtYXNr
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MzU4LDIwICs3Mzc5LDIx
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBi
b29sIGltcG9ydGFudCkKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZsZXhCYXNpczsK
IAogICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKSkg
ewotICAgICAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRk51bWJlciB8IEZOb25OZWcpKSB7
CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudCk7CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24sIEZOdW1iZXIgfCBGTm9uTmVnKSkgewogICAgICAgICAgICAgaWYgKGZsZXhHcm93ID09IHVu
c2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleEdyb3cgPSBwYXJzZWREb3VibGUoKmFyZ3Vt
ZW50LCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBmbGV4R3JvdyA9
IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgICAgICBlbHNl
IGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleFNocmlu
ayA9IHBhcnNlZERvdWJsZSgqYXJndW1lbnQsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoIXBhcnNlZERvdWJsZSgqYXJndW1lbnQsIFJlbGVhc2VQYXJzZWRD
YWxjVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmxleFNocmluayA9IHBhcnNlZERvdWJsZShh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgICAgICBlbHNlIGlmICghcGFyc2VkRG91
YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGZsZXgg
b25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRzKSBpZiBmbGV4LWdyb3cgYW5kIGZs
ZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAgICAgICAg
ZmxleEJhc2lzID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdl
IG9ubHkgYWxsb3cgMyBudW1iZXJzIHdpdGhvdXQgdW5pdHMgaWYgdGhlIGxhc3QgdmFsdWUgaXMg
MC4gRS5nLiwgZmxleDoxIDEgMSBpcyBpbnZhbGlkLgogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChh
cmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpKSkKLSAgICAgICAgICAgIGZsZXhCYXNpcyA9IHBhcnNl
VmFsaWRQcmltaXRpdmUoYXJndW1lbnQtPmlkLCAqYXJndW1lbnQpOworICAgICAgICB9IGVsc2Ug
aWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQorICAgICAgICAgICAgZmxleEJhc2lzID0gcGFy
c2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkLCBhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gTm90
IGEgdmFsaWQgYXJnIGZvciBmbGV4LgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzY0
MCw5ICs3NjYyLDkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dGaW5hbENvbW1pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dGaW5hbENvbW1pdDsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0
b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQogCi0gICAgdm9pZCBjb21taXROdW1i
ZXIoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNl
cjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQogICAgIHsKLSAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2Vy
LmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICBpZiAoIW1fdG9wKQog
ICAgICAgICAgICAgbV90b3AgPSBwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgIGVs
c2UgaWYgKCFtX3JpZ2h0KQpAQCAtNzcwNyw5ICs3NzI5LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUJvcmRlckltYWdlU2xpY2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NCb3Jk
ZXJJbWFnCiAgICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsK
ICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZSk7CiAgICAgICAgIC8vIEZJWE1FIGNhbGMoKSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVlcyBhcmUgbm90IGNyZWF0
ZWQgeWV0LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0
aW9uKCp2YWx1ZSkgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBl
cmNlbnQsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJl
cigqdmFsdWUpOworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1
bGF0aW9uKHZhbHVlV2l0aENhbGN1bGF0aW9uKSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkg
eworICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09
IENTU1ZhbHVlRmlsbCkKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0RmlsbCgpOwogICAgICAg
ICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgewpAQCAtNzc1MSwxMyArNzc3NCwxMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBhbGxvd0ZpbmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0Zp
bmFsQ29tbWl0OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fdG9wLmdldCgpOyB9CiAKLSAgICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCisgICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyOjpWYWx1ZVdpdGhDYWxjdWxh
dGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCiAgICAgewogICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlOwotICAgICAgICBpZiAodmFsdWUuaWQgPT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOworICAgICAgICBpZiAodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5pZCA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBwcmltaXRp
dmVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLmlkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbWl0
aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwor
ICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgIGlmICghbV90b3ApCiAg
ICAgICAgICAgICBtX3RvcCA9IHByaW1pdGl2ZVZhbHVlLnJlbGVhc2UoKTsKQEAgLTc4MTksMTAg
Kzc4NDIsMTEgQEAgcHJpdmF0ZToKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUXVh
ZChVbml0cyB2YWxpZFVuaXRzLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCiB7
CiAgICAgQm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAgIENT
U1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWU7Ci0gICAgd2hpbGUgKChjdXJyZW50VmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJl
cigpICYmICh2YWxpZFVuaXQoKmN1cnJlbnRWYWx1ZSwgdmFsaWRVbml0cywgQ1NTU3RyaWN0TW9k
ZSkgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LmNvbW1pdE51bWJlcigqY3VycmVudFZhbHVlKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWU7CisgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Cisg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7
CisgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRVbml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlk
ID09IENTU1ZhbHVlQXV0bykpIHsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkg
ewogICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3
ZSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc4NzksMTAgKzc5
MDMsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKGkgLSBpbmRleEFmdGVyU2xhc2gg
Pj0gNCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCisgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogCiAgICAgICAgIGlmICgh
aW5kZXhBZnRlclNsYXNoKSB7CiAgICAgICAgICAgICByYWRpaVswXVtpXSA9IHJhZGl1czsKQEAg
LTc5MjUsMjAgKzc5NTAsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0UmF0aW8oYm9v
bCBpbXBvcnRhbnQpCiAgICAgaWYgKG51bSAhPSAzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBDU1NQYXJzZXJWYWx1ZSYgbHZhbHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDApOwog
ICAgIENTU1BhcnNlclZhbHVlJiBvcCA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdCgxKTsKLSAgICBD
U1NQYXJzZXJWYWx1ZSYgcnZhbHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDIpOwogCiAgICAg
aWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKG9wKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCF2YWxpZFVuaXQobHZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlk
VW5pdChydmFsdWUsIEZOdW1iZXIgfCBGTm9uTmVnKSkKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBsdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDApKTsKKyAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBydmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52
YWx1ZUF0KDIpKTsKKyAgICBpZiAoIXZhbGlkYXRlVW5pdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIgfCBGTm9uTmVnKSB8fCAhdmFsaWRhdGVVbml0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRk51bWJlciB8IEZOb25OZWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
IWx2YWx1ZS5mVmFsdWUgfHwgIXJ2YWx1ZS5mVmFsdWUpCisgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgaWYgKCFsdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWUgfHwgIXJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZW
YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQobHZhbHVlLmZWYWx1ZSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocnZh
bHVlLmZWYWx1ZSkpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0QXNwZWN0UmF0aW8sIENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGx2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSksIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQocnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSksIGlt
cG9ydGFudCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTgxMzIsOSArODE1OCwxMSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAgIC8vIEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHks
IHdlIG5vdyBleHBlY3QgYSBudW1lcmljIHJhZGl1cy4KICAgICBpZiAoZ3JhZGllbnRUeXBlID09
IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewogICAgICAgICBhcmd1bWVudCA9IGFyZ3Mt
Pm5leHQoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0
aW9uIHZhbHVlcy4KICAgICAgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmly
c3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgICAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQp
OworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRG
aXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24pKTsKIAogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVzLgogICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKQEAgLTgxNjksOSArODE5NywxMSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5v
dCBoYW5kbGUgY2FsY3VsYXRpb24gdmFsdWVzLgogICAgICAgICBpZiAoIWFyZ3VtZW50IHx8IGFy
Z3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVl
PigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCph
cmd1bWVudCkpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZh
bHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CiAgICAgfQogCiAgICAgLy8gV2Ugbm93IHdpbGwg
YWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSkuCkBAIC04MjQxLDExICs4Mjcx
LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudChDU1NQ
YXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy0+Y3VycmVudCgpOwogICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bigqYXJndW1lbnQpOwogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExv
b2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0
cmljdE1vZGUpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKCphcmd1bWVudCkpOworICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pKTsKIAogICAgICAgICBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1
ZTsKQEAgLTgzODIsOCArODQxMyw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7CiAKICAgICBpZiAoIXNoYXBlVmFs
dWUgJiYgIXNpemVWYWx1ZSkgewotICAgICAgICBpZiAodmFsaWRVbml0KCphcmd1bWVudCwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gaFNpemVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbGlk
YXRlVW5pdChoU2l6ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAg
ICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoaFNp
emVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7
CiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTgzOTEsOCArODQyMyw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAgICAgICAg
ICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmFsaWRV
bml0KCphcmd1bWVudCwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgdmVydGlj
YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCphcmd1bWVudCk7CisgICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Cisg
ICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodlNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxhdGlvbik7CiAKICAgICAgICAgICAgIGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKQEAgLTg0MjMsMjgg
Kzg0NTYsMjkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICBpZiAoIWFyZ3MgfHwgIWFy
Z3MtPnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUGFyc2VyVmFsdWUq
IGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYXJndW1lbnQpCisgICAgaWYg
KCFhcmdzLT5jdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQo
KSk7CisKICAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CiAgICAgLy8gTG9vayBmb3IgYW5n
bGUuCi0gICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkp
IHsKLSAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
KmFyZ3VtZW50KSk7CisgICAgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0QW5n
bGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pKTsKIAogICAgICAgICBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1
ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoKmFyZ3VtZW50LCAidG8iKSkgeworICAgIH0g
ZWxzZSBpZiAoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBlcXVhbElnbm9yaW5nQ2FzZShmaXJzdEFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLCAidG8iKSkgewogICAgICAgICAvLyB0byBbIFtsZWZ0IHwgcmln
aHRdIHx8IFt0b3AgfCBib3R0b21dIF0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7
Ci0gICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0QXJn
dW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmICghbmV4dEFyZ3VtZW50KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
ZW5kWCwgZW5kWTsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbjsK
ICAgICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKIAotICAgICAgICBsb2NhdGlvbiA9
IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCphcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKKyAgICAgICAg
bG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250
YWwpOwogICAgICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC04NDUzLDExICs4NDg3LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGVuZFkgPSBsb2NhdGlvbjsKIAotICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgbmV4dEFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3
b3JkKCphcmd1bWVudCwgaXNIb3Jpem9udGFsKTsKKyAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZy
b21TaWRlS2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOwogICAgICAgICBpZiAo
bG9jYXRpb24pIHsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgICAg
ICAgICBpZiAoZW5kWCkKQEAgLTg1MTEsNiArODU0NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NT
VmFsCiAgICAgLy8gWyBlbGxpcHNlIHx8IFsgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gXXsyfSBd
IHwKICAgICAvLyBbIFsgY2lyY2xlIHwgZWxsaXBzZV0gfHwgPHNpemUta2V5d29yZD4gXQogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CiAgICAgICAgIGlmIChhcmd1
bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAg
ICBib29sIGJhZElkZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50LT5p
ZCkgewpAQCAtODUzOCwxOCArODU3MywxOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxH
cmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAg
ICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICh2
YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAodmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKSB7CiAKICAgICAgICAgICAgIGlmIChzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaG9yaXpvbnRhbFNp
emUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAg
IGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uKTsKIAogICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAg
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGggfCBGUGVyY2Vu
dCkpIHsKLSAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZT
aXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVV
bml0KHZTaXplV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAg
ICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZTaXpl
V2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgICAgICAg
YXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkK
QEAgLTg2MTMsMzggKzg2NDksMzkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGll
bnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKIAogYm9vbCBD
U1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYgdmFs
dWVMaXN0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCwgYm9vbCBleHBlY3RDb21tYSkKIHsK
LSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsK
KyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpOwogICAgIGJv
b2wgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSB0cnVlOwogCiAgICAgLy8gTm93IGxvb2sgZm9y
IGNvbG9yIHN0b3BzLgotICAgIHdoaWxlIChjdXJyZW50VmFsdWUpIHsKKyAgICB3aGlsZSAodmFs
dWUpIHsKICAgICAgICAgLy8gTG9vayBmb3IgdGhlIGNvbW1hIGJlZm9yZSB0aGUgbmV4dCBzdG9w
LgogICAgICAgICBpZiAoZXhwZWN0Q29tbWEpIHsKLSAgICAgICAgICAgIGlmICghaXNDb21tYShj
dXJyZW50VmFsdWUpKQorICAgICAgICAgICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVl
TGlzdC5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZSkKKyAgICAgICAgICAg
IHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gPGNvbG9y
LXN0b3A+ID0gPGNvbG9yPiBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0/CiAgICAgICAgIENT
U0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3Jh
ZGllbnRDb2xvck9yS2V5d29yZCgqdGhpcywgKmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIHN0b3Au
bV9jb2xvciA9IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZCgqdGhpcywgKnZhbHVlKTsKICAg
ICAgICAgaWYgKCFzdG9wLm1fY29sb3IpIHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0b3BX
YXNNaWRwb2ludCkgLy8gMiBtaWRwb2ludHMgaW4gYSByb3cgaXMgbm90IGFsbG93ZWQuIFRoaXMg
YWxzbyBjYXRjaGVzIHN0YXJ0aW5nIHdpdGggYSBtaWRwb2ludC4KICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHN0b3AuaXNNaWRwb2ludCA9IHRydWU7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsK
KyAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKIAogICAgICAgICBwcmV2aW91
c1N0b3BXYXNNaWRwb2ludCA9IHN0b3AuaXNNaWRwb2ludDsKIAotICAgICAgICBpZiAoY3VycmVu
dFZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFsaWRVbml0KCpjdXJyZW50VmFsdWUsIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmN1cnJlbnRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFs
dWUpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChzdG9wLmlzTWlkcG9pbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC04ODQ1LDE0ICs4ODgyLDE1IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VJbWFnZVJlc29sdXRpb24oKQogCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAg
ICAgaWYgKCFoYXZlRnJvbUltYWdlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZyb21JbWFnZSkg
ewogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIGhhdmVGcm9tSW1hZ2UgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKCFoYXZlU25hcCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbmFw
KSB7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgaGF2ZVNuYXAgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGUmVz
b2x1dGlvbiB8IEZOb25OZWcpICYmIHZhbHVlLT5mVmFsdWUgPiAwKSB7Ci0gICAgICAgICAgICBs
aXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKCp2YWx1ZSkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZWYWx1ZSA+IDApIHsK
KyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgICAgIGhhdmVSZXNvbHV0aW9uID0gdHJ1ZTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkyMjQsMjkg
KzkyNjIsMzAgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9y
bVZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1l
bnQgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgdW5zaWduZWQgYXJnTnVtYmVyID0gMDsKICAgICB3
aGlsZSAoYXJndW1lbnQpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKICAgICAgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0
ID0gaW5mby51bml0KCk7CiAKICAgICAgICAgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0g
MykgewogICAgICAgICAgICAgLy8gNHRoIHBhcmFtIG9mIHJvdGF0ZTNkKCkgaXMgYW4gYW5nbGUg
cmF0aGVyIHRoYW4gYSBiYXJlIG51bWJlciwgdmFsaWRhdGUgaXQgYXMgc3VjaAotICAgICAgICAg
ICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50LCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQorICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmds
ZSwgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9PSAyKSB7CiAgICAgICAg
ICAgICAvLyAzcmQgcGFyYW0gb2YgdHJhbnNsYXRlM2QoKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdl
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdCgqYXJndW1lbnQsIEZMZW5ndGgsIENTU1N0cmlj
dE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIpIHsK
ICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiB0cmFuc2xhdGVaKCkgY2Fubm90IGJlIGEgcGVy
Y2VudGFnZQotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoKmFyZ3VtZW50LCBGTGVuZ3RoLCBD
U1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051
bWJlcikgewogICAgICAgICAgICAgLy8gMXN0IHBhcmFtIG9mIHBlcnNwZWN0aXZlKCkgbXVzdCBi
ZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgKGRlcHJlY2F0ZWQpIG9yIGxlbmd0aC4KLSAgICAgICAg
ICAgIGlmICghdmFsaWRVbml0KCphcmd1bWVudCwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVn
LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1v
ZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9IGVsc2UgaWYg
KCF2YWxpZFVuaXQoKmFyZ3VtZW50LCB1bml0LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgfSBl
bHNlIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCB1bml0LCBDU1NT
dHJpY3RNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIC8vIEFk
ZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG9wZXJhdGlvbi4KLSAgICAgICAg
dHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKmFyZ3Vt
ZW50KSk7CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICghYXJndW1lbnQpCkBAIC05MzE2LDIxICs5MzU1
LDIyIEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VC
dWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICphcmdzLmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0
KHZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmdzLmN1cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9k
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gdmFsdWUuZlZhbHVlOworICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgorICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTYXR1cmF0ZSBhbmQgQ29udHJhc3QgYWxs
b3cgdmFsdWVzIG92ZXIgMTAwJS4KICAgICAgICAgICAgIGlmIChmaWx0ZXJUeXBlICE9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbgogICAgICAgICAgICAgICAg
ICYmIGZpbHRlclR5cGUgIT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3Bl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIG1heEFsbG93ZWQgPSB2YWx1ZS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDEwMC4wIDogMS4wOworICAg
ICAgICAgICAgICAgIGRvdWJsZSBtYXhBbGxvd2VkID0gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDEwMC4w
IDogMS4wOwogICAgICAgICAgICAgICAgIGlmIChhbW91bnQgPiBtYXhBbGxvd2VkKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQs
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKSk7
CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGFtb3VudCwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4oYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0KSkpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTkzNDAsMTEgKzkzODAsMTIgQEAgUGFzc1JlZlB0cjxXZWJLaXRD
U1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NT
UGFyc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChhcmdzLnNp
emUoKSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKmFyZ3MuY3VycmVu
dCgpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZOdW1iZXIgfCBGUGVyY2Vu
dCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwg
Q1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodmFs
dWUuZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1
ZS51bml0KSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2Fs
Y3VsYXRlZCB2YWx1ZXMuCisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVl
LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPihhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtOTM1NCwxMSArOTM5NSwxMSBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJncy5zaXpl
KCkpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBhcmd1bWVudCA9ICphcmdzLmN1cnJl
bnQoKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3VtZW50LCBGQW5nbGUsIENTU1N0
cmljdE1vZGUpKQorICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVV
bml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKLSAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50KSk7Cisg
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTkzNjgsMTEgKzk0MDksMTEgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2UKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3Muc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgYXJndW1lbnQgPSAqYXJncy5jdXJy
ZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1bWVudCwgRkxlbmd0aCB8IEZO
b25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlm
ICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5l
ZywgQ1NTU3RyaWN0TW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk1NjYsOCArOTYwNyw5IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVRyYW5zZm9ybU9yaWdpbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJ
RCYgcHJvcElkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWjogewotICAgICAgICAgICAgaWYgKHZhbGlk
VW5pdCgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRkxlbmd0aCkpCi0gICAgICAgICAgICAgICAg
dmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50
KCkpOworICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRp
b24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCisgICAgICAgICAgICAgICAgdmFsdWUg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAg
ICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTk4MjMsOCArOTg2NSw5IEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUZXh0SW5kZW50KCkKIAogICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgd2hpbGUgKHZhbHVlKSB7Ci0g
ICAgICAgIGlmICghaGFzTGVuZ3RoT3JQZXJjZW50YWdlICYmIHZhbGlkVW5pdCgqdmFsdWUsIEZM
ZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoKnZhbHVlKSk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmICghaGFzTGVuZ3RoT3JQ
ZXJjZW50YWdlICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8
IEZQZXJjZW50KSkgeworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAgaGFzTGVuZ3Ro
T3JQZXJjZW50YWdlID0gdHJ1ZTsKICAgICAgICAgfQogI2lmIEVOQUJMRShDU1MzX1RFWFQpCkBA
IC0xMDAwMCwyMSArMTAwNDMsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRM
aWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRp
b25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQorUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRpb25Q
ZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQogewogICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZh
bHVlKSk7CiAgICAgCiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rp
b24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBU1NFUlQoIW1f
cGFyc2VkQ2FsY3VsYXRpb24pOwotICAgIG1fcGFyc2VkQ2FsY3VsYXRpb24gPSBDU1NDYWxjVmFs
dWU6OmNyZWF0ZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIHJhbmdlKTsKLSAgICAKLSAg
ICBpZiAoIW1fcGFyc2VkQ2FsY3VsYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICphcmdzLCByYW5nZSk7CiB9CiAKICNkZWZpbmUgRU5EX1RPS0VOIDAK
QEAgLTEyMjA4LDExICsxMjI0NSwxMiBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3Bv
cnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAo
IXZhbHVlKQorICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLT5pZDsKKyAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
CisKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsK
ICAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CiAKICAgICBzd2l0Y2ggKHByb3BJZCkg
ewpAQCAtMTIyMjMsNyArMTIyNjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZURldmljZVdpZHRoIHx8IGlkID09
IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6IC8vIHNob3J0aGFuZAogICAgICAgICByZXR1cm4gcGFy
c2VWaWV3cG9ydFNob3J0aGFuZChwcm9wSWQsIENTU1Byb3BlcnR5TWluV2lkdGgsIENTU1Byb3Bl
cnR5TWF4V2lkdGgsIGltcG9ydGFudCk7CkBAIC0xMjIzNSw3ICsxMjI3Myw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KCp2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwg
Rk5vbk5lZykpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206IC8vIHpvb20g
fCBmaXhlZAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVab29tIHx8IGlkID09IENTU1ZhbHVl
Rml4ZWQpCkBAIC0xMjI1MCw3ICsxMjI4OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdw
b3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKICAgICBpZiAodmFsaWRQcmltaXRpdmUpIHsK
LSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCAqdmFsdWUpOwor
ICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAppbmRleCAyOTg4YTZhMWM5NjVhOTI2MDE5ZTdjODQ4MGNkNGVhN2VlOWJh
N2Q4Li5jNDZlYTkwYjQ0NDQ4YTM5M2NkZjQ1OGRkZDZmYTA4NTUyYmYxZmVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCkBAIC04MCw2ICs4MCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIEdlbmVyYWxT
eW50YXhFcnJvcgogICAgIH07CiAKKyAgICBjbGFzcyBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBWYWx1ZVdpdGhDYWxjdWxhdGlvbihDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCisgICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsg
fQorCisgICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICAgICAgb3BlcmF0b3IgQ1NTUGFyc2VyVmFsdWUmKCkgeyByZXR1cm4gbV92YWx1
ZTsgfQorCisgICAgICAgIENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NhbGN1bGF0aW9uLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVm
UHRyPENTU0NhbGNWYWx1ZT4mJiBjYWxjdWxhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
aXNDYWxjdWxhdGlvbihtX3ZhbHVlKTsKKyAgICAgICAgICAgIG1fY2FsY3VsYXRpb24gPSBjYWxj
dWxhdGlvbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ1NTUGFyc2VyVmFs
dWUmIG1fdmFsdWU7CisgICAgICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1fY2FsY3VsYXRpb247
CisgICAgfTsKKwogICAgIENTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAKICAg
ICB+Q1NTUGFyc2VyKCk7CkBAIC05Miw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9
IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3Is
IGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlE
IGlkZW50LCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVudCwgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24mKTsKICAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGll
cyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+LCBTdHlsZVNo
ZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBzdGF0aWMgUmVmPEltbXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gcGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmlu
ZyYsIEVsZW1lbnQqKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRp
YVF1ZXJ5KGNvbnN0IFN0cmluZyYpOwpAQCAtMjgyLDcgKzMwMyw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRleHRJbmRlbnQoKTsKICAgICAKICAgICBib29sIHBh
cnNlTGluZUJveENvbnRhaW4oYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDYWxjdWxh
dGlvbihDU1NQYXJzZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7Cisg
ICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYs
IENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7CiAKICAgICBib29sIHBhcnNlRm9udEZl
YXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7CiAgICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGlu
Z3MoYm9vbCBpbXBvcnRhbnQpOwpAQCAtNDA0LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZVZpZXdwb3J0UnVsZSgpOwogI2VuZGlmCiAKLSAg
ICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQ
YXJzZXJWYWx1ZSYpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwogCiAg
ICAgc3RhdGljIFVSTCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3Qg
U3RyaW5nJiB1cmwpOwpAQCAtNDk4LDggKzUxOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1
cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgY2hhciogc3VmZml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpOwogICAg
IGJvb2wgaW5TaG9ydGhhbmQoKSBjb25zdCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0K
IAotICAgIGJvb2wgdmFsaWRXaWR0aChDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgdmFsaWRI
ZWlnaHQoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBib29sIHZhbGlkYXRlV2lkdGgoVmFsdWVXaXRo
Q2FsY3VsYXRpb24mKTsKKyAgICBib29sIHZhbGlkYXRlSGVpZ2h0KFZhbHVlV2l0aENhbGN1bGF0
aW9uJik7CiAKICAgICB2b2lkIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwogCkBAIC01Nzgs
OCArNTk5LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsK
IAotICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1fcGFyc2VkQ2FsY3VsYXRpb247Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFj
azsKIAogICAgIC8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5
LCB1c2VkIGluIHBhcnNlVW5pdApAQCAtNjEzLDE2ICs2MzIsMTYgQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzTG9nZ2luZ0Vycm9ycygpOwogICAgIHZvaWQgbG9nRXJyb3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBpbnQgbGluZU51bWJlcik7CiAKLSAgICBib29sIHZhbGlkQ2FsY3VsYXRpb25Vbml0
KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24g
cmVsZWFzZUNhbGMgPSBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGJvb2wgdmFs
aWRhdGVDYWxjdWxhdGlvblVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mLCBVbml0cyk7CiAKICAg
ICBib29sIHNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKENTU1BhcnNlclZhbHVlJiwgVW5pdHMs
IENTU1BhcnNlck1vZGUpOwogCi0gICAgaW5saW5lIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZh
bHVlJiB2YWx1ZSwgVW5pdHMgdW5pdGZsYWdzLCBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlQ29uZGl0
aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlKSB7IHJldHVybiB2
YWxpZFVuaXQodmFsdWUsIHVuaXRmbGFncywgbV9jb250ZXh0Lm1vZGUsIHJlbGVhc2VDYWxjKTsg
fQotICAgIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlJiwgVW5pdHMsIENTU1BhcnNlck1v
ZGUsIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gcmVsZWFzZUNhbGMgPSBEb05vdFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWUpOworICAgIGlubGluZSBib29sIHZhbGlkYXRlVW5pdChWYWx1
ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWUsIFVuaXRzIHVuaXRGbGFncykgeyByZXR1cm4gdmFsaWRh
dGVVbml0KHZhbHVlLCB1bml0RmxhZ3MsIG1fY29udGV4dC5tb2RlKTsgfQorICAgIGJvb2wgdmFs
aWRhdGVVbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiwgVW5pdHMsIENTU1BhcnNlck1vZGUpOwog
CiAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlUXVhZChVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYpOwotICAgIGludCBjb2xvckludEZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwot
ICAgIGRvdWJsZSBwYXJzZWREb3VibGUoQ1NTUGFyc2VyVmFsdWUmLCBSZWxlYXNlUGFyc2VkQ2Fs
Y1ZhbHVlQ29uZGl0aW9uIHJlbGVhc2VDYWxjID0gRG9Ob3RSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVl
KTsKKyAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKKyAg
ICBkb3VibGUgcGFyc2VkRG91YmxlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAgICAgCiAgICAg
ZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbkluZm87CiAgICAgZnJpZW5kIGNsYXNzIEZp
bHRlck9wZXJhdGlvbkluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NT
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCmluZGV4IDg0
NzlhZGQ0MGMyZjU3ZGMxNmIyNzYwNWQ5ZjdmMjE0YTNkNTk3MWQuLmRiZjkyYzQ2YmE2NTllMWQ4
YjdjNjFlOWVkZjMxYjQxMDYzMjlhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
VkdDU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3Bw
CkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIENTU1BhcnNl
cjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBpZiAoIXZhbHVlKQorICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKIAotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1
ZS0+aWQ7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
aWQ7CiAKICAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VkVmFsdWU7CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
ICAgaWQgPj0gQ1NTVmFsdWVTdXBlcikKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5p
dCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eURvbWluYW50QmFzZWxpbmU6CkBAIC04Nyw4ICs4Nyw4IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKICAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7
Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9r
ZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+IHwgaW5oZXJpdAotICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmli
dXRlTW9kZSk7CisgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lam9pbjogICAvLyBt
aXRlciB8IHJvdW5kIHwgYmV2ZWwgfCBpbmhlcml0CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsT3BhY2l0eToKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3RvcE9wYWNpdHk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTnVtYmVyIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVy
Y2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NT
UHJvcGVydHlTaGFwZVJlbmRlcmluZzoKQEAgLTE2Nyw4ICsxNjcsOCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgIEZBTExUSFJPVUdIOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRp
b25Ib3Jpem9udGFsOiAvLyA8YW5nbGU+IChyZXN0cmljdGVkIHRvIF9kZWdfIHBlciBTVkcgMS4x
IHNwZWMpIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19ERUcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyk7CisgICAgICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19ERUcgfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKIAogICAgICAgICAgICAgaWYgKHBhcnNl
ZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC0xODksMTYg
KzE4OSwxNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQ
YWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7CiAgICAgICAgICAgICBlbHNlIGlmICgoaWQgPj0g
Q1NTVmFsdWVBY3RpdmVib3JkZXIgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9
PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6
Y3JlYXRlQ29sb3IoUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Db2xvcihpZCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAg
ICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgIGlmICht
X3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9y
RnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlLT5z
dHJpbmcsIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWlu
dDo6Y3JlYXRlVVJJQW5kQ29sb3IodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcs
IGMpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmROb25lKHZhbHVlLT5zdHJpbmcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSSh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdQYWludCgpOwogCkBAIC0yMTIsNyArMjEyLDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAg
ICBpZiAoKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8
CiAgICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUFsaWNlYmx1ZSAmJiBpZCA8PSBDU1NWYWx1ZVll
bGxvd2dyZWVuKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHQ29sb3I6OmNyZWF0ZUZy
b21TdHJpbmcodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0Nv
bG9yOjpjcmVhdGVGcm9tU3RyaW5nKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5n
KTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKICAgICAg
ICAgZWxzZSAvLyBUT0RPIDogc3ZnY29sb3IgKGljY0NvbG9yKQpAQCAtMjM2LDcgKzIzNiw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDogICAgICAgICAv
LyA8bGVuZ3RoPiB8IGluaGVyaXQKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNl
dDoKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCB8
IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0g
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNW
R0F0dHJpYnV0ZU1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxkYXNoYXJyYXk+IHwgaW5oZXJpdAogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQpAQCAtMjUwLDE1ICsyNTAsMTUgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlTm9ybWFs
KQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KCp2YWx1ZSwgRkxlbmd0aCwgU1ZH
QXR0cmlidXRlTW9kZSk7CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDogICAgLy8gPHVyaT4g
fCBub25lIHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+
dW5pdCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkuc3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0KTsKICAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKICAgICAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CkBAIC0zMDYsNyArMzA2
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKICAgICBjYXNlIENTU1By
b3BlcnR5WDoKICAgICBjYXNlIENTU1Byb3BlcnR5WToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZFVuaXQoKnZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKKyAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICAvLyBJZiB5b3UgY3Jhc2ggaGVyZSwgaXQncyBiZWNhdXNlIHlvdSBhZGRlZCBh
IGNzcyBwcm9wZXJ0eSBhbmQgYXJlIG5vdCBoYW5kbGluZyBpdApAQCAtMzE4LDE0ICszMTgsMTQg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgIGlmICh2YWxpZF9wcmltaXRpdmUpIHsKICAgICAgICAgaWYgKGlk
ICE9IDApCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKGlkKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIHZhbHVlLT51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUGFy
c2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgIGlmIChpc0NhbGN1bGF0aW9uKCp2YWx1ZSkpCi0g
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9wYXJz
ZWRDYWxjdWxhdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfS0haKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS51bml0KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAg
ICAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pKQorICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1
bGF0aW9uLmNhbGN1bGF0aW9uKCkpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
IH0KICAgICBpZiAoIXBhcnNlZFZhbHVlIHx8IChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpICYmICFp
blNob3J0aGFuZCgpKSkKQEAgLTM0MSw5ICszNDEsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiAgICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBib29sIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7CiAgICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9
IHZhbGlkVW5pdCgqdmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIFNWR0F0dHJp
YnV0ZU1vZGUpOworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbigqdmFsdWUpOworICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIFNWR0F0dHJp
YnV0ZU1vZGUpOwogICAgICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgaGFuZGxlIGNhbGN1bGF0
ZWQgdmFsdWVzLgogICAgICAgICBpZiAodmFsdWUtPmlkICE9IDApCiAgICAgICAgICAgICByZXQt
PmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpKTsK
ICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCkBAIC0z
NTMsNyArMzU1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0
cm9rZURhc2hhcnJheSgpCiAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgfQogICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243612</attachid>
            <date>2014-12-20 22:23:46 -0800</date>
            <delta_ts>2014-12-21 17:52:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139334-20141220222346.patch</filename>
            <type>text/plain</type>
            <size>1489</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWRhMGRhOWYxY2JmMzM5
ZWFiN2QzZDEwYWUyZGFjMWU5OWZkYTlmMy4uNjZlNzBiNjdlOWJlYTA4NWNlZmMwOTI0NTVlNTY3
NjFjZmQ3YzRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE0LTEyLTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRml4IG1pc3NpbmcgYXNzZXJ0
aW9uIGluIHIxNzc2MjMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzkzMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbjo6c2V0Q2FsY3VsYXRpb24oKSB3YXMgbWVhbnQg
dG8gaW5jbHVkZSBhbgorICAgICAgICAiaXNDYWxjdWxhdGlvbigpIiBhc3NlcnRpb24gYnV0IEkg
aW5hZHZlcnRlbnRseSBvbWl0dGVkIHRoZQorICAgICAgICBBU1NFUlQoKSBhcm91bmQgdGhlIHN0
YXRlbWVudC4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb246OnNldENhbGN1bGF0aW9uKToKKworMjAx
NC0xMi0yMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEdldCBy
aWQgb2YgZXJyb3ItcHJvbmUgUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiBhcmd1bWVu
dCBpbiBDU1NQYXJzZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzOTMzNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggYzQ2ZWE5MGI0NDQ0OGEz
OTNjZGY0NThkZGQ2ZmEwODU1MmJmMWZlZS4uNDdjNjkwOTE1NWQ4OWIxNzRmYzE5NDZjOTA4ZmNl
MGI3NjIzYmU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2NhbGN1bGF0aW9uLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVmUHRy
PENTU0NhbGNWYWx1ZT4mJiBjYWxjdWxhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgaXND
YWxjdWxhdGlvbihtX3ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKG1f
dmFsdWUpKTsKICAgICAgICAgICAgIG1fY2FsY3VsYXRpb24gPSBjYWxjdWxhdGlvbjsKICAgICAg
ICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>