<?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>213631</bug_id>
          
          <creation_ts>2020-06-25 17:27:57 -0700</creation_ts>
          <short_desc>Convert ContentSecurityPolicy related parsers over to using StringParsingBuffer</short_desc>
          <delta_ts>2020-06-26 14:09:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>213460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mkwst</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666316</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 17:27:57 -0700</bug_when>
    <thetext>Convert ContentSecurityPolicy related parsers over to using StringParsingBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666341</commentid>
    <comment_count>1</comment_count>
      <attachid>402836</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 18:12:25 -0700</bug_when>
    <thetext>Created attachment 402836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666345</commentid>
    <comment_count>2</comment_count>
      <attachid>402839</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 18:19:35 -0700</bug_when>
    <thetext>Created attachment 402839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666479</commentid>
    <comment_count>3</comment_count>
      <attachid>402874</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 09:35:33 -0700</bug_when>
    <thetext>Created attachment 402874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666502</commentid>
    <comment_count>4</comment_count>
      <attachid>402874</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-26 10:00:29 -0700</bug_when>
    <thetext>Comment on attachment 402874
Patch

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

&gt; Source/WebCore/html/parser/ParsingUtilities.h:38
&gt; +template&lt;typename CharType&gt;
&gt; +inline bool isNotASCIISpace(CharType c)

CharacterType, single line, constexpr?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:44
&gt; +template&lt;typename CharType, typename DelimiterType&gt;
&gt; +bool skipExactly(const CharType*&amp; position, const CharType* end, DelimiterType delimiter)

CharacterType, single line?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:54
&gt; +template&lt;typename CharType, typename DelimiterType&gt;
&gt; +bool skipExactly(StringParsingBuffer&lt;CharType&gt;&amp; parsingBuffer, DelimiterType delimiter)

CharacterType, single line?

I suggest naming the local variable just &quot;buffer&quot;. Single words seem to work well in short functions.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:74
&gt; +template&lt;typename CharType, bool characterPredicate(CharType)&gt;
&gt; +bool skipExactly(StringParsingBuffer&lt;CharType&gt;&amp; parsingBuffer)

CharacterType, single line?

I suggest naming the local variable just &quot;buffer&quot;. Single words seem to work well in short functions.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:84
&gt; +template&lt;typename CharType, typename DelimiterType&gt;
&gt; +void skipUntil(const CharType*&amp; position, const CharType* end, DelimiterType delimiter)

CharacterType, single line?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:91
&gt; +template&lt;typename CharType, typename DelimiterType&gt;
&gt; +void skipUntil(StringParsingBuffer&lt;CharType&gt;&amp; parsingBuffer, DelimiterType delimiter)

CharacterType, single line?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:105
&gt;  template&lt;typename CharType, bool characterPredicate(CharType)&gt;
&gt; +void skipUntil(StringParsingBuffer&lt;CharType&gt;&amp; parsingBuffer)

CharacterType, single line, &quot;buffer&quot;?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:119
&gt;  template&lt;typename CharType, bool characterPredicate(CharType)&gt;
&gt; +void skipWhile(StringParsingBuffer&lt;CharType&gt;&amp; parsingBuffer)

CharacterType, single line, &quot;buffer&quot;?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:143
&gt; +template&lt;typename CharacterType, unsigned lowercaseLettersLength&gt;

I think that &quot;length&quot; is not a great name for the size of an array that contains a null-terminated string. We use it elsewhere, but it seems like a mistake.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:146
&gt; +    if (parsingBuffer.lengthRemaining() &lt; lowercaseLettersLength - 1)

Seems like the whole function would be better if it said:

    constexpr auto lowercaseLettersLength = lowercaseLettersArraySize - 1;
    ASSERT(!lowercaseLetters[lowercaseLettersLength]);

Maybe with some kind of comment, and might need to be the right kind of assert, maybe not ASSERT.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:150
&gt; +    parsingBuffer += (lowercaseLettersLength - 1);

Not sure the parentheses make this clearer.

&gt; Source/WebCore/loader/ResourceCryptographicDigest.cpp:37
&gt; +template&lt;typename CharacterType&gt; static Optional&lt;ResourceCryptographicDigest::Algorithm&gt; parseHashAlgorithmAdvancingPosition(StringParsingBuffer&lt;CharacterType&gt;&amp; parsingBuffer)

&quot;buffer&quot;

&gt; Source/WebCore/loader/ResourceCryptographicDigest.cpp:52
&gt; +template&lt;typename CharacterType&gt; static Optional&lt;ResourceCryptographicDigest&gt; parseCryptographicDigestImpl(StringParsingBuffer&lt;CharacterType&gt;&amp; parsingBuffer)

&quot;buffer&quot;

&gt; Source/WebCore/loader/ResourceCryptographicDigest.cpp:67
&gt; +    skipExactly&lt;CharacterType&gt;(parsingBuffer, &apos;=&apos;);
&gt; +    skipExactly&lt;CharacterType&gt;(parsingBuffer, &apos;=&apos;);

Compiler can’t deduce CharacterType?

&gt; Source/WebCore/loader/ResourceCryptographicDigest.cpp:82
&gt; +Optional&lt;ResourceCryptographicDigest&gt; parseCryptographicDigest(StringParsingBuffer&lt;UChar&gt;&amp; parsingBuffer)

&quot;buffer&quot; (I’ll stop commenting this each time)

&gt; Source/WebCore/page/csp/ContentSecurityPolicyMediaListDirective.cpp:39
&gt; +template&lt;typename CharacterType&gt;
&gt; +static bool isMediaTypeCharacter(CharacterType c)

Single-line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666529</commentid>
    <comment_count>5</comment_count>
      <attachid>402884</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 11:59:40 -0700</bug_when>
    <thetext>Created attachment 402884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666530</commentid>
    <comment_count>6</comment_count>
      <attachid>402884</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-26 12:02:38 -0700</bug_when>
    <thetext>Comment on attachment 402884
Patch

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

&gt; Source/WebCore/html/parser/ParsingUtilities.h:37
&gt; +template&lt;typename CharacterType&gt; inline bool isNotASCIISpace(CharacterType c)

Just curious, why not constexpr? Also, really no need to write inline here — can’t imagine it has any effect.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:127
&gt; +    if (!WTF::equalLettersIgnoringASCIICase(position, lowercaseLettersLength - 1, lowercaseLetters))

I accidentally tricked you into breaking the code! The &quot;-1&quot; here is now wrong.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:129
&gt; +    position += (lowercaseLettersLength - 1);

Ditto.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:141
&gt; +    buffer += (lowercaseLettersLength);

Parentheses here are peculiar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666531</commentid>
    <comment_count>7</comment_count>
      <attachid>402884</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-26 12:02:39 -0700</bug_when>
    <thetext>Comment on attachment 402884
Patch

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

&gt; Source/WebCore/html/parser/ParsingUtilities.h:37
&gt; +template&lt;typename CharacterType&gt; inline bool isNotASCIISpace(CharacterType c)

Just curious, why not constexpr? Also, really no need to write inline here — can’t imagine it has any effect.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:127
&gt; +    if (!WTF::equalLettersIgnoringASCIICase(position, lowercaseLettersLength - 1, lowercaseLetters))

I accidentally tricked you into breaking the code! The &quot;-1&quot; here is now wrong.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:129
&gt; +    position += (lowercaseLettersLength - 1);

Ditto.

&gt; Source/WebCore/html/parser/ParsingUtilities.h:141
&gt; +    buffer += (lowercaseLettersLength);

Parentheses here are peculiar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666535</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 12:12:58 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 402884 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402884&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/ParsingUtilities.h:37
&gt; &gt; +template&lt;typename CharacterType&gt; inline bool isNotASCIISpace(CharacterType c)
&gt; 
&gt; Just curious, why not constexpr? Also, really no need to write inline here —
&gt; can’t imagine it has any effect.

No good reason, just didn&apos;t think of it, will fix.

&gt; 
&gt; &gt; Source/WebCore/html/parser/ParsingUtilities.h:127
&gt; &gt; +    if (!WTF::equalLettersIgnoringASCIICase(position, lowercaseLettersLength - 1, lowercaseLetters))
&gt; 
&gt; I accidentally tricked you into breaking the code! The &quot;-1&quot; here is now
&gt; wrong.
&gt; 
&gt; &gt; Source/WebCore/html/parser/ParsingUtilities.h:129
&gt; &gt; +    position += (lowercaseLettersLength - 1);
&gt; 
&gt; Ditto.

Yikes.  

&gt; 
&gt; &gt; Source/WebCore/html/parser/ParsingUtilities.h:141
&gt; &gt; +    buffer += (lowercaseLettersLength);
&gt; 
&gt; Parentheses here are peculiar.

Yeah, those are dumb. Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666540</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 12:20:44 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; (In reply to Darin Adler from comment #7)
&gt; &gt; Comment on attachment 402884 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=402884&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/parser/ParsingUtilities.h:37
&gt; &gt; &gt; +template&lt;typename CharacterType&gt; inline bool isNotASCIISpace(CharacterType c)
&gt; &gt; 
&gt; &gt; Just curious, why not constexpr? Also, really no need to write inline here —
&gt; &gt; can’t imagine it has any effect.
&gt; 
&gt; No good reason, just didn&apos;t think of it, will fix.

Oh, actually, now I remember why. isASCIISpace is not constexpr yet. Was going to address that in a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666561</commentid>
    <comment_count>10</comment_count>
      <attachid>402889</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 12:57:14 -0700</bug_when>
    <thetext>Created attachment 402889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666584</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-26 13:48:15 -0700</bug_when>
    <thetext>Occurs to me that having this tightly bound pair of pointer/end can be used not just for refactoring, but for additional hardening. If some of those assertions are changed to RELEASE_ASSERT.

Of course, then it makes it a consequential decision if you get a pointer from the buffer and use it, since that gets rid of the hardening.

Seems like this is not our current goal, but an interesting future possibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666593</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-26 13:58:07 -0700</bug_when>
    <thetext>Committed r263581: &lt;https://trac.webkit.org/changeset/263581&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402889.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666595</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-26 13:59:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/64820967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666596</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-26 13:59:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/64820968&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666599</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 14:09:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Occurs to me that having this tightly bound pair of pointer/end can be used
&gt; not just for refactoring, but for additional hardening. If some of those
&gt; assertions are changed to RELEASE_ASSERT.
&gt; 
&gt; Of course, then it makes it a consequential decision if you get a pointer
&gt; from the buffer and use it, since that gets rid of the hardening.
&gt; 
&gt; Seems like this is not our current goal, but an interesting future
&gt; possibility.

I think there are additional assertions (not necessarily release ones) beyond what is there so far such as adding the UnderlyingString type checks that StringView has to StringParsingBuffer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402836</attachid>
            <date>2020-06-25 18:12:25 -0700</date>
            <delta_ts>2020-06-25 18:17:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213631-20200625181224.patch</filename>
            <type>text/plain</type>
            <size>77925</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDIwLTA2LTI1ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IENvbnRlbnRTZWN1cml0
eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkb3B0
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYWNyb3NzIENTUCBjb2RlLgorICAgICAgICAtIFJlbW92ZSBV
VEYtMTYgdXBjb252ZXJzaW9ucyBpbiBDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QsCisgICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlIGFuZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lgor
CisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBodG1sL3BhcnNlci9QYXJzaW5n
VXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc05vdEFTQ0lJU3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6c2tpcEV4YWN0bHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyUHJl
ZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBVbnRpbCk6CisgICAgICAgIChXZWJDb3Jl
Ojpza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKToKKyAgICAgICAgQWRkIG92ZXJsb2FkcyBm
b3IgZWFjaCBoZWxwZXIgdGhhdCB0YWtlIGEgU3RyaW5nUGFyc2luZ0J1ZmZlci4gQWxzbyBhZGQg
YW4gb3ZlcmxvYWQgb2YKKyAgICAgICAgc2tpcEV4YWN0bHkgdGhhdCB0YWtlcyBhIGNoYXJhY3Rl
ciBhcnJheSAobW9kZWxlZCBvbiBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlLCBidXQKKyAg
ICAgICAgdXNpbmcgV1RGOjplcXVhbCByYXRoZXIgdGhhbiBXVEY6OmVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKS4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5n
UG9zaXRpb24pOgorICAgICAgICBDb252ZXJ0IHRvIHVzZSBhbiBPcHRpb25hbCByZXR1cm4gdmFs
dWUgcmF0aGVyIHRoYW4gb3V0cGFyYW1ldGVyICsgYm9vbC4KKworICAgICAgICAoV2ViQ29yZTo6
cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNy
eXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5oOgorICAgICAgICBVc2UgU3RyaW5nUGFyc2luZ0J1ZmZlciByYXRoZXIgdGhhbiByYXcg
cG9pbnRlcnMgZm9yIHBhcnNpbmcuCisgCisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlSW50
ZWdyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNwbGl0T25TcGFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VJbnRlZ3JpdHlNZXRhZGF0YSk6CisgICAgICAgIFVzZSBTdHJpbmdQYXJz
aW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgcmF0aGVyIHRoYW4gcmF3IHBv
aW50ZXJzIGZvciBwYXJzaW5nLgorCisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlk
UmVjZWl2ZUhlYWRlcik6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyIGFuZCByZWFk
Q2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAg
ICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLgorCisgICAgICAgICogcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNE
aXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVS
SSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjpzZXRDU1BEaXJlY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJl
cXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGREaXJlY3RpdmUpOgorICAg
ICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaDoKKyAg
ICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2lu
ZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIEFsc28gc3dpdGNoIHRvIHVzaW5nIE9wdGlvbmFsIGZvciBy
ZXR1cm4gdmFsdWVzCisgICAgICAgIHJhdGhlciB0aGFuIG91dHBhcmFtZXRlciArIGJvb2wuIFRv
IG1ha2UgdGhpbmdzIHJlYWQgbW9yZSBjbGVhbmx5LCBwYWNrYWdlIHVwIG5hbWUKKyAgICAgICAg
YW5kIHZhbHVlIHBhaXIgaW50byBhIG5ldyBQYXJzZWREaXJlY3RpdmUgc3RydWN0IHRoYXQgY2Fu
IGJlIHBhc3NlZCBhcm91bmQgbW9yZSBlYXNpbHkuCisKKyAgICAgICAgKiBwYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNNZWRpYVR5cGVDaGFyYWN0ZXIpOiAKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UpOgorICAgICAgICBVc2UgU3RyaW5n
UGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5u
ZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKS4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6aXNIb3N0Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGF0aENvbXBv
bmVudENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NjaGVtZUNvbnRpbnVhdGlvbkNo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc05vdENvbG9uT3JTbGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjppc1NvdXJjZUxpc3ROb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uY2VDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VOb25j
ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZUhhc2hTb3VyY2UpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3QuaDoKKyAgICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5k
IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8K
KyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIEFsc28gc3dpdGNo
IHRvIHVzaW5nIE9wdGlvbmFsIGZvciByZXR1cm4gdmFsdWVzCisgICAgICAgIHJhdGhlciB0aGFu
IG91dHBhcmFtZXRlciArIGJvb2wuIFRvIG1ha2UgdGhpbmdzIHJlYWQgbW9yZSBjbGVhbmx5LCBw
YWNrYWdlIHVwIHNvdXJjZQorICAgICAgICByZXR1cm4gdmFsdWVzIGludG8gc3RydWN0cyB0aGF0
IGNhbiBiZSBtb3JlIGVhc2lseSByZXR1cm5lZCAvIHBhc3NlZCBhcm91bmQuCisKIDIwMjAtMDYt
MjUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCB0aGUgUGFpbnRMYXllckZsYWcgZW51bSB0byBhbiBlbnVtIGNsYXNzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmgK
IAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFyc2VyL0hU
TUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmgJKHJldmlzaW9u
IDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotaW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShDaGFyVHlwZSBjKQog
ewogICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhclR5cGU+Ci1ib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24s
IGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgorYm9vbCBza2lwRXhhY3RseShj
b25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBEZWxpbWl0ZXJU
eXBlIGRlbGltaXRlcikKIHsKICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09
IGRlbGltaXRlcikgewogICAgICAgICArK3Bvc2l0aW9uOwpAQCAtNDksNiArNTAsMTYgQEAgYm9v
bCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+
Citib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5n
QnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICBpZiAocGFyc2luZ0J1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gZGVsaW1pdGVy
KSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJv
b2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIGJvb2wgc2tpcEV4YWN0bHkoY29uc3Qg
Q2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsKQEAgLTU5LDEzICs3
MCwzMCBAQCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLXZvaWQgc2tpcFVu
dGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJU
eXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3Rl
clByZWRpY2F0ZShDaGFyVHlwZSk+Citib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBhcnNpbmdCdWZm
ZXIpKSB7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUs
IHR5cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSom
IHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikK
IHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikK
ICAgICAgICAgKytwb3NpdGlvbjsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5
cGVuYW1lIERlbGltaXRlclR5cGU+Cit2b2lkIHNraXBVbnRpbChTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgRGVsaW1pdGVyVHlwZSBkZWxpbWl0ZXIpCit7Cisg
ICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJz
aW5nQnVmZmVyICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5
cGUpPgogdm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hh
clR5cGUqIGVuZCkKIHsKQEAgLTc0LDYgKzEwMiwxMyBAQCB2b2lkIHNraXBVbnRpbChjb25zdCBD
aGFyVHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29s
IGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBVbnRpbChTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICB3aGlsZSAocGFyc2lu
Z0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgq
cGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZv
aWQgc2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBl
bmQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cG9zaXRpb24pKQpAQCAtODEsMjIgKzExNiw2MCBAQCB2b2lkIHNraXBXaGlsZShjb25zdCBDaGFy
VHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNo
YXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBXaGlsZShTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICB3aGlsZSAocGFyc2luZ0J1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwYXJz
aW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogdm9pZCBy
ZXZlcnNlU2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBl
KiBzdGFydCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPj0gc3RhcnQgJiYgY2hhcmFjdGVyUHJl
ZGljYXRlKCpwb3NpdGlvbikpCiAgICAgICAgIC0tcG9zaXRpb247CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxldHRlcnNMZW5ndGg+Citib29sIHNraXBF
eGFjdGx5KGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBjb25zdCBjaGFyICgmbGV0dGVycylbbGV0dGVyc0xlbmd0aF0pCit7CisgICAgaWYg
KHBvc2l0aW9uICsgbGV0dGVyc0xlbmd0aCA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghV1RGOjplcXVhbChwb3NpdGlvbiwgbGV0dGVyc0xlbmd0aCAtIDEsIGxldHRlcnMp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24gKz0gKGxldHRlcnNMZW5ndGgg
LSAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZSwgdW5zaWduZWQgbGV0dGVyc0xlbmd0aD4gY29uc3RleHByIGJvb2wgc2tpcEV4YWN0bHko
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSgmbGV0dGVycylbbGV0dGVyc0xlbmd0aF0pCit7CisgICAgaWYgKHBhcnNp
bmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCBsZXR0ZXJzTGVuZ3RoIC0gMSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVhbChwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCksIGxldHRlcnNMZW5ndGggLSAxLCBsZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHBhcnNpbmdCdWZmZXIgKz0gKGxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgbG93ZXJj
YXNlTGV0dGVyc0xlbmd0aD4KIGJvb2wgc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShjb25z
dCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29u
c3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQogewog
ICAgIGlmIChwb3NpdGlvbiArIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggPiBlbmQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocG9zaXRpb24sIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxLCBsb3dlcmNhc2VMZXR0ZXJz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0
ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBib29sIHJlc3VsdCA9
IFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGxvd2VyY2FzZUxl
dHRlcnNMZW5ndGggLSAxLCBsb3dlcmNhc2VMZXR0ZXJzKTsKLSAgICBpZiAocmVzdWx0KQotICAg
ICAgICBwb3NpdGlvbiArPSAobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOwotICAgIHJldHVy
biByZXN1bHQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dl
cmNhc2VMZXR0ZXJzTGVuZ3RoPgorYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIGNvbnN0IGNo
YXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoXSkKK3sKKyAgICBp
ZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IGxvd2VyY2FzZUxldHRlcnNMZW5n
dGggLSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFXVEY6OmVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSwgbG93ZXJjYXNlTGV0
dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcGFyc2luZ0J1ZmZlciArPSAobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNw
cAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwNCArMzAsOTQgQEAK
ICNpbmNsdWRlIDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VIYXNoQWxnb3JpdGht
QWR2YW5jaW5nUG9zaXRpb24oY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBlbmQsIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGht
JiBhbGdvcml0aG0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0
aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0+IHBhcnNlSGFzaEFs
Z29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIHBhcnNpbmdCdWZmZXIpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd291bGQgYmUgbXVjaCBj
bGVhbmVyIHdpdGggYSBsb29rdXAgdGFibGUgb2YgcGFpcnMgb2YgbGFiZWwgLyBhbGdvcml0aG0g
ZW51bSB2YWx1ZXMsIGJ1dCBJIGNhbid0CiAgICAgLy8gZmlndXJlIG91dCBob3cgdG8ga2VlcCB0
aGUgbGFiZWxzIGNvbXBpbGV0aW1lIHN0cmluZ3MgZm9yIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UuCiAKLSAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwg
ZW5kLCAic2hhMjU2IikpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJz
aGEzODQiKSkgewotICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3Q6OkFsZ29yaXRobTo6U0hBMzg0OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTUxMiIp
KSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEE1MTI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAoc2tp
cEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMjU2IikpCisgICAg
ICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBMjU2
OworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICJz
aGEzODQiKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEEzODQ7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFy
c2luZ0J1ZmZlciwgInNoYTUxMiIpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTUxMjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlw
dG9ncmFwaGljRGlnZXN0SW1wbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdEltcGwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYgKCFwYXJz
ZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlvbiwgZW5kLCBhbGdvcml0aG0p
KQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRp
b24ocGFyc2luZ0J1ZmZlcik7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0
aW9uLCBlbmQsICctJykpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJz
aW5nQnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24s
IGVuZCk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0n
KTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwor
ICAgIGF1dG8gYmVnaW5IYXNoVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBh
cnNpbmdCdWZmZXIpOworICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZm
ZXIsICI9PSIpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlm
IChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8dWludDhfdD4gZGlnZXN0OwotICAgIFN0
cmluZ1ZpZXcgaGFzaFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZh
bHVlKTsKKyAgICBTdHJpbmdWaWV3IGhhc2hWYWx1ZShiZWdpbkhhc2hWYWx1ZSwgcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpOwogICAgIGlmICghYmFzZTY0RGVjb2Rl
KGhhc2hWYWx1ZSwgZGlnZXN0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKSB7CiAgICAgICAgIGlm
ICghYmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0KSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdCB7IGFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CisgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFdURk1vdmUoZGlnZXN0KSB9Owog
fQogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBh
cnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFs
PFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNv
bnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5n
QnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9n
cmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChjb25zdCBDaGFyYWN0
ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlm
IChwb3NpdGlvbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0
aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlvbiwgZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8g
YWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24ocGFyc2luZ0J1
ZmZlcik7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICct
JykpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAn
LScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOworICAgIGF1dG8gYmVn
aW5IYXNoVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIp
OworICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICI9PSIpOwog
Ci0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7
IGFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZh
bHVlKSB9OworICAgIHJldHVybiBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsg
KmFsZ29yaXRobSwgU3RyaW5nKGJlZ2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCkgLSBiZWdpbkhhc2hWYWx1ZSkgfTsKIH0KIAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBV
Q2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFy
c2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJu
IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQog
Ci1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29k
ZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBl
bmQpCitPcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVu
Y29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJz
aW5nQnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0
SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwocGFyc2luZ0J1ZmZlcik7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25z
dCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTEg
QEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlcwogICAgIFN0cmluZyBk
aWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
KTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8
TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4s
IGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVu
Y29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiAgICAgewogICAgICAgICAvLyBJbml0aWFs
aXplIGhhc2hlcyB0byBiZSBzb21ldGhpbmcgb3RoZXIgV1RGOjpudWxsb3B0LCB0byBpbmRpY2F0
ZQogICAgICAgICAvLyB0aGF0IGF0IGxlYXN0IG9uZSB0b2tlbiB3YXMgc2VlbiwgYW5kIHRodXMg
c2V0dGluZyB0aGUgZW1wdHkgZmxhZwpAQCAtNTgsMTkgKzU5LDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKCFtX2RpZ2VzdHMpCiAgICAgICAgICAgICBtX2RpZ2VzdHMgPSBWZWN0b3I8RW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4geyB9OwogCi0gICAgICAgIGF1dG8gZGlnZXN0
ID0gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICAg
ICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBhcnNpbmdC
dWZmZXIpOwogICAgICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAvLyBUaGUgc3BlYyBhbGxvd3MgZm9yIG9wdGlvbnMgZm9sbG93aW5nIHRoZSBk
aWdlc3QsIGJ1dCBzbyBmYXIsIG5vCiAgICAgICAgIC8vIHNwZWNpZmljIG9wdGlvbnMgaGF2ZSBi
ZWVuIHNwZWNpZmllZC4gVGh1cywgd2UganVzdCBwYXJzZSBhbmQgaWdub3JlCiAgICAgICAgIC8v
IHRoZW0uIFRoZWlyIHN5bnRheCBpcyBhICc/JyBmb2xsb3cgYnkgYW55IG51bWJlciBvZiBWQ0hB
UnMuCi0gICAgICAgIGlmIChza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5k
LCAnPycpKQotICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBv
c2l0aW9uLCBlbmQpOworICAgICAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFy
c2luZ0J1ZmZlciwgJz8nKSkKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBp
c1ZDSEFSPihwYXJzaW5nQnVmZmVyKTsKIAogICAgICAgICAvLyBBZnRlciB0aGUgYmFzZTY0IHZh
bHVlIGFuZCBvcHRpb25zLCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3Np
dGlvbgogICAgICAgICAvLyBzaG91bGQgZWl0aGVyIGJlIHRoZSBlbmQgb3IgYSBzcGFjZS4KLSAg
ICAgICAgaWYgKHBvc2l0aW9uICE9IGVuZCAmJiAhaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAg
ICAgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkgJiYgIWlzSFRNTFNwYWNlKCpwYXJzaW5n
QnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBtX2RpZ2VzdHMt
PmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsKQEAgLTg0LDE3ICs4NSwxNCBAQCBwcml2YXRlOgog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4K
LXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqIGJl
Z2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZ1bmN0b3ImJiBmdW5jdG9yKQorc3RhdGlj
IGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiBwYXJzaW5nQnVmZmVyLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKLSAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNIVE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9u
IDwgZW5kKSB7Ci0gICAgICAgIGlmICghZnVuY3Rvcihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEhUTUxTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7Ci0KLSAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkpIHsKKyAgICAgICAgaWYgKCFmdW5jdG9yKHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90SFRNTFNwYWNlPihwYXJzaW5nQnVmZmVy
KTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5n
QnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTEwNSwxMSArMTAzLDEwIEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3IKIAogICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Pj4gcmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0
cmluZ0ltcGwmIHN0cmluZ0ltcGwgPSAqaW50ZWdyaXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlm
IChzdHJpbmdJbXBsLmlzOEJpdCgpKQotICAgICAgICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nSW1wbC5jaGFyYWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5n
dGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVs
c2UKLSAgICAgICAgc3BsaXRPblNwYWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdJbXBsLmNoYXJhY3RlcnMxNigpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0
YWRhdGFQYXJzZXI8VUNoYXI+IHsgcmVzdWx0IH0pOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyhpbnRlZ3JpdHlNZXRhZGF0YSwgWyZyZXN1bHRdIChhdXRvIHBhcnNpbmdCdWZmZXIpIHsK
KyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdC
dWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworICAgICAgICBzcGxpdE9uU3BhY2VzKHBhcnNpbmdCdWZm
ZXIsIEludGVncml0eU1ldGFkYXRhUGFyc2VyPENoYXJhY3RlclR5cGU+IHsgcmVzdWx0IH0pOwor
ICAgIH0pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkocmV2aXNpb24gMjYzNTIy
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogCkBAIC0yMTIsMjIgKzIxMywy
MyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2ZUhlCiAgICAgLy8gUkZD
MjYxNiwgc2VjdGlvbiA0LjIgc3BlY2lmaWVzIHRoYXQgaGVhZGVycyBhcHBlYXJpbmcgbXVsdGlw
bGUgdGltZXMgY2FuCiAgICAgLy8gYmUgY29tYmluZWQgd2l0aCBhIGNvbW1hLiBXYWxrIHRoZSBo
ZWFkZXIgc3RyaW5nLCBhbmQgcGFyc2UgZWFjaCBjb21tYQogICAgIC8vIHNlcGFyYXRlZCBjaHVu
ayBhcyBhIHNlcGFyYXRlIGhlYWRlci4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KGhlYWRlcikudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2lu
ID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBj
b25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyBoZWFkZXIubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwg
JywnKTsKLQotICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQotICAgICAgICAv
LyAgICAgICAgXiAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQo
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9tKSk7Ci0KLSAgICAgICAg
Ly8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJvbSB0aGUgY3Vy
cmVudCBwb3NpdGlvbi4KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRp
b24gPT0gJywnKTsKLSAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcs
Jyk7Ci0gICAgICAgIGJlZ2luID0gcG9zaXRpb247Ci0gICAgfQorICAgIHJlYWRDaGFyYWN0ZXJz
Rm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgYXV0
byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAgICAgd2hpbGUg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBz
a2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgLy8gaGVhZGVyMSxo
ZWFkZXIyIE9SIGhlYWRlcjEKKyAgICAgICAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAg
ICAgXgorICAgICAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSAtIGJlZ2luKSwgdHlwZSwgcG9saWN5RnJvbSkpOworCisgICAgICAgICAgICAv
LyBTa2lwIHRoZSBjb21tYSwgYW5kIGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRoZSBjdXJy
ZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8
fCAqcGFyc2luZ0J1ZmZlciA9PSAnLCcpOworICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgJywnKTsKKyAgICAgICAgICAgIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpOworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAgICBpZiAobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTYgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eUNv
bnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVy
KFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBp
c0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBp
c0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQogCi1zdGF0aWMgYm9vbCBpc0Rp
cmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKENoYXJhY3RlclR5
cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMpIHx8IChjID49IDB4MjEgJiYgYyA8
PSAweDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CkBAIC0zMzMsMjI0ICszMzQsMjE4IEBA
IHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDoKICAgICBpZiAocG9saWN5
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9u
ICsgcG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lw
VW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUs
IHZhbHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4sIHBvc2l0
aW9uLCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkp
OwotICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQ
b2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBn
cmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKQot
ICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2
TWV0YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHBvbGljeSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAg
ICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gZGlyZWN0aXZlQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZlciwgJzsnKTsKKworICAgICAgICAgICAg
aWYgKGF1dG8gZGlyZWN0aXZlID0gcGFyc2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7
IGRpcmVjdGl2ZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIWRpcmVjdGl2ZS0+bmFtZS5pc0VtcHR5KCkpOworICAgICAgICAgICAg
ICAgIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6
SW5oZXJpdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJbkhUVFBF
cXVpdk1ldGEoZGlyZWN0aXZlLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChw
b2xpY3lGcm9tID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVk
Rm9yUGx1Z2luRG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OnBsdWdpblR5cGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJv
bSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdp
bkRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykK
LSAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZERpcmVjdGl2ZShXVEZNb3Zl
KCpkaXJlY3RpdmUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZERpcmVjdGl2ZShu
YW1lLCB2YWx1ZSk7Ci0gICAgICAgIH0KIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5k
IHx8ICpwb3NpdGlvbiA9PSAnOycpOwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRp
b24sIGVuZCwgJzsnKTsKLSAgICB9CisgICAgICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5h
dEVuZCgpIHx8ICpwYXJzaW5nQnVmZmVyID09ICc7Jyk7CisgICAgICAgICAgICBza2lwRXhhY3Rs
eShwYXJzaW5nQnVmZmVyLCAnOycpOworICAgICAgICB9CisgICAgfSk7CiB9CiAKIC8vIGRpcmVj
dGl2ZSAgICAgICAgID0gKldTUCBbIGRpcmVjdGl2ZS1uYW1lIFsgV1NQIGRpcmVjdGl2ZS12YWx1
ZSBdIF0KIC8vIGRpcmVjdGl2ZS1uYW1lICAgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiLSIgKQog
Ly8gZGlyZWN0aXZlLXZhbHVlICAgPSAqKCBXU1AgLyA8VkNIQVIgZXhjZXB0ICI7Ij4gKQogLy8K
LWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmlu
ZyYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBhdXRvIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8UGFyc2VkRGly
ZWN0aXZlPgogewotICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHZhbHVl
LmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKICAgICAv
LyBFbXB0eSBkaXJlY3RpdmUgKGUuZy4gIjs7OyIpLiBFeGl0IGVhcmx5LgotICAgIGlmIChwb3Np
dGlvbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZl
ci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgVUNo
YXIqIG5hbWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3Rp
dmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIG5hbWVCZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNE
aXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKIAogICAgIC8vIFRoZSBkaXJl
Y3RpdmUtbmFtZSBtdXN0IGJlIG5vbi1lbXB0eS4KLSAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0
aW9uKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlv
biwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3Ry
aW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChuYW1lQmVnaW4gPT0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKSB7Cisg
ICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdC
dWZmZXIpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJp
bmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBuYW1lID0gU3RyaW5nKG5h
bWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pOworICAgIGF1dG8gbmFtZSA9IFN0cmluZyhu
YW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbik7CiAKLSAgICBp
ZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocGFyc2lu
Z0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92
ZShuYW1lKSwgeyB9IH07CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJU3Bh
Y2U+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJ
SVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0
ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwg
aXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xp
Y3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIC0gbmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgfQogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9u
LCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNp
bmdCdWZmZXIpOwogCi0gICAgY29uc3QgVUNoYXIqIHZhbHVlQmVnaW4gPSBwb3NpdGlvbjsKLSAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBl
bmQpOworICAgIGF1dG8gdmFsdWVCZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAg
ICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcj4ocGFy
c2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKSB7Ci0gICAgICAgIG1fcG9s
aWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1lLCBTdHJpbmcodmFs
dWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpIHsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52
YWxpZERpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBwYXJz
aW5nQnVmZmVyLmVuZCgpIC0gdmFsdWVCZWdpbikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAogICAgIC8vIFRoZSBkaXJlY3RpdmUtdmFsdWUgbWF5IGJlIGVtcHR5Lgot
ICAgIGlmICh2YWx1ZUJlZ2luID09IHBvc2l0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAodmFsdWVCZWdpbiA9PSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgIHJl
dHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIHZhbHVl
ID0gU3RyaW5nKHZhbHVlQmVnaW4sIHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgYXV0byB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgLSB2YWx1ZUJlZ2luKTsKKyAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsg
V1RGTW92ZShuYW1lKSwgV1RGTW92ZSh2YWx1ZSkgfTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAg
ICBpZiAoIW1fcmVwb3J0VVJJcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICByZWFkQ2hhcmFj
dGVyc0ZvclBhcnNpbmcoZGlyZWN0aXZlLnZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7
CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5n
QnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewot
ICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Cisg
ICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHdo
aWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7
CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIHVybEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAg
ICAgIGF1dG8gdXJsQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAg
ICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVy
KTsKIAotICAgICAgICBpZiAodXJsQmVnaW4gPCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVw
b3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9z
aXRpb24gLSB1cmxCZWdpbikpOwotICAgIH0KKyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSkKKyAgICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBw
ZW5kKGRpcmVjdGl2ZS52YWx1ZS5zdWJzdHJpbmcodXJsQmVnaW4gLSBiZWdpbiwgcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIC0gdXJsQmVnaW4pKTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAK
IHRlbXBsYXRlPGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+Ci12b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZGly
ZWN0aXZlKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BE
aXJlY3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlVHlwZT4mIGV4aXN0aW5nRGlyZWN0aXZlKQogewotICAgIGlmIChkaXJlY3RpdmUp
IHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAg
IGlmIChleGlzdGluZ0RpcmVjdGl2ZSkgeworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGRpcmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIG5hbWUsIHZh
bHVlKTsKKyAgICBleGlzdGluZ0RpcmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlw
ZT4oKnRoaXMsIFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpLCBXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1
ZSkpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5
U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBv
bGljeSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5k
Ym94UG9saWN5KFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBv
cnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9y
dE9ubHlNb2RlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZl
SW5SZXBvcnRPbmx5TW9kZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKG1faGF2ZVNhbmRib3hQb2xpY3kpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUoZGlyZWN0aXZlLm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1faGF2ZVNhbmRib3hQb2xpY3kgPSB0cnVlOwogICAgIFN0cmluZyBpbnZhbGlkVG9rZW5zOwot
ICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNh
bmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52YWxpZFRva2VucykpOworICAgIG1fcG9saWN5
LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3ko
V1RGTW92ZShkaXJlY3RpdmUudmFsdWUpLCBpbnZhbGlkVG9rZW5zKSk7CiAgICAgaWYgKCFpbnZh
bGlkVG9rZW5zLmlzTnVsbCgpKQogICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJv
eEZsYWdzKGludmFsaWRUb2tlbnMpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUlu
c2VjdXJlUmVxdWVzdHMoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmICht
X3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUlu
UmVwb3J0T25seU1vZGUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJl
Y3RpdmVJblJlcG9ydE9ubHlNb2RlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAobV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykgewotICAg
ICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1f
cG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyA9
IHRydWU7CiAgICAgbV9wb2xpY3kuc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHModHJ1ZSk7CiB9
CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxN
aXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBh
cnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9oYXNCbG9ja0FsbE1peGVk
Q29udGVudERpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJl
Y3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShX
VEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9o
YXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsK
LSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIWRpcmVjdGl2ZS5uYW1l
LmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKLSAgICAgICAg
c2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+
KG5hbWUsIHZhbHVlLCBtX2RlZmF1bHRTcmMpOworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
ZGVmYXVsdFNyYykpIHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9kZWZhdWx0U3Jj
KTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1f
ZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwogICAgICAgICBtX3BvbGljeS5hZGRI
YXNoQWxnb3JpdGhtc0ZvcklubGluZVN0eWxlc2hlZXRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29y
aXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewotICAg
ICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZT4obmFtZSwgdmFsdWUsIG1fc2NyaXB0U3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
c2NyaXB0U3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVT
Y3JpcHRzKG1fc2NyaXB0U3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3Jj
KTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKKyAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9zdHlsZVNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFk
ZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU3R5bGVzaGVldHMobV9zdHlsZVNyYy0+aGFzaEFsZ29y
aXRobXNVc2VkKCkpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKLSAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KG5hbWUsIHZhbHVlLCBtX29iamVjdFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJh
bWVTcmMpKSB7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2
ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkK
KyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9vYmplY3RTcmMpOworICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNyYykpIHsKICAgICAgICAgLy8gRklYTUU6IExvZyB0
byBjb25zb2xlICJUaGUgZnJhbWUtc3JjIGRpcmVjdGl2ZSBpcyBkZXByZWNhdGVkLiBVc2UgdGhl
IGNoaWxkLXNyYyBkaXJlY3RpdmUgaW5zdGVhZC4iCiAgICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTc3Mz4uCi0gICAgICAgIHNldENTUERp
cmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2
YWx1ZSwgbV9mcmFtZVNyYyk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQotICAg
ICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZT4obmFtZSwgdmFsdWUsIG1faW1nU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250
U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZvbnRTcmMpOworICAgICAgICBzZXRDU1BE
aXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92
ZShkaXJlY3RpdmUpLCBtX2ZyYW1lU3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjppbWdTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ltZ1NyYyk7Cisg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvbnRTcmMpKQorICAgICAgICBzZXRDU1BE
aXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92
ZShkaXJlY3RpdmUpLCBtX2ZvbnRTcmMpOwogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVT
VCkKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptYW5pZmVzdFNyYykpCi0gICAgICAgIHNldENTUERp
cmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2
YWx1ZSwgbV9tYW5pZmVzdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1h
bmlmZXN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9tYW5pZmVzdFNyYyk7
CiAjZW5kaWYKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNyYykpCi0gICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1l
LCB2YWx1ZSwgbV9tZWRpYVNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykp
Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9jb25uZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpjaGlsZFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9jaGlsZFNyYyk7Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlvbikpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9m
b3JtQWN0aW9uKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpiYXNlVVJJKSkKLSAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5h
bWUsIHZhbHVlLCBtX2Jhc2VVUkkpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0
b3JzKSkgeworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNyYykpCisgICAg
ICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fbWVkaWFTcmMpOworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwg
bV9jb25uZWN0U3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMp
KQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2NoaWxkU3JjKTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9ybUFjdGlvbikpCisgICAgICAgIHNldENTUERpcmVjdGl2
ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVj
dGl2ZSksIG1fZm9ybUFjdGlvbik7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJh
c2VVUkkpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Jhc2VVUkkpOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKICAgICAgICAgaWYg
KG1fcmVwb3J0T25seSkgewotICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVj
dGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJ
bnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lQW5j
ZXN0b3JzKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKSkKLSAgICAgICAg
c2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4o
bmFtZSwgdmFsdWUsIG1fcGx1Z2luVHlwZXMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRi
b3gpKQotICAgICAgICBhcHBseVNhbmRib3hQb2xpY3kobmFtZSwgdmFsdWUpOwotICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0gICAgICAgIHBhcnNlUmVwb3J0VVJJKG5hbWUsIHZh
bHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0g
ICAgICAgIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKG5hbWUpOwotICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50KSkKLSAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENv
bnRlbnRFbmFibGVkKG5hbWUpOworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1l
QW5jZXN0b3JzKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0
aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBl
cykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxp
c3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9wbHVnaW5UeXBlcyk7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpKQorICAgICAgICBhcHBseVNhbmRib3hQ
b2xpY3koV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6cmVwb3J0VVJJKSkKKyAgICAgICAgcGFyc2VSZXBvcnRVUkkoV1RGTW92ZShkaXJlY3RpdmUp
KTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVz
dHMpKQorICAgICAgICBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhXVEZNb3ZlKGRpcmVjdGl2
ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVu
dCkpCisgICAgICAgIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChXVEZNb3ZlKGRpcmVj
dGl2ZSkpOwogICAgIGVsc2UKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJl
Y3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZl
KFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OSwxNiArODksMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2
b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJv
bSk7CiAKLSAgICBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNl
UmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAg
dm9pZCBwYXJzZVBsdWdpblR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCBhZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSk7Ci0gICAgdm9pZCBzZXRVcGdyYWRl
SW5zZWN1cmVSZXF1ZXN0cyhjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgc2V0QmxvY2tB
bGxNaXhlZENvbnRlbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgc3RydWN0IFBh
cnNlZERpcmVjdGl2ZSB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdmFs
dWU7CisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25h
bDxQYXJzZWREaXJlY3RpdmU+IHBhcnNlRGlyZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4pOworICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYp
OworICAgIHZvaWQgYWRkRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFw
cGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBzZXRVcGdyYWRl
SW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBzZXRCbG9ja0Fs
bE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2VkRGlyZWN0aXZlJiYpOwogCiAgICAgdGVtcGxhdGUg
PGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+Ci0gICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGly
ZWN0aXZlVHlwZT4mKTsKKyAgICB2b2lkIHNldENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUm
Jiwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+Jik7CiAKICAgICBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlKiBvcGVyYXRpdmVEaXJlY3RpdmUoQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSopIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3Rp
dmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVj
dGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkNv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsK
IH0KQEAgLTUyLDYyICs1NCw2MSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlz
dERpcmVjCiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpw
YXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBi
ZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgdmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAn
cGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2luLXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlk
UGx1Z2luVHlwZXModmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUg
KHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEK
LSAgICAgICAgLy8gXiAgICAgICAgXgotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAg
ICAgICAgLy8gXgotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAg
ICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5k
KTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1
Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmco
dmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVy
VHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOwog
Ci0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgXgot
ICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Ci0g
ICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBs
dWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUx
L21pbWUxCisgICAgICAgICAgICAvLyBeICAgICAgICBeCisgICAgICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gXgor
ICAgICAgICAgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0
ZXI+KHBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAg
ZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAg
ICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICBeCisg
ICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIs
ICcvJykpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RB
U0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0
KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIK
KyAgICAgICAgICAgIC8vICAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7CisgICAg
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFy
c2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJl
cG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0
ZXI+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9t
aW1lMiBPUiBtaW1lMS9taW1lMSAgT1IgbWltZTEvbWltZTEvZXJyb3IKKyAgICAgICAgICAgIC8v
ICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4K
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAm
JiBpc05vdEFTQ0lJU3BhY2UoKnBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVn
aW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X3BsdWdpblR5cGVzLmFkZChTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAt
IGJlZ2luKSk7CiAKLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAg
Ly8gICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNo
YXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxp
c3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VS
VChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgaXNBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7
CiAgICAgICAgIH0KLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rl
cj4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIg
T1IgbWltZTEvbWltZTEgIE9SIG1pbWUxL21pbWUxL2Vycm9yCi0gICAgICAgIC8vICAgICAgICAg
ICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KLSAgICAgICAg
aWYgKHBvc2l0aW9uIDwgZW5kICYmIGlzTm90QVNDSUlTcGFjZSgqcG9zaXRpb24pKSB7Ci0gICAg
ICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdp
blR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJlZ2lu
LCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8
fCBpc0FTQ0lJU3BhY2UoKnBvc2l0aW9uKSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDQ4ICs1Nyw0MSBAQCBzdGF0aWMgYm9v
bCBpc0NTUERpcmVjdGl2ZU5hbWUoY29uc3QgU3RyCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxl
U3JjKTsKIH0KIAotc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVy
KENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KIAot
c3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0hvc3RDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBj
KQogewogICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQog
Ci1zdGF0aWMgYm9vbCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzUGF0aENvbXBvbmVudENoYXJh
Y3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGMgIT0gJz8nICYmIGMgIT0gJyMn
OwogfQogCi1zdGF0aWMgYm9vbCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBj
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTY2hlbWVD
b250aW51YXRpb25DaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FT
Q0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4nOwog
fQogCi1zdGF0aWMgYm9vbCBpc05vdENvbG9uT3JTbGFzaChVQ2hhciBjKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goQ2hhcmFj
dGVyVHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc6JyAmJiBjICE9ICcvJzsKIH0KIAotc3Rh
dGljIGJvb2wgaXNTb3VyY2VMaXN0Tm9uZShjb25zdCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VMaXN0Tm9uZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0
byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciog
ZW5kID0gY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKLQotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9
IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIHBv
c2l0aW9uIC0gYmVnaW4sICInbm9uZSciKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0g
ICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlm
IChwb3NpdGlvbiAhPSBlbmQpCisgICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIsICInbm9uZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIHJldHVybiB0cnVlOworCisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlT
cGFjZT4ocGFyc2luZ0J1ZmZlcik7CisKKyAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgp
OwogfQogCiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0KGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25z
dCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUpCkBAIC0xMDgsMTIgKzEwMiwxNCBAQCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXNT
b3VyY2VMaXN0Tm9uZSh2YWx1ZSkpIHsKLSAgICAgICAgbV9pc05vbmUgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3Rl
cnMgKyB2YWx1ZS5sZW5ndGgoKSk7CisgICAgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVl
LCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChpc1NvdXJjZUxpc3ROb25l
KHBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICBtX2lzTm9uZSA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwYXJzZShwYXJzaW5nQnVmZmVyKTsK
KyAgICB9KTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojppc1By
b3RvY29sQWxsb3dlZEJ5U3Rhcihjb25zdCBVUkwmIHVybCkgY29uc3QKQEAgLTE2MCw0MiArMTU2
LDM3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWEKIC8vIHNvdXJj
ZS1saXN0ICAgICAgID0gKldTUCBbIHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAqV1NQIF0KIC8v
ICAgICAgICAgICAgICAgICAgIC8gKldTUCAiJ25vbmUnIiAqV1NQCiAvLwotdm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0
IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24g
PSBiZWdpbjsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hp
bGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3Np
dGlvbiA9PSBlbmQpCisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+
KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBv
c2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3Np
dGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBiZWdpblNvdXJjZSA9IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFj
dGVyPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBTdHJpbmcgc2NoZW1lLCBob3N0LCBwYXRo
OwotICAgICAgICBPcHRpb25hbDx1aW50MTZfdD4gcG9ydDsKLSAgICAgICAgYm9vbCBob3N0SGFz
V2lsZGNhcmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBwb3J0SGFzV2lsZGNhcmQgPSBmYWxzZTsK
KyAgICAgICAgYXV0byBzb3VyY2VQYXJzaW5nQnVmZmVyID0gU3RyaW5nUGFyc2luZ0J1ZmZlciB7
IGJlZ2luU291cmNlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfTsKIAotICAgICAgICBpZiAo
cGFyc2VOb25jZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBpZiAocGFy
c2VOb25jZVNvdXJjZShzb3VyY2VQYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChwYXJzZUhhc2hTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uKSkK
KyAgICAgICAgaWYgKHBhcnNlSGFzaFNvdXJjZShzb3VyY2VQYXJzaW5nQnVmZmVyKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwg
cG9zaXRpb24sIHNjaGVtZSwgaG9zdCwgcG9ydCwgcGF0aCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0
SGFzV2lsZGNhcmQpKSB7CisgICAgICAgIGlmIChhdXRvIHNvdXJjZSA9IHBhcnNlU291cmNlKHNv
dXJjZVBhcnNpbmdCdWZmZXIpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0cyBhbmQg
a2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAgICAgIC8v
IGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBvbiB0aGUg
c291cmNlCiAgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KLSAgICAgICAgICAgIGlmIChzY2hl
bWUuaXNFbXB0eSgpICYmIGhvc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKHNvdXJjZS0+
c2NoZW1lLmlzRW1wdHkoKSAmJiBzb3VyY2UtPmhvc3QudmFsdWUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFtZSho
b3N0KSkKLSAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4
cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKLSAgICAgICAgICAgIG1fbGlzdC5hcHBl
bmQoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBv
cnQsIHBhdGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAgICAg
ICBpZiAoaXNDU1BEaXJlY3RpdmVOYW1lKHNvdXJjZS0+aG9zdC52YWx1ZSkpCisgICAgICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0
aXZlTmFtZSwgc291cmNlLT5ob3N0LnZhbHVlKTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQo
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzb3VyY2UtPnNjaGVtZSwgc291
cmNlLT5ob3N0LnZhbHVlLCBzb3VyY2UtPnBvcnQudmFsdWUsIHNvdXJjZS0+cGF0aCwgc291cmNl
LT5ob3N0Lmhhc1dpbGRjYXJkLCBzb3VyY2UtPnBvcnQuaGFzV2lsZGNhcmQpKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lv
bihtX2RpcmVjdGl2ZU5hbWUsIFN0cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNv
dXJjZSkpOworICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Np
b24obV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW5Tb3VyY2UsIHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSAtIGJlZ2luU291cmNlKSk7CiAKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVu
ZCB8fCBpc0FTQ0lJU3BhY2UoKnBvc2l0aW9uKSk7CisgICAgICAgIEFTU0VSVChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkgfHwgaXNBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7CiAgICAgfQogICAg
IAogICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwpAQCAtMjA1LDI3MCArMTk2LDI5MyBAQCB2b2lk
IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAg
ICAvICggWyBzY2hlbWUgIjovLyIgXSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAg
ICAgICAgICAgICAgIC8gIidzZWxmJyIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0
LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRj
YXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6U291cmNlPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKGJlZ2luID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4s
IGVuZCAtIGJlZ2luLCAiJ25vbmUnIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTb3VyY2Ugc291cmNlOwogCi0gICAg
aWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7
CiAgICAgICAgIG1fYWxsb3dTdGFyID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBzb3VyY2U7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidzZWxmJyIpKSB7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIidzZWxmJyIpKSB7CiAgICAg
ICAgIG1fYWxsb3dTZWxmID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBzb3VyY2U7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtaW5saW5l
JyIpKSB7CiAgICAgICAgIG1fYWxsb3dJbmxpbmUgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICB9CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2FmZS1ldmFsJyIpKSB7
CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIid1
bnNhZmUtZXZhbCciKSkgewogICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdp
bjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBi
ZWdpblBvcnQgPSBudWxscHRyOworICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCk7CisgICAgYXV0byBiZWdpbkhvc3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9
IHBhcnNpbmdCdWZmZXIuZW5kKCk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0
ID0gbnVsbHB0cjsKIAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBv
c2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JT
bGFzaD4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAg
aWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8v
ICAgICBeCi0gICAgICAgIHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9z
dCwgaG9zdEhhc1dpbGRjYXJkKTsKKyAgICAgICAgYXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmlu
Z1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KTsK
KyAgICAgICAgaWYgKCFob3N0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgICAgICBzb3VyY2UuaG9zdCA9IFdURk1vdmUoKmhvc3QpOworICAgICAgICByZXR1cm4gc291
cmNlOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJy8n
KSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpw
YXJzaW5nQnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBob3N0L3BhdGggfHwgaG9zdC8gfHwg
LwogICAgICAgICAvLyAgICAgXiAgICAgICAgICAgIF4gICAgXgotICAgICAgICByZXR1cm4gcGFy
c2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFy
c2VQYXRoKHBvc2l0aW9uLCBlbmQsIHBhdGgpOworICAgICAgICBhdXRvIGhvc3QgPSBwYXJzZUhv
c3QoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIH0pOworICAgICAgICBpZiAoIWhvc3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgICAgIGF1dG8gcGF0aCA9IHBhcnNlUGF0aChwYXJzaW5nQnVmZmVyKTsKKyAg
ICAgICAgaWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBzb3VyY2UuaG9zdCA9IFdURk1vdmUoKmhvc3QpOworICAgICAgICBzb3VyY2UucGF0aCA9
IFdURk1vdmUoKnBhdGgpOworICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlm
IChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzonKSB7Ci0gICAgICAgIGlmIChlbmQg
LSBwb3NpdGlvbiA9PSAxKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICc6JykgeworICAgICAgICBpZiAocGFyc2lu
Z0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxKSB7CiAgICAgICAgICAgICAvLyBzY2hlbWU6
CiAgICAgICAgICAgICAvLyAgICAgICBeCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VTY2hlbWUo
YmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpOworICAgICAgICAgICAgYXV0byBzY2hlbWUgPSBwYXJz
ZVNjaGVtZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRp
b24oKSB9KTsKKyAgICAgICAgICAgIGlmICghc2NoZW1lKQorICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIHNvdXJjZS5zY2hlbWUgPSBXVEZNb3ZlKCpz
Y2hlbWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uWzFdID09ICcvJykgewor
ICAgICAgICBpZiAocGFyc2luZ0J1ZmZlclsxXSA9PSAnLycpIHsKICAgICAgICAgICAgIC8vIHNj
aGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCiAgICAgICAgICAgICAvLyAgICAgICBeICAgICAgICAg
ICAgICAgIF4KLSAgICAgICAgICAgIGlmICghcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBz
Y2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwg
ZW5kLCAnOicpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlv
biwgZW5kLCAnLycpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PFVDaGFyPihwb3Np
dGlvbiwgZW5kLCAnLycpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcG9zaXRpb247Ci0gICAgICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1
dG8gc2NoZW1lID0gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgfSk7CisgICAgICAgICAgICBpZiAoIXNjaGVtZQorICAgICAg
ICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAn
OicpCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNp
bmdCdWZmZXIsICcvJykKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocGFyc2luZ0J1ZmZlciwgJy8nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgICAgICBzb3VyY2Uuc2NoZW1l
ID0gV1RGTW92ZSgqc2NoZW1lKTsKKworICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
Tm90Q29sb25PclNsYXNoPihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzonKSB7CisgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAn
OicpIHsKICAgICAgICAgICAgIC8vIGhvc3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAg
ICAgICAgICAgIC8vICAgICBeICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgYmVn
aW5Qb3J0ID0gcG9zaXRpb247Ci0gICAgICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9u
LCBlbmQsICcvJyk7CisgICAgICAgICAgICBiZWdpblBvcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCk7CisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZl
ciwgJy8nKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gJy8nKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcvJykgewogICAgICAgICAvLyBzY2hlbWU6
Ly9ob3N0L3BhdGggfHwgc2NoZW1lOi8vaG9zdDpwb3J0L3BhdGgKICAgICAgICAgLy8gICAgICAg
ICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBvc2l0aW9u
ID09IGJlZ2luSG9zdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbkhvc3QpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgICAgIGJlZ2luUGF0aCA9IHBvc2l0aW9uOworICAgICAgICBi
ZWdpblBhdGggPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAgaWYgKCFw
YXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGgsIGhv
c3QsIGhvc3RIYXNXaWxkY2FyZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGhv
c3QgPSBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgYmVnaW5Qb3J0
ID8gYmVnaW5Qb3J0IDogYmVnaW5QYXRoIH0pOworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChiZWdpblBvcnQpIHsKKyAgICAgICAgYXV0byBw
b3J0ID0gcGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBvcnQsIGJlZ2luUGF0
aCB9KTsKKyAgICAgICAgaWYgKCFwb3J0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGlmICghYmVnaW5Qb3J0KQotICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0Owot
ICAgIGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlUG9ydChiZWdpblBvcnQsIGJlZ2luUGF0aCwg
cG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgc291cmNlLnBvcnQgPSBXVEZNb3ZlKCpwb3J0KTsKICAgICB9CiAKLSAgICBpZiAoYmVnaW5Q
YXRoICE9IGVuZCkgewotICAgICAgICBpZiAoIXBhcnNlUGF0aChiZWdpblBhdGgsIGVuZCwgcGF0
aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJlZ2luUGF0aCAhPSBwYXJz
aW5nQnVmZmVyLmVuZCgpKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhcnNlUGF0aChTdHJpbmdQ
YXJzaW5nQnVmZmVyIHsgYmVnaW5QYXRoLCBwYXJzaW5nQnVmZmVyLmVuZCgpIH0pOworICAgICAg
ICBpZiAoIXBhdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IHNvdXJjZS5wYXRoID0gV1RGTW92ZSgqcGF0aCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7
CisgICAgc291cmNlLmhvc3QgPSBXVEZNb3ZlKCpob3N0KTsKKyAgICByZXR1cm4gc291cmNlOwog
fQogCiAvLyAgICAgICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJG
QyAzOTg2CiAvLyBzY2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAi
LSIgLyAiLiIgKQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFy
c2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNj
aGVtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPFN0cmluZz4g
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOwotICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQocGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogCi0gICAgaWYg
KGJlZ2luID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBV
Q2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpOwogCi0gICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNBU0NJSUFscGhhPihw
b3NpdGlvbiwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSUFscGhhPihwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTY2hlbWVDb250
aW51YXRpb25DaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAK
LSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBzY2hlbWUgPSBTdHJpbmcoYmVnaW4sIGVuZCAtIGJlZ2luKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBi
ZWdpbik7CiB9CiAKIC8vIGhvc3QgICAgICAgICAgICAgID0gWyAiKi4iIF0gMSpob3N0LWNoYXIg
KiggIi4iIDEqaG9zdC1jaGFyICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIioiCiAvLyBob3N0
LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKIC8vCi1ib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0
IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6SG9zdD4gQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VI
b3N0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoaG9zdC5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogCi0gICAgaWYgKGJlZ2luID09IGVu
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBiZWdpbjsKKyAgICBIb3N0IGhvc3Q7CiAKLSAgICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+
KHBvc2l0aW9uLCBlbmQsICcqJykpIHsKLSAgICAgICAgaG9zdEhhc1dpbGRjYXJkID0gdHJ1ZTsK
KyAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJyonKSkg
eworICAgICAgICBob3N0Lmhhc1dpbGRjYXJkID0gdHJ1ZTsKIAotICAgICAgICBpZiAocG9zaXRp
b24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChwYXJzaW5n
QnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaG9zdDsKIAotICAgICAgICBpZiAo
IXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLicpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNp
bmdCdWZmZXIsICcuJykpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIGNvbnN0IFVDaGFyKiBob3N0QmVnaW4gPSBwb3NpdGlvbjsKKyAgICBhdXRvIGhvc3RC
ZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8
IGVuZCkgewotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0hvc3RDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdoaWxlIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJy4nKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFza2lwRXhhY3RseTxDaGFyYWN0ZXJU
eXBlPihwYXJzaW5nQnVmZmVyLCAnLicpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICB9CiAKLSAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kKTsKLSAgICBob3N0ID0gU3Ry
aW5nKGhvc3RCZWdpbiwgZW5kIC0gaG9zdEJlZ2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBB
U1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpKTsKKyAgICBob3N0LnZhbHVlID0gU3RyaW5nKGhv
c3RCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gaG9zdEJlZ2luKTsKKyAgICByZXR1
cm4gaG9zdDsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHBhdGgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxTdHJpbmc+IENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUGF0aChTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVu
ZCk7Ci0gICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQocGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIAotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNQYXRoQ29tcG9u
ZW50Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1BhdGhDb21w
b25lbnRDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogICAgIC8vIHBhdGgvdG8vZmlsZS5qcz9x
dWVyeT1zdHJpbmcgfHwgcGF0aC90by9maWxlLmpzI2FuY2hvcgogICAgIC8vICAgICAgICAgICAg
ICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotICAgIGlmIChwb3NpdGlvbiA8
IGVuZCkKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJl
Y3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIGVuZCAtIGJlZ2luKSwgKnBvc2l0aW9uKTsKLSAgICAK
LSAgICBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhiZWdpbiwgcG9zaXRp
b24gLSBiZWdpbikpOwotICAgIAotICAgIEFTU0VSVChwb3NpdGlvbiA8PSBlbmQpOwotICAgIEFT
U0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKCpwb3NpdGlvbiA9PSAnIycgfHwgKnBvc2l0aW9uID09
ICc/JykpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFBhdGhDaGFy
YWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIuZW5kKCkg
LSBiZWdpbiksICpwYXJzaW5nQnVmZmVyKTsKKworICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSB8fCAoKnBhcnNpbmdCdWZmZXIgPT0gJyMnIHx8ICpwYXJzaW5nQnVmZmVyID09
ICc/JykpOworCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3
KGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwogfQogCiAvLyBwb3J0
ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQogLy8KLWJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2ls
ZGNhcmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpQb3J0PiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJz
aW5nQnVmZmVyKQogewotICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOwotICAgIEFTU0VSVCghcG9y
dCk7Ci0gICAgQVNTRVJUKCFwb3J0SGFzV2lsZGNhcmQpOworICAgIEFTU0VSVChwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgPD0gcGFyc2luZ0J1ZmZlci5lbmQoKSk7CiAgICAgCi0gICAgaWYgKCFz
a2lwRXhhY3RseTxVQ2hhcj4oYmVnaW4sIGVuZCwgJzonKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc6JykpCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAn
KicpIHsKLSAgICAgICAgcG9ydCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcG9ydEhhc1dpbGRj
YXJkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
bGVuZ3RoUmVtYWluaW5nKCkgPT0gMSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnKicpIHsKKyAgICAg
ICAgUG9ydCBwb3J0OworICAgICAgICBwb3J0Lmhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHBvcnQ7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJl
Z2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSURpZ2l0Pihwb3NpdGlvbiwgZW5kKTsK
KyAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KHBhcnNpbmdCdWZmZXIpOwogICAgIAotICAg
IGlmIChwb3NpdGlvbiAhPSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAK
ICAgICBib29sIG9rOwotICAgIGludCBwb3J0SW50ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGJl
Z2luLCBlbmQgLSBiZWdpbiwgJm9rKTsKLSAgICBpZiAocG9ydEludCA8IDAgfHwgcG9ydEludCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHBvcnQgPSBwb3J0SW50OwotICAgIHJldHVybiBvazsKKyAgICBpbnQgcG9ydElu
dCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
IC0gYmVnaW4sICZvayk7CisgICAgaWYgKCFvayB8fCBwb3J0SW50IDwgMCB8fCBwb3J0SW50ID4g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgUG9ydCBwb3J0OworICAgIHBvcnQudmFsdWUgPSBwb3J0SW50Owor
ICAgIHJldHVybiBwb3J0OwogfQogCiAvLyBNYXRjaCBCbGluaydzIGJlaGF2aW9yIG9mIGFsbG93
aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoZSB2YWx1ZSBvZiB0aGUg
bm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9lcyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9m
IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVsIDMgc3BlYy4sCiAvLyA8aHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkgRmVicnVhcnkgMjAxNikuCi1zdGF0aWMgYm9v
bCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAg
ICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcihjKSB8fCBjID09ICc9JzsKIH0K
IAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25jZS0iIG5vbmNlLXZhbHVlICInIgogLy8gbm9u
Y2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBu
b25jZVByZWZpeExlbmd0aCA9IDc7Ci0gICAgaWYgKCFTdHJpbmdWaWV3KGJlZ2luLCBlbmQgLSBi
ZWdpbikuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCInbm9uY2UtIikpCisgICAgaWYgKCFz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInbm9uY2UtIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbiAr
IG5vbmNlUHJlZml4TGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbk5vbmNlVmFsdWUgPSBw
b3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm9uY2VDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiA+PSBlbmQgfHwgcG9zaXRpb24gPT0gYmVnaW5Ob25j
ZVZhbHVlIHx8ICpwb3NpdGlvbiAhPSAnXCcnKQorCisgICAgYXV0byBiZWdpbk5vbmNlVmFsdWUg
PSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm9uY2VDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworICAgIGlmIChwYXJzaW5nQnVmZmVy
LmF0RW5kKCkgfHwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGJlZ2luTm9uY2VWYWx1ZSB8
fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9u
b25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5Ob25jZVZh
bHVlKSk7CisgICAgbV9ub25jZXMuYWRkKFN0cmluZyhiZWdpbk5vbmNlVmFsdWUsIHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSAtIGJlZ2luTm9uY2VWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBoYXNoLXNvdXJjZSAgICA9ICInIiBoYXNoLWFsZ29yaXRobSAiLSIgYmFzZTY0LXZh
bHVlICInIgogLy8gaGFzaC1hbGdvcml0aG0gPSAic2hhMjU2IiAvICJzaGEzODQiIC8gInNoYTUx
MiIKIC8vIGJhc2U2NC12YWx1ZSAgPSAxKiggQUxQSEEgLyBESUdJVCAvICIrIiAvICIvIiAvICIt
IiAvICJfIiApKjIoICI9IiApCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlSGFzaFNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihw
b3NpdGlvbiwgZW5kLCAnXCcnKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBhcnNpbmdCdWZmZXIsICdcJycpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICBh
dXRvIGRpZ2VzdCA9IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAg
ICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBvc2l0aW9u
ID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpIHx8ICpwYXJzaW5nQnVmZmVyICE9ICdcJycpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChkaWdlc3QtPnZhbHVlLnNpemUoKSA+IENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g6
Om1heGltdW1EaWdlc3RMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCShyZXZpc2lvbiAy
NjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE5ICs1NSwzMyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBtX2lzTm9uZTsgfQogCiBwcml2YXRlOgot
ICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKIAot
ICAgIGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQs
IFN0cmluZyYgcGF0aCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNh
cmQpOwotICAgIGJvb2wgcGFyc2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxk
Y2FyZCk7Ci0gICAgYm9vbCBwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7
Ci0gICAgYm9vbCBwYXJzZVBhdGgoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpbmcmIHBhdGgpOwotCi0gICAgYm9vbCBwYXJzZU5vbmNlU291cmNlKGNvbnN0IFVDaGFy
KiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RydWN0IEhvc3QgeworICAgICAgICBT
dHJpbmcgdmFsdWU7CisgICAgICAgIGJvb2wgaGFzV2lsZGNhcmQ7CisgICAgfTsKKyAgICBzdHJ1
Y3QgUG9ydCB7CisgICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiB2YWx1ZTsKKyAgICAgICAgYm9v
bCBoYXNXaWxkY2FyZDsKKyAgICB9OworICAgIHN0cnVjdCBTb3VyY2UgeworICAgICAgICBTdHJp
bmcgc2NoZW1lOworICAgICAgICBIb3N0IGhvc3Q7CisgICAgICAgIFBvcnQgcG9ydDsKKyAgICAg
ICAgU3RyaW5nIHBhdGg7CisgICAgfTsKIAogICAgIGJvb2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0
YXIoY29uc3QgVVJMJikgY29uc3Q7CiAKLSAgICBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
Pik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxTb3Vy
Y2U+IHBhcnNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPFN0cmluZz4gcGFyc2VT
Y2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8SG9zdD4gcGFyc2VIb3N0KFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IE9wdGlvbmFsPFBvcnQ+IHBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRp
b25hbDxTdHJpbmc+IHBhcnNlUGF0aChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlTm9uY2VT
b3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CiAKICAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xp
Y3kmIG1fcG9saWN5OwogICAgIFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U+IG1f
bGlzdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402839</attachid>
            <date>2020-06-25 18:19:35 -0700</date>
            <delta_ts>2020-06-26 09:35:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213631-20200625181935.patch</filename>
            <type>text/plain</type>
            <size>76408</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTI1ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IENvbnRlbnRTZWN1cml0
eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkb3B0
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYWNyb3NzIENTUCBjb2RlLgorICAgICAgICAtIFJlbW92ZSBV
VEYtMTYgdXBjb252ZXJzaW9ucyBpbiBDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QsCisgICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlIGFuZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lgor
CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpza2lwVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJ
Q2FzZSk6CisgICAgICAgIEFkZCBvdmVybG9hZHMgZm9yIGVhY2ggaGVscGVyIHRoYXQgdGFrZSBh
IFN0cmluZ1BhcnNpbmdCdWZmZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFk
dmFuY2luZ1Bvc2l0aW9uKToKKyAgICAgICAgQ29udmVydCB0byB1c2UgYW4gT3B0aW9uYWwgcmV0
dXJuIHZhbHVlIHJhdGhlciB0aGFuIG91dHBhcmFtZXRlciArIGJvb2wuCisKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2Rl
ZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2Rl
ZENyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QuaDoKKyAgICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgcmF0aGVyIHRo
YW4gcmF3IHBvaW50ZXJzIGZvciBwYXJzaW5nLgorIAorICAgICAgICAqIGxvYWRlci9TdWJyZXNv
dXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3BhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAgICBVc2UgU3Ry
aW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHJhdGhlciB0aGFu
IHJhdyBwb2ludGVycyBmb3IgcGFyc2luZy4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICBVc2UgU3RyaW5nUGFyc2luZ0J1ZmZlciBh
bmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0
bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAg
ICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VS
ZXBvcnRVUkkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZl
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1Zp
ZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3aXRjaCB0byB1c2luZyBPcHRpb25h
bCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBi
b29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5seSwgcGFja2FnZSB1cCBuYW1lCisg
ICAgICAgIGFuZCB2YWx1ZSBwYWlyIGludG8gYSBuZXcgUGFyc2VkRGlyZWN0aXZlIHN0cnVjdCB0
aGF0IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG1vcmUgZWFzaWx5LgorCisgICAgICAgICogcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzTWVkaWFUeXBlQ2hhcmFjdGVyKTogCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgVXNl
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBs
YWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCkuCisKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1Bh
dGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xvbk9yU2xhc2gpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05vbmNlQ2hhcmFjdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
cnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVm
ZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBj
YWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNv
IHN3aXRjaCB0byB1c2luZyBPcHRpb25hbCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRo
ZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBib29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xl
YW5seSwgcGFja2FnZSB1cCBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHZhbHVlcyBpbnRvIHN0cnVj
dHMgdGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgcmV0dXJuZWQgLyBwYXNzZWQgYXJvdW5kLgorCiAy
MDIwLTA2LTI1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIENvbnZlcnQgdGhlIFBhaW50TGF5ZXJGbGFnIGVudW0gdG8gYW4gZW51bSBjbGFzcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAkocmV2
aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENoYXJUeXBl
IGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3Np
dGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNraXBFeGFj
dGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGlt
aXRlclR5cGUgZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRp
b24gPT0gZGVsaW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1MCwxNiBA
QCBib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVy
VHlwZT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBh
cnNpbmdCdWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSBkZWxp
bWl0ZXIpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhhY3RseShj
b25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNTks
MTMgKzcwLDMwIEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotdm9pZCBz
a2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwg
Q2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hh
cmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcGFyc2lu
Z0J1ZmZlcikpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
VHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJU
eXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUgZGVsaW1p
dGVyKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1p
dGVyKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikK
K3sKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShD
aGFyVHlwZSk+CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25z
dCBDaGFyVHlwZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVudGlsKGNv
bnN0IENoYXJUeXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUs
IGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGlsKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdoaWxlIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVyUHJlZGlj
YXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUp
Pgogdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5
cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGlj
YXRlKCpwb3NpdGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUoY29uc3Qg
Q2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9v
bCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cGFyc2luZ0J1ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZv
aWQgcmV2ZXJzZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFy
VHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNoYXJhY3Rl
clByZWRpY2F0ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCwyMSBAQCBib29sIHNraXBFeGFj
dGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsgbG93ZXJj
YXNlTGV0dGVyc0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
V1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0
dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcG9zaXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2Fz
ZUxldHRlcnMpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChsb3dlcmNh
c2VMZXR0ZXJzTGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+Citib29s
IHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0
ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xv
d2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJl
bWFpbmluZygpIDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNl
TGV0dGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVyICs9IChs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCShyZXZpc2lvbiAyNjM1MjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTA0ICszMCw5NiBAQAogI2luY2x1ZGUgPHBhbC9jcnlwdG8vQ3J5
cHRvRGlnZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1zdGF0aWMgYm9vbCBwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0mIGFsZ29yaXRobSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q6OkFsZ29yaXRobT4gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5nUG9zaXRpb24o
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgd2l0aCBhIGxvb2t1cCB0YWJs
ZSBvZiBwYWlycyBvZiBsYWJlbCAvIGFsZ29yaXRobSBlbnVtIHZhbHVlcywgYnV0IEkgY2FuJ3QK
ICAgICAvLyBmaWd1cmUgb3V0IGhvdyB0byBrZWVwIHRoZSBsYWJlbHMgY29tcGlsZXRpbWUgc3Ry
aW5ncyBmb3Igc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZS4KIAotICAgIGlmIChza2lwRXhh
Y3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGEyNTYiKSkgewotICAgICAg
ICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hB
MjU2OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNraXBFeGFjdGx5SWdu
b3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTM4NCIpKSB7Ci0gICAgICAgIGFsZ29y
aXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEzODQ7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FT
Q0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhNTEyIikpIHsKLSAgICAgICAgYWxnb3JpdGhtID0g
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTUxMjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNl
KHBhcnNpbmdCdWZmZXIsICJzaGEyNTYiKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEyNTY7CisgICAgaWYgKHNraXBFeGFjdGx5SWdu
b3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTM4NCIpKQorICAgICAgICByZXR1cm4g
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTM4NDsKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhNTEyIikpCisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hB
NTEyOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwb3Np
dGlvbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxn
b3JpdGhtIGFsZ29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bv
c2l0aW9uKHBvc2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBw
YXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVyKTsKKyAgICBp
ZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICgh
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAo
IXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbkhh
c2hWYWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jhc2U2
NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lwRXhhY3RseTxD
aGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFjdGx5PENoYXJh
Y3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhhc2hWYWx1ZSA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisgICAgc2tpcEV4
YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYgKHBvc2l0aW9u
ID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0g
YmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0
b3I8dWludDhfdD4gZGlnZXN0OwotICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJlZ2luSGFzaFZh
bHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKTsKKyAgICBTdHJpbmdWaWV3IGhhc2hWYWx1
ZShiZWdpbkhhc2hWYWx1ZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFs
dWUpOwogICAgIGlmICghYmFzZTY0RGVjb2RlKGhhc2hWYWx1ZSwgZGlnZXN0LCBCYXNlNjRWYWxp
ZGF0ZVBhZGRpbmcpKSB7CiAgICAgICAgIGlmICghYmFzZTY0VVJMRGVjb2RlKGhhc2hWYWx1ZSwg
ZGlnZXN0KSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwgV1RGTW92ZShk
aWdlc3QpIH07CisgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdv
cml0aG0sIFdURk1vdmUoZGlnZXN0KSB9OwogfQogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKQorT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwo
YmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFy
c2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFy
KiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikK
IHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsK
KyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChwYXJzaW5nQnVmZmVyKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBPcHRpb25hbDxF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFw
aGljRGlnZXN0SW1wbChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBP
cHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRD
cnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG07
Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlvbiwg
ZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3JpdGht
QWR2YW5jaW5nUG9zaXRpb24ocGFyc2luZ0J1ZmZlcik7CisgICAgaWYgKCFhbGdvcml0aG0pCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJh
Y3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICctJykpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlv
bjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9z
aXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlv
biwgZW5kLCAnPScpOworICAgIGF1dG8gYmVnaW5IYXNoVmFsdWUgPSBwYXJzaW5nQnVmZmVyLnBv
c2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFzZTY0T3JCYXNlNjRV
UkxDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5
cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CisgICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4o
cGFyc2luZ0J1ZmZlciwgJz0nKTsKIAotICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhhc2hWYWx1
ZSkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGJlZ2luSGFzaFZhbHVlKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEVuY29kZWRSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyBhbGdvcml0aG0sIFN0cmluZyhiZWdpbkhhc2hWYWx1ZSwg
cG9zaXRpb24gLSBiZWdpbkhhc2hWYWx1ZSkgfTsKKyAgICByZXR1cm4gRW5jb2RlZFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdCB7ICphbGdvcml0aG0sIFN0cmluZyhiZWdpbkhhc2hWYWx1ZSwg
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUpIH07CiB9CiAKLU9wdGlv
bmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0
b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK09w
dGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZm
ZXIpCiB7Ci0gICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJl
Z2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1w
bChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBMQ2hhciom
IGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNv
ZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNl
RW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCiBPcHRp
b25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dCYgZW5jb2RlZERpZ2VzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsMTEgKzY2LDExIEBAIHN0cnVjdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXMKICAgICBTdHJpbmcgZGlnZXN0OwogfTsKIAotT3B0aW9uYWw8UmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBMQ2hhciomIGJlZ2luLCBjb25z
dCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFy
c2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CitPcHRp
b25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCi1PcHRpb25hbDxFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNv
bnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwotT3B0aW9uYWw8RW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dChjb25zdCBMQ2hhciomIGJlZ2luLCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPEVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlvbmFsPEVuY29kZWRSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3Qo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKIAogT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGNv
bnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlSW50ZWdyaXR5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCShyZXZpc2lvbiAy
NjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZm
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENoYXJhY3RlclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQorICAgIGJvb2wgb3BlcmF0b3Io
KShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogICAg
IHsKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBoYXNoZXMgdG8gYmUgc29tZXRoaW5nIG90aGVyIFdU
Rjo6bnVsbG9wdCwgdG8gaW5kaWNhdGUKICAgICAgICAgLy8gdGhhdCBhdCBsZWFzdCBvbmUgdG9r
ZW4gd2FzIHNlZW4sIGFuZCB0aHVzIHNldHRpbmcgdGhlIGVtcHR5IGZsYWcKQEAgLTU4LDE5ICs1
OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9kaWdlc3RzKQogICAgICAgICAgICAgbV9k
aWdlc3RzID0gVmVjdG9yPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHsgfTsK
IAotICAgICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3Qo
cG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFkaWdlc3QpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHNwZWMgYWxsb3dzIGZvciBv
cHRpb25zIGZvbGxvd2luZyB0aGUgZGlnZXN0LCBidXQgc28gZmFyLCBubwogICAgICAgICAvLyBz
cGVjaWZpYyBvcHRpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQuIFRodXMsIHdlIGp1c3QgcGFyc2Ug
YW5kIGlnbm9yZQogICAgICAgICAvLyB0aGVtLiBUaGVpciBzeW50YXggaXMgYSAnPycgZm9sbG93
IGJ5IGFueSBudW1iZXIgb2YgVkNIQVJzLgotICAgICAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFj
dGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz8nKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc1ZDSEFSPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgaWYgKHNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc/JykpCisgICAgICAgICAgICBza2lw
V2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNWQ0hBUj4ocGFyc2luZ0J1ZmZlcik7CiAKICAgICAgICAg
Ly8gQWZ0ZXIgdGhlIGJhc2U2NCB2YWx1ZSBhbmQgb3B0aW9ucywgdGhlIGN1cnJlbnQgY2hhcmFj
dGVyIHBvaW50ZWQgdG8gYnkgcG9zaXRpb24KICAgICAgICAgLy8gc2hvdWxkIGVpdGhlciBiZSB0
aGUgZW5kIG9yIGEgc3BhY2UuCi0gICAgICAgIGlmIChwb3NpdGlvbiAhPSBlbmQgJiYgIWlzSFRN
TFNwYWNlKCpwb3NpdGlvbikpCisgICAgICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpICYm
ICFpc0hUTUxTcGFjZSgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgbV9kaWdlc3RzLT5hcHBlbmQoV1RGTW92ZSgqZGlnZXN0KSk7CkBAIC04NCwx
NyArODUsMTQgQEAgcHJpdmF0ZToKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRPblNwYWNlcyhj
b25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGdW5j
dG9yJiYgZnVuY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2VzKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlciwgRnVuY3RvciYmIGZ1bmN0
b3IpCiB7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0g
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
LQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWZ1bmN0b3IocG9z
aXRpb24sIGVuZCkpCi0gICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RI
VE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc0hUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICghZnVuY3RvcihwYXJz
aW5nQnVmZmVyKSkKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEhU
TUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0hUTUxTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAgICAgfQogfQogCkBAIC0xMDUsMTEgKzEw
MywxMCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEVuY29kZWRSZXNvdXJjZUNyCiAKICAgICBP
cHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4+IHJlc3Vs
dDsKICAgICAKLSAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsID0gKmludGVncml0eU1l
dGFkYXRhLmltcGwoKTsKLSAgICBpZiAoc3RyaW5nSW1wbC5pczhCaXQoKSkKLSAgICAgICAgc3Bs
aXRPblNwYWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnM4KCksIHN0cmluZ0ltcGwuY2hhcmFjdGVy
czgoKSArIHN0cmluZ0ltcGwubGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFyc2VyPExDaGFy
PiB7IHJlc3VsdCB9KTsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0T25TcGFjZXMoc3RyaW5nSW1w
bC5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nSW1wbC5jaGFyYWN0ZXJzMTYoKSArIHN0cmluZ0ltcGwu
bGVuZ3RoKCksIEludGVncml0eU1ldGFkYXRhUGFyc2VyPFVDaGFyPiB7IHJlc3VsdCB9KTsKKyAg
ICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoaW50ZWdyaXR5TWV0YWRhdGEsIFsmcmVzdWx0XSAo
YXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBl
bmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKyAgICAgICAgc3Bs
aXRPblNwYWNlcyhwYXJzaW5nQnVmZmVyLCBJbnRlZ3JpdHlNZXRhZGF0YVBhcnNlcjxDaGFyYWN0
ZXJUeXBlPiB7IHJlc3VsdCB9KTsKKyAgICB9KTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+
CiAKIApAQCAtMjEyLDIyICsyMTMsMjMgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRp
ZFJlY2VpdmVIZQogICAgIC8vIFJGQzI2MTYsIHNlY3Rpb24gNC4yIHNwZWNpZmllcyB0aGF0IGhl
YWRlcnMgYXBwZWFyaW5nIG11bHRpcGxlIHRpbWVzIGNhbgogICAgIC8vIGJlIGNvbWJpbmVkIHdp
dGggYSBjb21tYS4gV2FsayB0aGUgaGVhZGVyIHN0cmluZywgYW5kIHBhcnNlIGVhY2ggY29tbWEK
ICAgICAvLyBzZXBhcmF0ZWQgY2h1bmsgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuCi0gICAgYXV0byBj
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhoZWFkZXIpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGJlZ2luICsgaGVhZGVyLmxl
bmd0aCgpOwotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwVW50aWw8
VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcsJyk7Ci0KLSAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIy
IE9SIGhlYWRlcjEKLSAgICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAg
ICAgIG1fcG9saWNpZXMuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSwgcG9s
aWN5RnJvbSkpOwotCi0gICAgICAgIC8vIFNraXAgdGhlIGNvbW1hLCBhbmQgYmVnaW4gdGhlIG5l
eHQgaGVhZGVyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgIEFTU0VSVChwb3Np
dGlvbiA9PSBlbmQgfHwgKnBvc2l0aW9uID09ICcsJyk7Ci0gICAgICAgIHNraXBFeGFjdGx5PFVD
aGFyPihwb3NpdGlvbiwgZW5kLCAnLCcpOwotICAgICAgICBiZWdpbiA9IHBvc2l0aW9uOwotICAg
IH0KKyAgICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoaGVhZGVyLCBbJl0oYXV0byBwYXJzaW5n
QnVmZmVyKSB7CisgICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7
CisgICAgCisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSkgeworICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAg
ICAgICAgICAgIC8vIGhlYWRlcjEsaGVhZGVyMiBPUiBoZWFkZXIxCisgICAgICAgICAgICAvLyAg
ICAgICAgXiAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5k
KENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5n
KGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiksIHR5cGUsIHBvbGljeUZy
b20pKTsKKworICAgICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4
dCBoZWFkZXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVChw
YXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKnBhcnNpbmdCdWZmZXIgPT0gJywnKTsKKyAgICAgICAg
ICAgIHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcsJyk7CisgICAgICAgICAgICBiZWdpbiA9
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIAogCiAg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgYXBwbHlQb2xpY3lUb1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3Bw
CShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMy
LDE2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
UGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlz
RGlyZWN0aXZlTmFtZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKENoYXJhY3RlclR5
cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsK
IH0KIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVWYWx1
ZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlTcGFjZShj
KSB8fCAoYyA+PSAweDIxICYmIGMgPD0gMHg3ZSk7IC8vIFdoaXRlc3BhY2UgKyBWQ0hBUgogfQpA
QCAtMzMzLDIyNCArMzM0LDIxOCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6CiAgICAgaWYgKHBvbGljeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocG9saWN5KS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHBvbGljeS5sZW5ndGgoKTsKLQotICAgIHdoaWxlIChw
b3NpdGlvbiA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogZGlyZWN0aXZlQmVnaW4gPSBw
b3NpdGlvbjsKLSAgICAgICAgc2tpcFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOycpOwot
Ci0gICAgICAgIFN0cmluZyBuYW1lLCB2YWx1ZTsKLSAgICAgICAgaWYgKHBhcnNlRGlyZWN0aXZl
KGRpcmVjdGl2ZUJlZ2luLCBwb3NpdGlvbiwgbmFtZSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGlmIChwb2xpY3lGcm9tID09IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0g
Q29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1aXZNZXRhKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpCi0gICAgICAgICAgICAgICAgICAgIHx8
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OnJlcG9ydFVSSSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJh
bWVBbmNlc3RvcnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFs
aWREaXJlY3RpdmVJbkhUVFBFcXVpdk1ldGEobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhwb2xpY3ksIFsmXShhdXRvIHBh
cnNpbmdCdWZmZXIpIHsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIs
ICc7Jyk7CisKKyAgICAgICAgICAgIGlmIChhdXRvIGRpcmVjdGl2ZSA9IHBhcnNlRGlyZWN0aXZl
KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBkaXJlY3RpdmVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUtPm5hbWUuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBv
bGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1aXZN
ZXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRi
b3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRp
cmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9y
dFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
ZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJh
bWVBbmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJ
bnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lG
cm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlmICgh
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpy
ZXBvcnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBhZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAgICAg
QVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAgc2tp
cEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAgICAg
QVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnOycpOwor
ICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJzsnKTsKKyAgICAgICAgfQor
ICAgIH0pOwogfQogCiAvLyBkaXJlY3RpdmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFt
ZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEqKCBB
TFBIQSAvIERJR0lUIC8gIi0iICkKIC8vIGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZD
SEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYXV0byBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURp
cmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIp
IC0+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4KIHsKLSAgICBBU1NFUlQobmFtZS5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIqIHBv
c2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBh
cnNpbmdCdWZmZXIpOwogCiAgICAgLy8gRW1wdHkgZGlyZWN0aXZlIChlLmcuICI7OzsiKS4gRXhp
dCBlYXJseS4KLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lw
V2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Cisg
ICAgYXV0byBuYW1lQmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZl
cik7CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1wdHkuCi0gICAg
aWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlz
Tm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydFVu
c3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2lu
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZUJlZ2luID09IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNO
b3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5z
dXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gbmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
Ci0gICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsKKyAg
ICBhdXRvIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
LSBuYW1lQmVnaW4pOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFBh
cnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIHsgfSB9OwogCi0gICAgaWYgKCFza2lwRXhh
Y3RseTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICBza2lw
V2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIG1f
cG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0
aW9uIC0gbmFtZUJlZ2luKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcikpIHsKKyAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmlu
ZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbikpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgIGNvbnN0IFVDaGFyKiB2YWx1
ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBhdXRvIHZhbHVlQmVnaW4gPSBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0
aXZlVmFsdWVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uICE9
IGVuZCkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFy
YWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKSB7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1lLCBT
dHJpbmcodmFsdWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5lbmQoKSAtIHZhbHVlQmVnaW4pKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0aXZl
LXZhbHVlIG1heSBiZSBlbXB0eS4KLSAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlQmVnaW4gPT0gcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1l
KSwgeyB9IH07CiAKLSAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAtIHZh
bHVlQmVnaW4pOwotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gdmFsdWUgPSBTdHJpbmcodmFs
dWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdmFsdWVCZWdpbik7CisgICAgcmV0
dXJuIFBhcnNlZERpcmVjdGl2ZSB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpIH07CiB9
CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRV
UkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJlY3Rp
dmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKCFtX3JlcG9ydFVSSXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFs
dWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9
IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgdmFsdWUubGVu
Z3RoKCk7CisgICAgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKGRpcmVjdGl2ZS52YWx1ZSwgWyZd
KGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlw
ZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5cGU7CiAKLSAgICB3aGls
ZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3Bh
Y2U+KHBvc2l0aW9uLCBlbmQpOworICAgICAgICBhdXRvIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkpIHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJ
U3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGNvbnN0IFVDaGFyKiB1cmxCZWdpbiA9
IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9z
aXRpb24sIGVuZCk7CisgICAgICAgICAgICBhdXRvIHVybEJlZ2luID0gcGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVND
SUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgaWYgKHVybEJlZ2luIDwgcG9zaXRp
b24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKHZhbHVlLnN1YnN0cmluZyh1cmxC
ZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0gdXJsQmVnaW4pKTsKLSAgICB9CisgICAgICAg
ICAgICBpZiAodXJsQmVnaW4gPCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgICAg
ICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZChkaXJlY3RpdmUudmFsdWUuc3Vic3RyaW5nKHVybEJl
Z2luIC0gYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHVybEJlZ2luKSk7CisgICAg
ICAgIH0KKyAgICB9KTsKIH0KIAogCiB0ZW1wbGF0ZTxjbGFzcyBDU1BEaXJlY3RpdmVUeXBlPgot
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8
Q1NQRGlyZWN0aXZlVHlwZT4mIGRpcmVjdGl2ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2
ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBleGlzdGluZ0RpcmVjdGl2ZSkK
IHsKLSAgICBpZiAoZGlyZWN0aXZlKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0
ZURpcmVjdGl2ZShuYW1lKTsKKyAgICBpZiAoZXhpc3RpbmdEaXJlY3RpdmUpIHsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBkaXJlY3RpdmUgPSBtYWtlVW5pcXVlPENTUERpcmVjdGl2
ZVR5cGU+KCp0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAgZXhpc3RpbmdEaXJlY3RpdmUgPSBtYWtl
VW5pcXVlPENTUERpcmVjdGl2ZVR5cGU+KCp0aGlzLCBXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSwg
V1RGTW92ZShkaXJlY3RpdmUudmFsdWUpKTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHNhbmRib3hQb2xpY3kpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShQYXJzZWREaXJlY3RpdmUmJiBkaXJlY3Rp
dmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRJ
bnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3ku
cmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUoZGlyZWN0aXZlLm5hbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2hhdmVTYW5kYm94UG9saWN5KSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hhdmVTYW5kYm94UG9saWN5ID0gdHJ1ZTsKICAgICBT
dHJpbmcgaW52YWxpZFRva2VuczsKLSAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJveEZsYWdzKFNl
Y3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KHNhbmRib3hQb2xpY3ksIGludmFsaWRU
b2tlbnMpKTsKKyAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJveEZsYWdzKFNlY3VyaXR5Q29udGV4
dDo6cGFyc2VTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSwgaW52YWxpZFRv
a2VucykpOwogICAgIGlmICghaW52YWxpZFRva2Vucy5pc051bGwoKSkKICAgICAgICAgbV9wb2xp
Y3kucmVwb3J0SW52YWxpZFNhbmRib3hGbGFncyhpbnZhbGlkVG9rZW5zKTsKIH0KIAotdm9pZCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1cmVSZXF1
ZXN0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OnNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNlZERpcmVjdGl2ZSYmIGRp
cmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJl
cG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShXVEZNb3ZlKGRpcmVj
dGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fdXBncmFkZUlu
c2VjdXJlUmVxdWVzdHMpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0
aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoV1RG
TW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fdXBn
cmFkZUluc2VjdXJlUmVxdWVzdHMgPSB0cnVlOwogICAgIG1fcG9saWN5LnNldFVwZ3JhZGVJbnNl
Y3VyZVJlcXVlc3RzKHRydWUpOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OnNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldEJsb2NrQWxs
TWl4ZWRDb250ZW50RW5hYmxlZChQYXJzZWREaXJlY3RpdmUmJiBkaXJlY3RpdmUpCiB7CiAgICAg
aWYgKG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJlY3RpdmUpIHsKLSAgICAgICAgbV9wb2xp
Y3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBv
cnREdXBsaWNhdGVEaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIG1faGFzQmxvY2tBbGxNaXhlZENvbnRlbnREaXJlY3RpdmUgPSB0
cnVlOwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFkZERp
cmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFkZERpcmVjdGl2ZShQYXJzZWREaXJl
Y3RpdmUmJiBkaXJlY3RpdmUpCiB7Ci0gICAgQVNTRVJUKCFuYW1lLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKCFkaXJlY3RpdmUubmFtZS5pc0VtcHR5KCkpOwogCi0gICAgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmRl
ZmF1bHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9kZWZhdWx0U3JjKTsKKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmRlZmF1bHRTcmMpKSB7CisgICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRp
cmVjdGl2ZSksIG1fZGVmYXVsdFNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0
aG1zRm9ySW5saW5lU2NyaXB0cyhtX2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsK
ICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTdHlsZXNoZWV0cyht
X2RlZmF1bHRTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnNjcmlwdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3NjcmlwdFNyYyk7Cisg
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgeworICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
V1RGTW92ZShkaXJlY3RpdmUpLCBtX3NjcmlwdFNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhh
c2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cyhtX3NjcmlwdFNyYy0+aGFzaEFsZ29yaXRobXNV
c2VkKCkpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMpKSB7Ci0gICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihu
YW1lLCB2YWx1ZSwgbV9zdHlsZVNyYyk7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6c3R5bGVTcmMpKSB7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fc3R5bGVTcmMp
OwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVN0eWxlc2hlZXRz
KG1fc3R5bGVTcmMtPmhhc2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6Om9iamVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9vYmplY3RTcmMpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lU3JjKSkgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6Om9iamVjdFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fb2Jq
ZWN0U3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5u
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVTcmMpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBMb2cgdG8gY29uc29sZSAiVGhlIGZyYW1lLXNyYyBkaXJlY3RpdmUg
aXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBjaGlsZC1zcmMgZGlyZWN0aXZlIGluc3RlYWQuIgogICAg
ICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3
NzM+LgotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZnJhbWVTcmMpOwotICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6aW1nU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ltZ1NyYyk7Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mb250
U3JjKTsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mcmFtZVNyYyk7CisgICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGly
ZWN0aXZlKSwgbV9pbWdTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
ZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250
U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb250U3JjKTsKICNpZiBFTkFC
TEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCi0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWFuaWZlc3RT
cmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWFuaWZlc3RTcmMpOworICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjptYW5pZmVzdFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2
ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVj
dGl2ZSksIG1fbWFuaWZlc3RTcmMpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWVk
aWFTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fbWVkaWFTcmMpOwotICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OmNvbm5lY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fY29ubmVjdFNy
Yyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQotICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFs
dWUsIG1fY2hpbGRTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24pKQotICAg
ICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZT4obmFtZSwgdmFsdWUsIG1fZm9ybUFjdGlvbik7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
YmFzZVVSSSkpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9iYXNlVVJJKTsKLSAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6bWVkaWFTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX21lZGlhU3Jj
KTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykpCisgICAgICAg
IHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
PihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fY29ubmVjdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9j
aGlsZFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUu
bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24pKQor
ICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Zvcm1BY3Rpb24pOworICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpiYXNlVVJJKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9iYXNlVVJJKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVBbmNl
c3RvcnMpKSB7CiAgICAgICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgICAgIG1fcG9s
aWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUoZGly
ZWN0aXZlLm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHNl
dENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihu
YW1lLCB2YWx1ZSwgbV9mcmFtZUFuY2VzdG9ycyk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpw
bHVnaW5UeXBlcykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lNZWRpYUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3BsdWdpblR5cGVzKTsKLSAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KSkKLSAgICAgICAgYXBwbHlTYW5kYm94UG9saWN5KG5h
bWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQotICAgICAgICBw
YXJzZVJlcG9ydFVSSShuYW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFk
ZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhu
YW1lKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVudCkpCi0gICAg
ICAgIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChuYW1lKTsKKyAgICAgICAgc2V0Q1NQ
RGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1v
dmUoZGlyZWN0aXZlKSwgbV9mcmFtZUFuY2VzdG9ycyk7CisgICAgfSBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
cGx1Z2luVHlwZXMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0
aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzYW5kYm94KSkK
KyAgICAgICAgYXBwbHlTYW5kYm94UG9saWN5KFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAgIHBhcnNlUmVwb3J0
VVJJKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKKyAgICAgICAgc2V0VXBncmFkZUluc2VjdXJlUmVx
dWVzdHMoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6YmxvY2tBbGxNaXhlZENvbnRlbnQpKQorICAgICAgICBzZXRCbG9ja0FsbE1peGVkQ29udGVu
dEVuYWJsZWQoV1RGTW92ZShkaXJlY3RpdmUpKTsKICAgICBlbHNlCi0gICAgICAgIG1fcG9saWN5
LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBv
cnRVbnN1cHBvcnRlZERpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgJKHJldmlz
aW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTYgKzg5LDE5IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlBvbGljeUZyb20pOwogCi0gICAgYm9vbCBwYXJzZURpcmVjdGl2ZShjb25z
dCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcGFyc2VQbHVnaW5UeXBlcyhjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgYWRkRGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhcHBseVNhbmRi
b3hQb2xpY3koY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRib3hQb2xpY3kp
OwotICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIHN0cnVjdCBQYXJzZWREaXJlY3RpdmUgeworICAgICAgICBTdHJpbmcgbmFt
ZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgIH07CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPiBwYXJzZURpcmVjdGl2ZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB2b2lkIHBhcnNlUmVwb3J0
VVJJKFBhcnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFkZERpcmVjdGl2ZShQYXJzZWREaXJl
Y3RpdmUmJik7CisgICAgdm9pZCBhcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGlyZWN0aXZlJiYp
OworICAgIHZvaWQgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2VkRGlyZWN0aXZlJiYp
OworICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNlZERpcmVjdGl2
ZSYmKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBDU1BEaXJlY3RpdmVUeXBlPgotICAgIHZvaWQg
c2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
c3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+Jik7CisgICAgdm9pZCBzZXRDU1BEaXJl
Y3RpdmUoUGFyc2VkRGlyZWN0aXZlJiYsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBl
PiYpOwogCiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSogb3Bl
cmF0aXZlRGlyZWN0aXZlKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUq
KSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCShy
ZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCAr
MzEsMTIgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Lmgi
CiAjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIoVUNo
YXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBpc01l
ZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJ
U3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTQsNjEgQEAgYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIHZhbHVl
Lmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3BsdWdpbi10eXBl
czsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJlY3RpdmVMaXN0KCku
cG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICAvLyBfX19f
XyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4KLSAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAo
cG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIG1pbWUx
L21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4gPSBwb3NpdGlv
bjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9s
aWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBi
ZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2tpcFdo
aWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgcmVh
ZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7Cisg
ICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVm
ZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1l
MgotICAgICAgICAvLyAgICAgIF4KLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9z
aXRpb24sIGVuZCwgJy8nKSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFT
Q0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBv
bGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0g
YmVnaW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAgIHdoaWxl
IChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAg
Ly8gX19fX18gT1IgX19fX19taW1lMS9taW1lMQorICAgICAgICAgICAgLy8gXiAgICAgICAgXgor
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2lu
Z0J1ZmZlcik7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWlt
ZTIKKyAgICAgICAgICAgIC8vIF4KKyAgICAgICAgICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5
cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZm
ZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZh
bGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBi
ZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwYXJz
aW5nQnVmZmVyKTsKKworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAg
ICAgICAgICAgIC8vICAgICAgXgorICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0
ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBl
cyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG1p
bWUxL21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyAgICAgICBeCisgICAgICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihw
YXJzaW5nQnVmZmVyKSkgeworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAgIGRpcmVj
dGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2lu
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5
cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIgT1IgbWltZTEvbWltZTEgIE9SIG1pbWUxL21pbWUx
L2Vycm9yCisgICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAg
ICAgIF4gICAgICAgICAgICAgICBeCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXND
aGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNOb3RBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSkg
eworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3Bh
Y2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xp
Y3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJlZ2luLCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOwogCi0gICAgICAgIC8vIG1pbWUxL21pbWUx
IG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAg
ICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0g
ICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5
cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8IGlzQVNDSUlT
cGFjZSgqcGFyc2luZ0J1ZmZlcikpOwogICAgICAgICB9Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIC8vIG1p
bWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJv
cgotICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAg
ICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiBpc05vdEFTQ0lJU3Bh
Y2UoKnBvc2l0aW9uKSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJ
U3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVn
aW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2lu
VHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotCi0gICAgICAgIEFT
U0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwotICAgIH0K
KyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdC5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw0
OCArNTcsNDEgQEAgc3RhdGljIGJvb2wgaXNDU1BEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cgogICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYyk7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlQ2hh
cmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Ym9vbCBpc1NvdXJjZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFp
c0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihVQ2hhciBj
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hh
cmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJp
YyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFj
dGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9v
bCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVy
biBjICE9ICc/JyAmJiBjICE9ICcjJzsKIH0KIAotc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUg
YykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBj
ID09ICctJyB8fCBjID09ICcuJzsKIH0KIAotc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2go
VUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlz
Tm90Q29sb25PclNsYXNoKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnOicg
JiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29s
IGlzU291cmNlTGlzdE5vbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJz
aW5nQnVmZmVyKQogewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3Rl
cnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKTsK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4oYmVnaW4sIGVuZCk7Ci0KLSAgICBj
b25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU291
cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luLCAiJ25vbmUnIikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNl
PihwYXJzaW5nQnVmZmVyKTsKIAotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihw
b3NpdGlvbiwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgIGlmICghc2tpcEV4
YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworCisgICAgcmV0dXJu
IHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKIH0KIAogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdChjb25zdCBDb250ZW50U2VjdXJp
dHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lKQpAQCAtMTA4LDEy
ICsxMDIsMTQgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6Q29udGVudAogCiB2
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKGlzU291cmNlTGlzdE5vbmUodmFsdWUpKSB7Ci0gICAgICAgIG1f
aXNOb25lID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBwYXJz
ZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOworICAgIHJlYWRDaGFy
YWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAg
ICBpZiAoaXNTb3VyY2VMaXN0Tm9uZShwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICAgICAgbV9p
c05vbmUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
cGFyc2UocGFyc2luZ0J1ZmZlcik7CisgICAgfSk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6aXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJiB1cmwp
IGNvbnN0CkBAIC0xNjAsNDIgKzE1NiwzNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6Om1hCiAvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpX
U1Agc291cmNlICkgKldTUCBdCiAvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIg
KldTUAogLy8KLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
Y29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBl
bmQpIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBl
bmQpOwotICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQorICAgIHdoaWxlIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKHBhcnNp
bmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBV
Q2hhciogYmVnaW5Tb3VyY2UgPSBwb3NpdGlvbjsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBp
c1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW5Tb3Vy
Y2UgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgU3Ry
aW5nIHNjaGVtZSwgaG9zdCwgcGF0aDsKLSAgICAgICAgT3B0aW9uYWw8dWludDE2X3Q+IHBvcnQ7
Ci0gICAgICAgIGJvb2wgaG9zdEhhc1dpbGRjYXJkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgcG9y
dEhhc1dpbGRjYXJkID0gZmFsc2U7CisgICAgICAgIGF1dG8gc291cmNlUGFyc2luZ0J1ZmZlciA9
IFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIH07CiAKLSAgICAgICAgaWYgKHBhcnNlTm9uY2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0
aW9uKSkKKyAgICAgICAgaWYgKHBhcnNlTm9uY2VTb3VyY2Uoc291cmNlUGFyc2luZ0J1ZmZlcikp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGFyc2VIYXNoU291cmNlKGJl
Z2luU291cmNlLCBwb3NpdGlvbikpCisgICAgICAgIGlmIChwYXJzZUhhc2hTb3VyY2Uoc291cmNl
UGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGFy
c2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uLCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgs
IGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgeworICAgICAgICBpZiAoYXV0byBz
b3VyY2UgPSBwYXJzZVNvdXJjZShzb3VyY2VQYXJzaW5nQnVmZmVyKSkgewogICAgICAgICAgICAg
Ly8gV2lsZGNhcmQgaG9zdHMgYW5kIGtleXdvcmQgc291cmNlcyAoJ3NlbGYnLCAndW5zYWZlLWlu
bGluZScsCiAgICAgICAgICAgICAvLyBldGMuKSBhcmVuJ3Qgc3RvcmVkIGluIG1fbGlzdCwgYnV0
IGFzIGF0dHJpYnV0ZXMgb24gdGhlIHNvdXJjZQogICAgICAgICAgICAgLy8gbGlzdCBpdHNlbGYu
Ci0gICAgICAgICAgICBpZiAoc2NoZW1lLmlzRW1wdHkoKSAmJiBob3N0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGlmIChzb3VyY2UtPnNjaGVtZS5pc0VtcHR5KCkgJiYgc291cmNlLT5ob3N0LnZh
bHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
IChpc0NTUERpcmVjdGl2ZU5hbWUoaG9zdCkpCi0gICAgICAgICAgICAgICAgbV9wb2xpY3kucmVw
b3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgaG9zdCk7Ci0g
ICAgICAgICAgICBtX2xpc3QuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZShtX3Bv
bGljeSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0SGFzV2lsZGNhcmQsIHBvcnRIYXNX
aWxkY2FyZCkpOworICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFtZShzb3VyY2UtPmhv
c3QudmFsdWUpKQorICAgICAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydERpcmVjdGl2ZUFzU291
cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUsIHNvdXJjZS0+aG9zdC52YWx1ZSk7CisgICAg
ICAgICAgICBtX2xpc3QuYXBwZW5kKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZShtX3BvbGlj
eSwgc291cmNlLT5zY2hlbWUsIHNvdXJjZS0+aG9zdC52YWx1ZSwgc291cmNlLT5wb3J0LnZhbHVl
LCBzb3VyY2UtPnBhdGgsIHNvdXJjZS0+aG9zdC5oYXNXaWxkY2FyZCwgc291cmNlLT5wb3J0Lmhh
c1dpbGRjYXJkKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0
SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW5Tb3Vy
Y2UsIHBvc2l0aW9uIC0gYmVnaW5Tb3VyY2UpKTsKKyAgICAgICAgICAgIG1fcG9saWN5LnJlcG9y
dEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luU291
cmNlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpblNvdXJjZSkpOwogCi0gICAgICAg
IEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOworICAg
ICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8IGlzQVNDSUlTcGFjZSgqcGFyc2lu
Z0J1ZmZlcikpOwogICAgIH0KICAgICAKICAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKQEAgLTIw
NSwyNzAgKzE5NiwyOTMgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YQogLy8gICAgICAgICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBvcnQg
XSBbIHBhdGggXSApCiAvLyAgICAgICAgICAgICAgICAgICAvICInc2VsZiciCiAvLwotYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIE9w
dGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNh
cmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OlNvdXJjZT4gQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTb3VyY2UoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChiZWdpbiA9PSBl
bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocGFyc2lu
Z0J1ZmZlciwgIidub25lJyIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
U291cmNlIHNvdXJjZTsKIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAn
KicpIHsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxICYmICpw
YXJzaW5nQnVmZmVyID09ICcqJykgewogICAgICAgICBtX2FsbG93U3RhciA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInc2Vs
ZiciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZm
ZXIsICInc2VsZiciKSkgewogICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWlu
bGluZSciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdC
dWZmZXIsICIndW5zYWZlLWlubGluZSciKSkgewogICAgICAgICBtX2FsbG93SW5saW5lID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgfQog
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdp
biwgIid1bnNhZmUtZXZhbCciKSkgeworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlD
YXNlKHBhcnNpbmdCdWZmZXIsICIndW5zYWZlLWV2YWwnIikpIHsKICAgICAgICAgbV9hbGxvd0V2
YWwgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsK
ICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBjb25zdCBV
Q2hhciogYmVnaW5Ib3N0ID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luUGF0aCA9IGVu
ZDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKKyAgICBhdXRvIGJlZ2lu
ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIGF1dG8gYmVnaW5Ib3N0ID0gYmVnaW47
CisgICAgYXV0byBiZWdpblBhdGggPSBwYXJzaW5nQnVmZmVyLmVuZCgpOworICAgIGNvbnN0IENo
YXJhY3RlclR5cGUqIGJlZ2luUG9ydCA9IG51bGxwdHI7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIs
IGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNOb3RDb2xvbk9yU2xhc2g+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBv
c2l0aW9uID09IGVuZCkgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpIHsKICAgICAg
ICAgLy8gaG9zdAogICAgICAgICAvLyAgICAgXgotICAgICAgICByZXR1cm4gcGFyc2VIb3N0KGJl
Z2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCk7CisgICAgICAgIGF1dG8g
aG9zdCA9IHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Ib3N0LCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgfSk7CisgICAgICAgIGlmICghaG9zdCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgc291cmNlLmhvc3QgPSBXVEZNb3ZlKCpob3N0
KTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBl
bmQgJiYgKnBvc2l0aW9uID09ICcvJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8g
aG9zdC9wYXRoIHx8IGhvc3QvIHx8IC8KICAgICAgICAgLy8gICAgIF4gICAgICAgICAgICBeICAg
IF4KLSAgICAgICAgcmV0dXJuIHBhcnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBo
b3N0SGFzV2lsZGNhcmQpICYmIHBhcnNlUGF0aChwb3NpdGlvbiwgZW5kLCBwYXRoKTsKKyAgICAg
ICAgYXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3Qs
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KTsKKyAgICAgICAgaWYgKCFob3N0KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBh
dGgocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcGF0aCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgc291cmNlLmhvc3QgPSBXVEZNb3ZlKCpob3N0KTsK
KyAgICAgICAgc291cmNlLnBhdGggPSBXVEZNb3ZlKCpwYXRoKTsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6
JykgewotICAgICAgICBpZiAoZW5kIC0gcG9zaXRpb24gPT0gMSkgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnOicp
IHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSkgewog
ICAgICAgICAgICAgLy8gc2NoZW1lOgogICAgICAgICAgICAgLy8gICAgICAgXgotICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NoZW1lID0gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2lu
LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSk7CisgICAgICAgICAgICBpZiAoIXNjaGVtZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgICAgICBzb3Vy
Y2Uuc2NoZW1lID0gV1RGTW92ZSgqc2NoZW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
b3NpdGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMV0gPT0gJy8n
KSB7CiAgICAgICAgICAgICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAg
ICAgLy8gICAgICAgXiAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAoIXBhcnNlU2No
ZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhh
Y3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lw
RXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFz
a2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOwot
ICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24s
IGVuZCk7CisgICAgICAgICAgICBhdXRvIHNjaGVtZSA9IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNp
bmdCdWZmZXIgeyBiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pOworICAgICAgICAg
ICAgaWYgKCFzY2hlbWUKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocGFyc2luZ0J1ZmZlciwgJzonKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLycpCisgICAgICAgICAgICAgICAgfHwg
IXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICAgICAgc291cmNlLnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7CisKKyAgICAgICAgICAg
IGJlZ2luSG9zdCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2luZ0J1ZmZlcik7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6
JykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkg
JiYgKnBhcnNpbmdCdWZmZXIgPT0gJzonKSB7CiAgICAgICAgICAgICAvLyBob3N0OnBvcnQgfHwg
c2NoZW1lOi8vaG9zdDpwb3J0CiAgICAgICAgICAgICAvLyAgICAgXiAgICAgICAgICAgICAgICAg
ICAgIF4KLSAgICAgICAgICAgIGJlZ2luUG9ydCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tp
cFVudGlsPFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpOworICAgICAgICAgICAgYmVnaW5Qb3J0
ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsPENoYXJh
Y3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcvJykgeworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLycp
IHsKICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdC9wYXRoIHx8IHNjaGVtZTovL2hvc3Q6cG9ydC9w
YXRoCiAgICAgICAgIC8vICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBe
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5Ib3N0
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBiZWdpblBhdGgg
PSBwb3NpdGlvbjsKKyAgICAgICAgYmVnaW5QYXRoID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
OwogICAgIH0KIAotICAgIGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVn
aW5Qb3J0IDogYmVnaW5QYXRoLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIg
eyBiZWdpbkhvc3QsIGJlZ2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2luUGF0aCB9KTsKKyAgICBp
ZiAoIWhvc3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYmVnaW5Q
b3J0KSB7CisgICAgICAgIGF1dG8gcG9ydCA9IHBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVy
IHsgYmVnaW5Qb3J0LCBiZWdpblBhdGggfSk7CisgICAgICAgIGlmICghcG9ydCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWJlZ2luUG9ydCkKLSAgICAgICAg
cG9ydCA9IFdURjo6bnVsbG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFwYXJzZVBvcnQo
YmVnaW5Qb3J0LCBiZWdpblBhdGgsIHBvcnQsIHBvcnRIYXNXaWxkY2FyZCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNvdXJjZS5wb3J0ID0gV1RGTW92ZSgqcG9ydCk7CiAg
ICAgfQogCi0gICAgaWYgKGJlZ2luUGF0aCAhPSBlbmQpIHsKLSAgICAgICAgaWYgKCFwYXJzZVBh
dGgoYmVnaW5QYXRoLCBlbmQsIHBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChiZWdpblBhdGggIT0gcGFyc2luZ0J1ZmZlci5lbmQoKSkgeworICAgICAgICBhdXRvIHBh
dGggPSBwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luUGF0aCwgcGFyc2luZ0J1
ZmZlci5lbmQoKSB9KTsKKyAgICAgICAgaWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICBzb3VyY2UucGF0aCA9IFdURk1vdmUoKnBhdGgpOwogICAg
IH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7
CisgICAgcmV0dXJuIHNvdXJjZTsKIH0KIAogLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hl
bWU+IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4NgogLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBB
TFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBPcHRpb25hbDxTdHJpbmc+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
cnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZl
cikKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoc2NoZW1lLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVm
ZmVyLmVuZCgpKTsKIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBi
ZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8
VUNoYXIsIGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlBbHBoYT4ocGFy
c2luZ0J1ZmZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwV2hp
bGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
KyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0
ZXI+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBi
ZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFN0cmluZyhiZWdpbiwgcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pOwogfQogCiAvLyBob3N0ICAgICAgICAgICAgICA9
IFsgIiouIiBdIDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hhciApCiAvLyAgICAgICAgICAg
ICAgICAgICAvICIqIgogLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0i
CiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhv
c3RIYXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFs
PENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6Okhvc3Q+IENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgQVNT
RVJUKGhvc3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIWhvc3RIYXNXaWxkY2FyZCk7CisgICAg
QVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsK
IAotICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgSG9zdCBob3N0OwogCi0gICAg
aWYgKHNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnKicpKSB7Ci0gICAgICAgIGhv
c3RIYXNXaWxkY2FyZCA9IHRydWU7CisgICAgaWYgKHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+
KHBhcnNpbmdCdWZmZXIsICcqJykpIHsKKyAgICAgICAgaG9zdC5oYXNXaWxkY2FyZCA9IHRydWU7
CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGhvc3Q7CiAKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwg
Jy4nKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnLicpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogaG9zdEJlZ2luID0gcG9z
aXRpb247CisgICAgYXV0byBob3N0QmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAK
LSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxV
Q2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpIHsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFy
YWN0ZXI+KHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCk7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBh
cnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tpcEV4YWN0
bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcuJykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAh
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy4nKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgQVNTRVJUKHBvc2l0aW9uID09
IGVuZCk7Ci0gICAgaG9zdCA9IFN0cmluZyhob3N0QmVnaW4sIGVuZCAtIGhvc3RCZWdpbik7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAg
aG9zdC52YWx1ZSA9IFN0cmluZyhob3N0QmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAt
IGhvc3RCZWdpbik7CisgICAgcmV0dXJuIGhvc3Q7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
T3B0aW9uYWw8U3RyaW5nPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBh
dGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewot
ICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOwotICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgp
KTsKICAgICAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hp
bGU8VUNoYXIsIGlzUGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAg
YXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hh
cmFjdGVyVHlwZSwgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKICAg
ICAvLyBwYXRoL3RvL2ZpbGUuanM/cXVlcnk9c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNo
b3IKICAgICAvLyAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF4KLSAgICBpZiAocG9zaXRpb24gPCBlbmQpCi0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFs
aWRQYXRoQ2hhcmFjdGVyKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdp
biksICpwb3NpdGlvbik7Ci0gICAgCi0gICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAKLSAgICBBU1NFUlQocG9z
aXRpb24gPD0gZW5kKTsKLSAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICgqcG9zaXRpb24g
PT0gJyMnIHx8ICpwb3NpdGlvbiA9PSAnPycpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
cGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisgICAgICAgIG1fcG9saWN5
LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVyKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2lu
LCBwYXJzaW5nQnVmZmVyLmVuZCgpIC0gYmVnaW4pLCAqcGFyc2luZ0J1ZmZlcik7CisKKyAgICBB
U1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwor
ICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKCpwYXJzaW5nQnVmZmVyID09ICcj
JyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnPycpKTsKKworICAgIHJldHVybiBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoU3RyaW5nVmlldyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0g
YmVnaW4pKTsKIH0KIAogLy8gcG9ydCAgICAgICAgICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioi
ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChj
b25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYg
cG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6UG9ydD4gQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0g
ZW5kKTsKLSAgICBBU1NFUlQoIXBvcnQpOwotICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsK
KyAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5k
KCkpOwogICAgIAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KGJlZ2luLCBlbmQsICc6Jykp
CisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicp
KQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAKLSAgICBpZiAoYmVnaW4gPT0g
ZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICBpZiAoZW5kIC0gYmVn
aW4gPT0gMSAmJiAqYmVnaW4gPT0gJyonKSB7Ci0gICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7
Ci0gICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdC
dWZmZXIgPT0gJyonKSB7CisgICAgICAgIFBvcnQgcG9ydDsKKyAgICAgICAgcG9ydC5oYXNXaWxk
Y2FyZCA9IHRydWU7CisgICAgICAgIHJldHVybiBwb3J0OwogICAgIH0KICAgICAKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlE
aWdpdD4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihwYXJz
aW5nQnVmZmVyKTsKICAgICAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgYm9vbCBvazsKLSAgICBpbnQgcG9ydEludCA9IGNo
YXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVnaW4sICZvayk7Ci0gICAgaWYgKHBv
cnRJbnQgPCAwIHx8IHBvcnRJbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb3J0ID0gcG9ydEludDsKLSAgICByZXR1
cm4gb2s7CisgICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luLCAmb2spOworICAgIGlmICghb2sgfHwgcG9y
dEludCA8IDAgfHwgcG9ydEludCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFBvcnQgcG9ydDsKKyAgICBw
b3J0LnZhbHVlID0gcG9ydEludDsKKyAgICByZXR1cm4gcG9ydDsKIH0KIAogLy8gTWF0Y2ggQmxp
bmsncyBiZWhhdmlvciBvZiBhbGxvd2luZyBhbiBlcXVhbCBzaWduIHRvIGFwcGVhciBhbnl3aGVy
ZSBpbiB0aGUgdmFsdWUgb2YgdGhlIG5vbmNlCiAvLyBldmVuIHRob3VnaCB0aGlzIGRvZXMgbm90
IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZlbCAzIHNw
ZWMuLAogLy8gPGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtY3NwLz4gKDI5IEZlYnJ1
YXJ5IDIwMTYpLgotc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihD
aGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0
ZXIoYykgfHwgYyA9PSAnPSc7CiB9CiAKIC8vIG5vbmNlLXNvdXJjZSAgICA9ICInbm9uY2UtIiBu
b25jZS12YWx1ZSAiJyIKIC8vIG5vbmNlLXZhbHVlICAgICA9IGJhc2U2NC12YWx1ZQotYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VOb25jZVNv
dXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbm9uY2VQcmVmaXhMZW5ndGggPSA3OwotICAgIGlmICghU3Ry
aW5nVmlldyhiZWdpbiwgZW5kIC0gYmVnaW4pLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgi
J25vbmNlLSIpKQorICAgIGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5n
QnVmZmVyLCAiJ25vbmNlLSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gYmVnaW4gKyBub25jZVByZWZpeExlbmd0aDsKLSAgICBjb25zdCBVQ2hh
ciogYmVnaW5Ob25jZVZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc05v
bmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gPj0gZW5kIHx8
IHBvc2l0aW9uID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKworICAg
IGF1dG8gYmVnaW5Ob25jZVZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vbmNlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsK
KyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KSA9PSBiZWdpbk5vbmNlVmFsdWUgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJ1wnJykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVnaW5Ob25jZVZhbHVlLCBw
b3NpdGlvbiAtIGJlZ2luTm9uY2VWYWx1ZSkpOworICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVn
aW5Ob25jZVZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIgaGFzaC1h
bGdvcml0aG0gIi0iIGJhc2U2NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0gInNoYTI1
NiIgLyAic2hhMzg0IiAvICJzaGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFMUEhBIC8g
RElHSVQgLyAiKyIgLyAiLyIgLyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChi
ZWdpbiA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgaWYg
KCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJ1wnJykpCisgICAgaWYgKCFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnXCcnKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3Qo
cG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNEaWdl
c3QocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChwb3NpdGlvbiA+PSBlbmQgfHwgKnBvc2l0aW9uICE9ICdcJycpCisgICAg
aWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkgPiBDb250
ZW50U2VjdXJpdHlQb2xpY3lIYXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3QuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwx
OSArNTUsMzMgQEAgcHVibGljOgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gbV9p
c05vbmU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwg
Y29uc3QgVUNoYXIqIGVuZCk7CiAKLSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0
aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2Fy
ZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wg
cGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBo
b3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBi
b29sJiBwb3J0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBwYXRoKTsKLQotICAgIGJvb2wgcGFyc2VO
b25jZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHN0
cnVjdCBIb3N0IHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBib29sIGhhc1dpbGRj
YXJkOworICAgIH07CisgICAgc3RydWN0IFBvcnQgeworICAgICAgICBPcHRpb25hbDx1aW50MTZf
dD4gdmFsdWU7CisgICAgICAgIGJvb2wgaGFzV2lsZGNhcmQ7CisgICAgfTsKKyAgICBzdHJ1Y3Qg
U291cmNlIHsKKyAgICAgICAgU3RyaW5nIHNjaGVtZTsKKyAgICAgICAgSG9zdCBob3N0OworICAg
ICAgICBQb3J0IHBvcnQ7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgIH07CiAKICAgICBib29s
IGlzUHJvdG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgYm9vbCBw
YXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHBhcnNlKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gT3B0aW9uYWw8U291cmNlPiBwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBP
cHRpb25hbDxTdHJpbmc+IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEhv
c3Q+IHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQb3J0PiBwYXJzZVBvcnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8U3RyaW5nPiBwYXJzZVBhdGgoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VI
YXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCiAgICAgY29u
c3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0b3I8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402874</attachid>
            <date>2020-06-26 09:35:33 -0700</date>
            <delta_ts>2020-06-26 11:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213631-20200626093532.patch</filename>
            <type>text/plain</type>
            <size>76507</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTI2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IENvbnRlbnRTZWN1cml0
eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkb3B0
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYWNyb3NzIENTUCBjb2RlLgorICAgICAgICAtIFJlbW92ZSBV
VEYtMTYgdXBjb252ZXJzaW9ucyBpbiBDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QsCisgICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
TWVkaWFMaXN0RGlyZWN0aXZlIGFuZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lgor
CisgICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpza2lwVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJ
Q2FzZSk6CisgICAgICAgIEFkZCBvdmVybG9hZHMgZm9yIGVhY2ggaGVscGVyIHRoYXQgdGFrZSBh
IFN0cmluZ1BhcnNpbmdCdWZmZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFk
dmFuY2luZ1Bvc2l0aW9uKToKKyAgICAgICAgQ29udmVydCB0byB1c2UgYW4gT3B0aW9uYWwgcmV0
dXJuIHZhbHVlIHJhdGhlciB0aGFuIG91dHBhcmFtZXRlciArIGJvb2wuCisKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2Rl
ZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2Rl
ZENyeXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QuaDoKKyAgICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgcmF0aGVyIHRo
YW4gcmF3IHBvaW50ZXJzIGZvciBwYXJzaW5nLgorIAorICAgICAgICAqIGxvYWRlci9TdWJyZXNv
dXJjZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3BhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAgICBVc2UgU3Ry
aW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHJhdGhlciB0aGFu
IHJhdyBwb2ludGVycyBmb3IgcGFyc2luZy4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICBVc2UgU3RyaW5nUGFyc2luZ0J1ZmZlciBh
bmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0
bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAg
ICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VS
ZXBvcnRVUkkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZl
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1Zp
ZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3aXRjaCB0byB1c2luZyBPcHRpb25h
bCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBi
b29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5seSwgcGFja2FnZSB1cCBuYW1lCisg
ICAgICAgIGFuZCB2YWx1ZSBwYWlyIGludG8gYSBuZXcgUGFyc2VkRGlyZWN0aXZlIHN0cnVjdCB0
aGF0IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG1vcmUgZWFzaWx5LgorCisgICAgICAgICogcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzTWVkaWFUeXBlQ2hhcmFjdGVyKTogCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgVXNl
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBs
YWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCkuCisKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1Bh
dGhDb21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xvbk9yU2xhc2gpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJz
ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05vbmNlQ2hhcmFjdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBh
cnNlTm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVm
ZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBj
YWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNv
IHN3aXRjaCB0byB1c2luZyBPcHRpb25hbCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRo
ZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBib29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xl
YW5seSwgcGFja2FnZSB1cCBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHZhbHVlcyBpbnRvIHN0cnVj
dHMgdGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgcmV0dXJuZWQgLyBwYXNzZWQgYXJvdW5kLgorCiAy
MDIwLTA2LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUkVHUkVTU0lPTihyMjU2MTY2LCByMjYwNTk2KSBXS05hdmlnYXRpb25BY3Rpb24u
cmVxdWVzdC5hbGxIVFRQSGVhZGVyRmllbGRzIG5lZWRzIHRvIGNvbnRhaW4gVXNlci1BZ2VudCBh
bmQgQWNjZXB0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9QYXJzaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBib29sIGlzTm90QVNDSUlTcGFjZShVQ2hh
ciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitpbmxpbmUgYm9vbCBpc05vdEFTQ0lJ
U3BhY2UoQ2hhclR5cGUgYykKIHsKICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KICAg
ICAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotYm9vbCBza2lwRXhhY3RseShjb25zdCBD
aGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4K
K2Jvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5
cGUqIGVuZCwgRGVsaW1pdGVyVHlwZSBkZWxpbWl0ZXIpCiB7CiAgICAgaWYgKHBvc2l0aW9uIDwg
ZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKICAgICAgICAgKytwb3NpdGlvbjsKQEAg
LTQ5LDYgKzUwLDE2IEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCB0eXBl
bmFtZSBEZWxpbWl0ZXJUeXBlPgorYm9vbCBza2lwRXhhY3RseShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgRGVsaW1pdGVyVHlwZSBkZWxpbWl0ZXIpCit7Cisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5n
QnVmZmVyID09IGRlbGltaXRlcikgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+CiBib29s
IHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBl
bmQpCiB7CkBAIC01OSwxMyArNzAsMzAgQEAgYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlw
ZSomIHBvc2l0aQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGU+Ci12b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBD
aGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
VHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgorYm9vbCBza2lwRXhhY3Rs
eShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICBp
ZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgY2hhcmFjdGVyUHJl
ZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50
aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgRGVsaW1p
dGVyVHlwZSBkZWxpbWl0ZXIpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICpwb3Np
dGlvbiAhPSBkZWxpbWl0ZXIpCiAgICAgICAgICsrcG9zaXRpb247CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlLCB0eXBlbmFtZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50aWwo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIERlbGltaXRlclR5
cGUgZGVsaW1pdGVyKQoreworICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNS
ZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciAhPSBkZWxpbWl0ZXIpCisgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFj
dGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYg
cG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQpCiB7CkBAIC03NCw2ICsxMDIsMTMgQEAgdm9p
ZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBz
a2lwVW50aWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7
CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRp
Y2F0ZShDaGFyVHlwZSk+CiB2b2lkIHNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogZW5kKQogewogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiBj
aGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKQEAgLTgxLDYgKzExNiwxMyBAQCB2b2lkIHNr
aXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBX
aGlsZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAg
ICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgY2hhcmFj
dGVyUHJlZGljYXRlKCpwYXJzaW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUo
Q2hhclR5cGUpPgogdm9pZCByZXZlcnNlU2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRp
b24sIGNvbnN0IENoYXJUeXBlKiBzdGFydCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPj0gc3Rh
cnQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCkBAIC05MiwxMSArMTM0LDIxIEBA
IGJvb2wgc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCAKIHsKICAgICBpZiAocG9z
aXRpb24gKyBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoID4gZW5kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9u
LCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNlTGV0dGVycykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBwb3NpdGlvbiArPSAobG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAt
IDEpOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgYm9vbCByZXN1bHQgPSBXVEY6OmVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3Ro
IC0gMSwgbG93ZXJjYXNlTGV0dGVycyk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcG9zaXRp
b24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgbG93ZXJjYXNlTGV0dGVy
c0xlbmd0aD4KK2Jvb2wgc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyLCBjb25zdCBjaGFyICgmbG93ZXJj
YXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCksIGxvd2VyY2FzZUxldHRlcnNMZW5ndGgg
LSAxLCBsb3dlcmNhc2VMZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNp
bmdCdWZmZXIgKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9u
IDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDQgKzMwLDk2IEBACiAjaW5jbHVkZSA8
cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJz
aW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bv
c2l0aW9uKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSYgYWxnb3JpdGht
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtPiBwYXJzZUhhc2hBbGdvcml0aG1BZHZh
bmNpbmdQb3NpdGlvbihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5n
QnVmZmVyKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB3aXRo
IGEgbG9va3VwIHRhYmxlIG9mIHBhaXJzIG9mIGxhYmVsIC8gYWxnb3JpdGhtIGVudW0gdmFsdWVz
LCBidXQgSSBjYW4ndAogICAgIC8vIGZpZ3VyZSBvdXQgaG93IHRvIGtlZXAgdGhlIGxhYmVscyBj
b21waWxldGltZSBzdHJpbmdzIGZvciBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlLgogCi0g
ICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTI1
NiIpKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEEyNTY7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhMzg0IikpIHsK
LSAgICAgICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0
aG06OlNIQTM4NDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChza2lwRXhh
Y3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGE1MTIiKSkgewotICAgICAg
ICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hB
NTEyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKHNraXBFeGFjdGx5SWdu
b3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4g
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAic2hhMzg0IikpCisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hB
Mzg0OworICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIs
ICJzaGE1MTIiKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEE1MTI7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBP
cHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdEltcGwoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJ
bXBsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7
Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICghcGFyc2VIYXNoQWxnb3Jp
dGhtQWR2YW5jaW5nUG9zaXRpb24ocG9zaXRpb24sIGVuZCwgYWxnb3JpdGhtKSkKKyAgICBhdXRv
IGFsZ29yaXRobSA9IHBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBhcnNpbmdC
dWZmZXIpOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAn
LScpKQorICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwg
Jy0nKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luSGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAg
IHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJl
Z2luSGFzaFZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVy
KTsKKyAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwor
ICAgIHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICc9Jyk7CiAKLSAg
ICBpZiAocG9zaXRpb24gPT0gYmVnaW5IYXNoVmFsdWUpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBkaWdlc3Q7Ci0gICAgU3RyaW5nVmlldyBoYXNoVmFs
dWUoYmVnaW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpOworICAgIFN0cmlu
Z1ZpZXcgaGFzaFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkg
LSBiZWdpbkhhc2hWYWx1ZSk7CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdl
c3QsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpIHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNv
ZGUoaGFzaFZhbHVlLCBkaWdlc3QpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3Jp
dGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0
IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2VDcnlwdG9ncmFwaGlj
RGlnZXN0SW1wbChwYXJzaW5nQnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIqJiBiZWdp
biwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBw
YXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBs
KGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKHBh
cnNpbmdCdWZmZXIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5j
b2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlv
biwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIE9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09IGVu
ZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtIGFsZ29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0
aW9uKHBvc2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJz
ZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwYXJzaW5nQnVmZmVyKTsKKyAgICBpZiAo
IWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICctJykpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBiZWdpbkhhc2hW
YWx1ZSA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0Jhc2U2NE9y
QmFzZTY0VVJMQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBza2lwRXhhY3RseTxDaGFy
YWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwotICAgIHNraXBFeGFjdGx5PENoYXJhY3Rl
clR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7CisgICAgYXV0byBiZWdpbkhhc2hWYWx1ZSA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNC
YXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CisgICAgc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz0nKTsKKyAgICBza2lwRXhhY3RseTxD
aGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnPScpOwogCi0gICAgaWYgKHBvc2l0aW9uID09
IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVn
aW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7IGFsZ29yaXRobSwgU3RyaW5nKGJl
Z2luSGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKSB9OworICAgIHJldHVybiBF
bmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgU3RyaW5nKGJl
Z2luSGFzaFZhbHVlLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSkg
fTsKIH0KIAotT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFy
c2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kKQorT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
cGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dy
YXBoaWNEaWdlc3RJbXBsKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25hbDxFbmNvZGVkUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0
KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxFbmNvZGVk
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGln
ZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJl
dHVybiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChiZWdpbiwgZW5kKTsKKyAg
ICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwocGFyc2luZ0J1ZmZl
cik7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5j
b2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGlnZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlcwogICAgIFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChj
b25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFy
KiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mKTsKK09wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlw
dG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFs
PEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dy
YXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRp
b25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlw
dG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOwor
T3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVk
Q3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9u
YWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5j
cHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUludGVncml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
Q2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAg
Ym9vbCBvcGVyYXRvcigpKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNp
bmdCdWZmZXIpCiAgICAgewogICAgICAgICAvLyBJbml0aWFsaXplIGhhc2hlcyB0byBiZSBzb21l
dGhpbmcgb3RoZXIgV1RGOjpudWxsb3B0LCB0byBpbmRpY2F0ZQogICAgICAgICAvLyB0aGF0IGF0
IGxlYXN0IG9uZSB0b2tlbiB3YXMgc2VlbiwgYW5kIHRodXMgc2V0dGluZyB0aGUgZW1wdHkgZmxh
ZwpAQCAtNTgsMTkgKzU5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2RpZ2VzdHMpCiAg
ICAgICAgICAgICBtX2RpZ2VzdHMgPSBWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4geyB9OwogCi0gICAgICAgIGF1dG8gZGlnZXN0ID0gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgYXV0byBkaWdlc3QgPSBwYXJz
ZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAo
IWRpZ2VzdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBUaGUgc3Bl
YyBhbGxvd3MgZm9yIG9wdGlvbnMgZm9sbG93aW5nIHRoZSBkaWdlc3QsIGJ1dCBzbyBmYXIsIG5v
CiAgICAgICAgIC8vIHNwZWNpZmljIG9wdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZC4gVGh1cywg
d2UganVzdCBwYXJzZSBhbmQgaWdub3JlCiAgICAgICAgIC8vIHRoZW0uIFRoZWlyIHN5bnRheCBp
cyBhICc/JyBmb2xsb3cgYnkgYW55IG51bWJlciBvZiBWQ0hBUnMuCi0gICAgICAgIGlmIChza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPycpKQotICAgICAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzVkNIQVI+KHBvc2l0aW9uLCBlbmQpOworICAgICAg
ICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJz8nKSkKKyAg
ICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwYXJzaW5nQnVmZmVy
KTsKIAogICAgICAgICAvLyBBZnRlciB0aGUgYmFzZTY0IHZhbHVlIGFuZCBvcHRpb25zLCB0aGUg
Y3VycmVudCBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3NpdGlvbgogICAgICAgICAvLyBzaG91
bGQgZWl0aGVyIGJlIHRoZSBlbmQgb3IgYSBzcGFjZS4KLSAgICAgICAgaWYgKHBvc2l0aW9uICE9
IGVuZCAmJiAhaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAgICAgICAgaWYgKCFwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkgJiYgIWlzSFRNTFNwYWNlKCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBtX2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdl
c3QpKTsKQEAgLTg0LDE3ICs4NSwxNCBAQCBwcml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBz
cGxpdE9uU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIEZ1bmN0b3ImJiBmdW5jdG9yKQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25T
cGFjZXMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyLCBG
dW5jdG9yJiYgZnVuY3RvcikKIHsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlvbiA9
IGJlZ2luOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocGFyc2lu
Z0J1ZmZlcik7CiAKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNIVE1MU3BhY2U+KHBv
c2l0aW9uLCBlbmQpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlm
ICghZnVuY3Rvcihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc05vdEhUTUxTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICB3aGls
ZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYg
KCFmdW5jdG9yKHBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzTm90SFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwYXJzaW5nQnVmZmVyKTsKICAgICB9CiB9CiAK
QEAgLTEwNSwxMSArMTAzLDEwIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291
cmNlQ3IKIAogICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0Pj4gcmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwg
PSAqaW50ZWdyaXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgp
KQotICAgICAgICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5n
SW1wbC5jaGFyYWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRh
dGFQYXJzZXI8TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNw
YWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigp
ICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsg
cmVzdWx0IH0pOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhpbnRlZ3JpdHlNZXRhZGF0
YSwgWyZyZXN1bHRdIChhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFj
dGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBl
OworICAgICAgICBzcGxpdE9uU3BhY2VzKHBhcnNpbmdCdWZmZXIsIEludGVncml0eU1ldGFkYXRh
UGFyc2VyPENoYXJhY3RlclR5cGU+IHsgcmVzdWx0IH0pOworICAgIH0pOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5LmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NiArNTgsNyBAQAogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL1Nl
dEZvclNjb3BlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0UG9zaXRpb24uaD4KIAogCkBAIC0yMTIsMjIgKzIxMywyMyBAQCB2b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6ZGlkUmVjZWl2ZUhlCiAgICAgLy8gUkZDMjYxNiwgc2VjdGlvbiA0LjIgc3Bl
Y2lmaWVzIHRoYXQgaGVhZGVycyBhcHBlYXJpbmcgbXVsdGlwbGUgdGltZXMgY2FuCiAgICAgLy8g
YmUgY29tYmluZWQgd2l0aCBhIGNvbW1hLiBXYWxrIHRoZSBoZWFkZXIgc3RyaW5nLCBhbmQgcGFy
c2UgZWFjaCBjb21tYQogICAgIC8vIHNlcGFyYXRlZCBjaHVuayBhcyBhIHNlcGFyYXRlIGhlYWRl
ci4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGhlYWRlcikudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBj
b25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gYmVn
aW4gKyBoZWFkZXIubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAg
ICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJywnKTsKLQotICAgICAgICAvLyBo
ZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQotICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAg
ICAgICAgIF4KLSAgICAgICAgbV9wb2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVn
aW4pLCB0eXBlLCBwb2xpY3lGcm9tKSk7Ci0KLSAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFu
ZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAg
ICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJywnKTsKLSAgICAgICAg
c2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcsJyk7Ci0gICAgICAgIGJlZ2luID0g
cG9zaXRpb247Ci0gICAgfQorICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsm
XShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBza2lwVW50aWwocGFyc2luZ0J1ZmZl
ciwgJywnKTsKKworICAgICAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKKyAg
ICAgICAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9w
b2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRl
KCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSwg
dHlwZSwgcG9saWN5RnJvbSkpOworCisgICAgICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSwgYW5k
IGJlZ2luIHRoZSBuZXh0IGhlYWRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAg
ICAgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciA9PSAn
LCcpOworICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJywnKTsKKyAgICAg
ICAgICAgIGJlZ2luID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgICAgICB9CisgICAg
fSk7CisgICAgCiAKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBh
cHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxNSArMzIsMTYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhcnNp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0
ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMp
IHx8IGMgPT0gJy0nOwogfQogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVy
KFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBp
c0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4g
aXNBU0NJSVNwYWNlKGMpIHx8IChjID49IDB4MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hpdGVzcGFj
ZSArIFZDSEFSCiB9CkBAIC0zMzMsMjI0ICszMzQsMjE4IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDoKICAgICBpZiAocG9saWN5LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwb2xpY3kpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3Rl
cnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwot
Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaXJl
Y3RpdmVCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9u
LCBlbmQsICc7Jyk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUsIHZhbHVlOwotICAgICAgICBpZiAo
cGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsK
LSAgICAgICAgICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKHBv
bGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMp
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
cG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVp
dk1ldGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkKLSAgICAgICAg
ICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKQotICAgICAgICAgICAgICAgICAgICB8
fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9wb2xp
Y3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0YShuYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHBvbGlj
eSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZGlyZWN0aXZl
QmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwVW50aWwo
cGFyc2luZ0J1ZmZlciwgJzsnKTsKKworICAgICAgICAgICAgaWYgKGF1dG8gZGlyZWN0aXZlID0g
cGFyc2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGRpcmVjdGl2ZUJlZ2luLCBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWRpcmVj
dGl2ZS0+bmFtZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGlmIChwb2xpY3lGcm9tID09
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVl
c3RzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZy
b206OkhUVFBFcXVpdk1ldGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6c2FuZGJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6cmVwb3J0VVJJKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJbkhUVFBFcXVpdk1ldGEoZGlyZWN0aXZlLT5u
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3lGcm9tID09IENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbTo6SW5oZXJpdGVkRm9yUGx1Z2luRG9jdW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2
ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVz
KQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGly
ZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0
VVJJKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKLSAgICAgICAgICAgICAgICAgICAg
JiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGFkZERpcmVjdGl2ZShXVEZNb3ZlKCpkaXJlY3RpdmUpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFkZERpcmVjdGl2ZShuYW1lLCB2YWx1ZSk7Ci0gICAgICAg
IH0KIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAnOycp
OwotICAgICAgICBza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJzsnKTsKLSAgICB9
CisgICAgICAgICAgICBBU1NFUlQocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVm
ZmVyID09ICc7Jyk7CisgICAgICAgICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycp
OworICAgICAgICB9CisgICAgfSk7CiB9CiAKIC8vIGRpcmVjdGl2ZSAgICAgICAgID0gKldTUCBb
IGRpcmVjdGl2ZS1uYW1lIFsgV1NQIGRpcmVjdGl2ZS12YWx1ZSBdIF0KIC8vIGRpcmVjdGl2ZS1u
YW1lICAgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiLSIgKQogLy8gZGlyZWN0aXZlLXZhbHVlICAg
PSAqKCBXU1AgLyA8VkNIQVIgZXhjZXB0ICI7Ij4gKQogLy8KLWJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBj
b25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBhdXRvIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4g
cGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPgogewotICAgIEFTU0VS
VChuYW1lLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzRW1wdHkoKSk7Ci0KLSAgICBj
b25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlz
QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKICAgICAvLyBFbXB0eSBkaXJlY3RpdmUgKGUu
Zy4gIjs7OyIpLiBFeGl0IGVhcmx5LgotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgVUNoYXIqIG5hbWVCZWdpbiA9IHBvc2l0
aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihwb3Np
dGlvbiwgZW5kKTsKKyAgICBhdXRvIG5hbWVCZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVy
PihwYXJzaW5nQnVmZmVyKTsKIAogICAgIC8vIFRoZSBkaXJlY3RpdmUtbmFtZSBtdXN0IGJlIG5v
bi1lbXB0eS4KLSAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0aW9uKSB7Ci0gICAgICAgIHNraXBX
aGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRp
b24gLSBuYW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuYW1lQmVn
aW4gPT0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKLSAgICBuYW1lID0gU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBu
YW1lQmVnaW4pOworICAgIGF1dG8gbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbik7CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAg
ICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1lKSwgeyB9IH07CiAKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7
Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5k
KTsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5h
bWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihwYXJzaW5n
QnVmZmVyKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNw
YWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWRE
aXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gbmFt
ZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGls
ZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgY29u
c3QgVUNoYXIqIHZhbHVlQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlz
RGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworICAgIGF1dG8gdmFsdWVC
ZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcj4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICBp
ZiAocG9zaXRpb24gIT0gZW5kKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJl
Y3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1lLCBTdHJpbmcodmFsdWVCZWdpbiwgZW5kIC0gdmFsdWVC
ZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0
RW5kKCkpIHsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hh
cmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBwYXJzaW5nQnVmZmVyLmVuZCgpIC0gdmFs
dWVCZWdpbikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIC8v
IFRoZSBkaXJlY3RpdmUtdmFsdWUgbWF5IGJlIGVtcHR5LgotICAgIGlmICh2YWx1ZUJlZ2luID09
IHBvc2l0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmFsdWVCZWdpbiA9PSBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBQYXJzZWREaXJlY3RpdmUg
eyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlQmVnaW4s
IHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byB2YWx1
ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSB2YWx1ZUJl
Z2luKTsKKyAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZSh2YWx1ZSkgfTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjpwYXJzZVJlcG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJ
KFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAoIW1fcmVwb3J0VVJJcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5h
bWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZl
Lm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0g
U3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRp
b24gKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGlyZWN0
aXZlLnZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHVzaW5nIENoYXJh
Y3RlclR5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlw
ZTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CiAKLSAgICAgICAgY29uc3QgVUNo
YXIqIHVybEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RB
U0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gdXJsQmVnaW4gPSBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBpZiAodXJs
QmVnaW4gPCBwb3NpdGlvbikKLSAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUu
c3Vic3RyaW5nKHVybEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOwot
ICAgIH0KKyAgICAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24o
KSkKKyAgICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52YWx1ZS5z
dWJzdHJpbmcodXJsQmVnaW4gLSBiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gdXJs
QmVnaW4pKTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAKIHRlbXBsYXRlPGNsYXNzIENTUERp
cmVjdGl2ZVR5cGU+Ci12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNl
dENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIHN0
ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZGlyZWN0aXZlKQordm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUoUGFyc2VkRGlyZWN0
aXZlJiYgZGlyZWN0aXZlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGV4aXN0
aW5nRGlyZWN0aXZlKQogewotICAgIGlmIChkaXJlY3RpdmUpIHsKLSAgICAgICAgbV9wb2xpY3ku
cmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgIGlmIChleGlzdGluZ0RpcmVjdGl2
ZSkgeworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZl
Lm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRpcmVjdGl2ZSA9IG1ha2VVbmlx
dWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIG5hbWUsIHZhbHVlKTsKKyAgICBleGlzdGluZ0Rp
cmVjdGl2ZSA9IG1ha2VVbmlxdWU8Q1NQRGlyZWN0aXZlVHlwZT4oKnRoaXMsIFdURk1vdmUoZGly
ZWN0aXZlLm5hbWUpLCBXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1ZSkpOwogfQogCi12b2lkIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKK3ZvaWQgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KFBhcnNlZERpcmVj
dGl2ZSYmIGRpcmVjdGl2ZSkKIHsKICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKG5hbWUpOworICAg
ICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShkaXJl
Y3RpdmUubmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1faGF2ZVNhbmRi
b3hQb2xpY3kpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5h
bWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoZGlyZWN0aXZl
Lm5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGF2ZVNhbmRib3hQb2xpY3kg
PSB0cnVlOwogICAgIFN0cmluZyBpbnZhbGlkVG9rZW5zOwotICAgIG1fcG9saWN5LmVuZm9yY2VT
YW5kYm94RmxhZ3MoU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBv
bGljeSwgaW52YWxpZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3Mo
U2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3RpdmUudmFs
dWUpLCBpbnZhbGlkVG9rZW5zKSk7CiAgICAgaWYgKCFpbnZhbGlkVG9rZW5zLmlzTnVsbCgpKQog
ICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGludmFsaWRUb2tlbnMp
OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldFVwZ3Jh
ZGVJbnNlY3VyZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMoUGFyc2Vk
RGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAg
ICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7
CisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2Rl
KFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAobV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykgewotICAgICAgICBtX3BvbGljeS5yZXBvcnRE
dXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0
ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV91cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyA9IHRydWU7CiAgICAgbV9wb2xpY3ku
c2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHModHJ1ZSk7CiB9CiAKLXZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6c2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVj
dGl2ZSkKIHsKICAgICBpZiAobV9oYXNCbG9ja0FsbE1peGVkQ29udGVudERpcmVjdGl2ZSkgewot
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShXVEZNb3ZlKGRpcmVjdGl2ZS5uYW1l
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXNCbG9ja0FsbE1peGVkQ29udGVu
dERpcmVjdGl2ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0
aXZlKFBhcnNlZERpcmVjdGl2ZSYmIGRpcmVjdGl2ZSkKIHsKLSAgICBBU1NFUlQoIW5hbWUuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoIWRpcmVjdGl2ZS5uYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2RlZmF1
bHRTcmMpOworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZGVmYXVsdFNyYykpIHsKKyAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9kZWZhdWx0U3JjKTsKICAgICAgICAgbV9wb2xpY3ku
YWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29y
aXRobXNVc2VkKCkpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGlu
ZVN0eWxlc2hlZXRzKG1fZGVmYXVsdFNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1f
c2NyaXB0U3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0
aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMp
KSB7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fc2NyaXB0U3JjKTsKICAgICAgICAg
bV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKG1fc2NyaXB0U3JjLT5o
YXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykp
IHsKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3JjKTsKKyAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYykpIHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9zdHlsZVNyYyk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5s
aW5lU3R5bGVzaGVldHMobV9zdHlsZVNyYy0+aGFzaEFsZ29yaXRobXNVc2VkKCkpOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX29i
amVjdFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVTcmMpKSB7CisgICAgfSBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6b2JqZWN0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGly
ZWN0aXZlKSwgbV9vYmplY3RTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpm
cmFtZVNyYykpIHsKICAgICAgICAgLy8gRklYTUU6IExvZyB0byBjb25zb2xlICJUaGUgZnJhbWUt
c3JjIGRpcmVjdGl2ZSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIGNoaWxkLXNyYyBkaXJlY3RpdmUg
aW5zdGVhZC4iCiAgICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTc3Mz4uCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mcmFtZVNyYyk7Ci0g
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1f
aW1nU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb250U3JjKSkKLSAgICAgICAgc2V0Q1NQ
RGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUs
IHZhbHVlLCBtX2ZvbnRTcmMpOworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1l
U3JjKTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjppbWdTcmMpKQorICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ltZ1NyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OmZvbnRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZvbnRT
cmMpOwogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjptYW5pZmVzdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tYW5pZmVzdFNyYyk7
CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1hbmlmZXN0U3JjKSkKKyAgICAgICAg
c2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+
KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9tYW5pZmVzdFNyYyk7CiAjZW5kaWYKLSAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjptZWRpYVNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tZWRpYVNyYyk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y29ubmVjdFNyYykpCi0gICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1
ZSwgbV9jb25uZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCi0gICAg
ICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlPihuYW1lLCB2YWx1ZSwgbV9jaGlsZFNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9y
bUFjdGlvbikpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9mb3JtQWN0aW9uKTsKLSAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjpiYXNlVVJJKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Jhc2VVUkkp
OwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzKSkgeworICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2
ZSksIG1fbWVkaWFTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGly
ZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0
U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9jb25uZWN0U3JjKTsKKyAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Y2hpbGRTcmMpKQorICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX2NoaWxkU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
Zm9ybUFjdGlvbikpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9ybUFjdGlvbik7
CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQorICAgICAgICBzZXRD
U1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RG
TW92ZShkaXJlY3RpdmUpLCBtX2Jhc2VVUkkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKICAgICAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAg
ICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUo
bmFtZSk7CisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBv
cnRPbmx5TW9kZShkaXJlY3RpdmUubmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lQW5jZXN0b3JzKTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fcGx1Z2lu
VHlwZXMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gpKQotICAgICAgICBhcHBseVNh
bmRib3hQb2xpY3kobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVS
SSkpCi0gICAgICAgIHBhcnNlUmVwb3J0VVJJKG5hbWUsIHZhbHVlKTsKLSAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCi0gICAgICAgIHNldFVwZ3JhZGVJbnNl
Y3VyZVJlcXVlc3RzKG5hbWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRD
b250ZW50KSkKLSAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVkKG5hbWUpOwor
ICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2ZyYW1lQW5jZXN0b3JzKTsKKyAgICB9IGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykpCisgICAgICAgIHNldENTUERp
cmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+KFdURk1vdmUo
ZGlyZWN0aXZlKSwgbV9wbHVnaW5UeXBlcyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnNhbmRib3gpKQorICAgICAgICBhcHBseVNhbmRib3hQb2xpY3koV1RGTW92ZShkaXJlY3Rp
dmUpKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKKyAgICAg
ICAgcGFyc2VSZXBvcnRVUkkoV1RGTW92ZShkaXJlY3RpdmUpKTsKKyAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQorICAgICAgICBzZXRVcGdy
YWRlSW5zZWN1cmVSZXF1ZXN0cyhXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpibG9ja0FsbE1peGVkQ29udGVudCkpCisgICAgICAgIHNldEJsb2Nr
QWxsTWl4ZWRDb250ZW50RW5hYmxlZChXVEZNb3ZlKGRpcmVjdGl2ZSkpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5h
bWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3QuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwx
NiArODksMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmlu
ZyYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAgICBib29sIHBhcnNl
RGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVBsdWdpblR5cGVz
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBhZGRE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2
b2lkIGFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
c2FuZGJveFBvbGljeSk7Ci0gICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhjb25z
dCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgc2V0QmxvY2tBbGxNaXhlZENvbnRlbnRFbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgc3RydWN0IFBhcnNlZERpcmVjdGl2ZSB7CisgICAg
ICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgfTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQYXJzZWREaXJlY3RpdmU+IHBh
cnNlRGlyZWN0aXZlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHZv
aWQgcGFyc2VSZXBvcnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYWRkRGlyZWN0
aXZlKFBhcnNlZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIGFwcGx5U2FuZGJveFBvbGljeShQYXJz
ZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJz
ZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQo
UGFyc2VkRGlyZWN0aXZlJiYpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENTUERpcmVjdGl2ZVR5
cGU+Ci0gICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKKyAgICB2
b2lkIHNldENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUmJiwgc3RkOjp1bmlxdWVfcHRyPENT
UERpcmVjdGl2ZVR5cGU+Jik7CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlKiBvcGVyYXRpdmVEaXJlY3RpdmUoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERp
cmVjdGl2ZS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3QuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc01lZGlhVHlw
ZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
YXRpYyBib29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICBy
ZXR1cm4gIWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKIH0KQEAgLTUyLDYyICs1NCw2MSBA
QCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjCiAKIHZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IGNoYXJhY3RlcnM7Ci0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9
IGJlZ2luICsgdmFsdWUubGVuZ3RoKCk7Ci0KICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBP
UiAncGx1Z2luLXR5cGVzOycKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRp
cmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXModmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0g
ICAgICAgIC8vIF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKLSAgICAgICAgLy8gXiAgICAgICAg
XgotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gXgotICAgICAgICBi
ZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlh
VHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxV
Q2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVj
dGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2lu
LCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwg
ZW5kKTsKKyAgICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNp
bmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0
eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOwogCi0gICAgICAgIC8vIG1pbWUxL21p
bWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJl
Y3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdp
biwgcG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7
CisgICAgICAgICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCisgICAgICAgICAgICAv
LyBeICAgICAgICBeCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJ
SVNwYWNlPihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0
RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBtaW1lMS9t
aW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8gXgorICAgICAgICAgICAgYXV0byBiZWdp
biA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7
CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFj
ZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVD
aGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBt
aW1lMi9taW1lMgorICAgICAgICAgICAgLy8gICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpIHsKKyAgICAgICAgICAg
ICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihwYXJzaW5nQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52
YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0g
YmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAg
IF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBl
cyhTdHJpbmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwor
CisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBPUiBtaW1lMS9taW1lMSAg
T1IgbWltZTEvbWltZTEvZXJyb3IKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgXiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc05vdEFTQ0lJU3BhY2UoKnBh
cnNpbmdCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90QVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0
aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4s
IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJp
bmcoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAKLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJ
bnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5k
KCkgfHwgaXNBU0NJSVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7CiAgICAgICAgIH0KLSAgICAgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0K
LSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIgT1IgbWltZTEvbWltZTEgIE9SIG1p
bWUxL21pbWUxL2Vycm9yCi0gICAgICAgIC8vICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAg
ICAgICAgICAgXiAgICAgICAgICAgICAgIF4KLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYm
IGlzTm90QVNDSUlTcGFjZSgqcG9zaXRpb24pKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwg
cG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7
Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJU3BhY2UoKnBvc2l0
aW9uKSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTU2LDQ4ICs1Nyw0MSBAQCBzdGF0aWMgYm9vbCBpc0NTUERpcmVjdGl2ZU5hbWUo
Y29uc3QgU3RyCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKTsKIH0KIAotc3RhdGljIGJv
b2wgaXNTb3VyY2VDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsK
ICAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKIH0KIAotc3RhdGljIGJvb2wgaXNIb3N0Q2hh
cmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Ym9vbCBpc0hvc3RDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FT
Q0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQogCi1zdGF0aWMgYm9vbCBpc1BhdGhD
b21wb25lbnRDaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBib29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGMgIT0gJz8nICYmIGMgIT0gJyMnOwogfQogCi1zdGF0aWMgYm9vbCBp
c1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXIo
Q2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8
IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4nOwogfQogCi1zdGF0aWMgYm9vbCBpc05v
dENvbG9uT3JTbGFzaChVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJl
dHVybiBjICE9ICc6JyAmJiBjICE9ICcvJzsKIH0KIAotc3RhdGljIGJvb2wgaXNTb3VyY2VMaXN0
Tm9uZShjb25zdCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGJvb2wgaXNTb3VyY2VMaXN0Tm9uZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJl
Z2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIHZh
bHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihiZWdpbiwg
ZW5kKTsKLQotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGls
ZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmICghZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4sICInbm9u
ZSciKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpCisg
ICAgaWYgKCFza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBhcnNpbmdCdWZmZXIsICInbm9u
ZSciKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOworCisg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4ocGFyc2luZ0J1ZmZlcik7
CisKKyAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVuZCgpOwogfQogCiBDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0KGNvbnN0
IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5h
bWUpCkBAIC0xMDgsMTIgKzEwMiwxNCBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpDb250ZW50CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZSh2YWx1ZSkp
IHsKLSAgICAgICAgbV9pc05vbmUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7
CisgICAgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVm
ZmVyKSB7CisgICAgICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHBhcnNpbmdCdWZmZXIpKSB7Cisg
ICAgICAgICAgICBtX2lzTm9uZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBwYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKIH0KIAogYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojppc1Byb3RvY29sQWxsb3dlZEJ5U3Rhcihj
b25zdCBVUkwmIHVybCkgY29uc3QKQEAgLTE2MCw0MiArMTU2LDM3IEBAIGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWEKIC8vIHNvdXJjZS1saXN0ICAgICAgID0gKldTUCBb
IHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAqV1NQIF0KIC8vICAgICAgICAgICAgICAgICAgIC8g
KldTUCAiJ25vbmUnIiAqV1NQCiAvLwotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1
ZmZlcikKIHsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLQotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KHBhcnNpbmdCdWZmZXIpOworICAg
ICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOwotICAgICAgICBza2lw
V2hpbGU8VUNoYXIsIGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAg
YXV0byBiZWdpblNvdXJjZSA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsK
IAotICAgICAgICBTdHJpbmcgc2NoZW1lLCBob3N0LCBwYXRoOwotICAgICAgICBPcHRpb25hbDx1
aW50MTZfdD4gcG9ydDsKLSAgICAgICAgYm9vbCBob3N0SGFzV2lsZGNhcmQgPSBmYWxzZTsKLSAg
ICAgICAgYm9vbCBwb3J0SGFzV2lsZGNhcmQgPSBmYWxzZTsKKyAgICAgICAgYXV0byBzb3VyY2VQ
YXJzaW5nQnVmZmVyID0gU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luU291cmNlLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCkgfTsKIAotICAgICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShiZWdp
blNvdXJjZSwgcG9zaXRpb24pKQorICAgICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShzb3VyY2VQ
YXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChwYXJz
ZUhhc2hTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uKSkKKyAgICAgICAgaWYgKHBhcnNlSGFz
aFNvdXJjZShzb3VyY2VQYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9z
dCwgcG9ydCwgcGF0aCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAg
ICAgIGlmIChhdXRvIHNvdXJjZSA9IHBhcnNlU291cmNlKHNvdXJjZVBhcnNpbmdCdWZmZXIpKSB7
CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0cyBhbmQga2V5d29yZCBzb3VyY2VzICgnc2Vs
ZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAgICAgIC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQg
aW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBvbiB0aGUgc291cmNlCiAgICAgICAgICAgICAv
LyBsaXN0IGl0c2VsZi4KLSAgICAgICAgICAgIGlmIChzY2hlbWUuaXNFbXB0eSgpICYmIGhvc3Qu
aXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKHNvdXJjZS0+c2NoZW1lLmlzRW1wdHkoKSAmJiBz
b3VyY2UtPmhvc3QudmFsdWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFtZShob3N0KSkKLSAgICAgICAgICAgICAg
ICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVO
YW1lLCBob3N0KTsKLSAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxk
Y2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAgICAgICBpZiAoaXNDU1BEaXJlY3RpdmVO
YW1lKHNvdXJjZS0+aG9zdC52YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0
RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgc291cmNlLT5ob3N0
LnZhbHVlKTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlKG1fcG9saWN5LCBzb3VyY2UtPnNjaGVtZSwgc291cmNlLT5ob3N0LnZhbHVlLCBzb3Vy
Y2UtPnBvcnQudmFsdWUsIHNvdXJjZS0+cGF0aCwgc291cmNlLT5ob3N0Lmhhc1dpbGRjYXJkLCBz
b3VyY2UtPnBvcnQuaGFzV2lsZGNhcmQpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUsIFN0
cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOworICAgICAgICAgICAg
bV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBT
dHJpbmcoYmVnaW5Tb3VyY2UsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGJlZ2luU291cmNl
KSk7CiAKLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJU3BhY2UoKnBv
c2l0aW9uKSk7CisgICAgICAgIEFTU0VSVChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgaXNBU0NJ
SVNwYWNlKCpwYXJzaW5nQnVmZmVyKSk7CiAgICAgfQogICAgIAogICAgIG1fbGlzdC5zaHJpbmtU
b0ZpdCgpOwpAQCAtMjA1LDI3MCArMTk2LDI5NCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAvICggWyBzY2hlbWUgIjovLyIg
XSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIidzZWxm
JyIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291cmNl
KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0
cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wm
IGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6U291cmNlPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAg
aWYgKGJlZ2luID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ25vbmUn
IikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2tpcEV4YWN0bHlJZ25vcmluZ0FT
Q0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmUnIikpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBTb3VyY2Ugc291cmNlOwogCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEg
JiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmlu
ZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7CiAgICAgICAgIG1fYWxsb3dTdGFy
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2U7CiAg
ICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQg
LSBiZWdpbiwgIidzZWxmJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNh
c2UocGFyc2luZ0J1ZmZlciwgIidzZWxmJyIpKSB7CiAgICAgICAgIG1fYWxsb3dTZWxmID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgfQog
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdp
biwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJ
SUNhc2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtaW5saW5lJyIpKSB7CiAgICAgICAgIG1fYWxs
b3dJbmxpbmUgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZTsKICAgICB9CiAKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVn
aW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2FmZS1ldmFsJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5
SWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlciwgIid1bnNhZmUtZXZhbCciKSkgewogICAg
ICAgICBtX2FsbG93RXZhbCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciog
YmVnaW5QYXRoID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBudWxscHRyOwor
ICAgIGF1dG8gYmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CisgICAgYXV0byBiZWdp
bkhvc3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9IHBhcnNpbmdCdWZmZXIuZW5kKCk7
CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKIAotICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNOb3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOworICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2luZ0J1ZmZlcik7
CiAKLSAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRF
bmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8vICAgICBeCi0gICAgICAgIHJldHVy
biBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKTsK
KyAgICAgICAgYXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdp
bkhvc3QsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KTsKKyAgICAgICAgaWYgKCFob3N0KQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBzb3VyY2UuaG9zdCA9
IFdURk1vdmUoKmhvc3QpOworICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlm
IChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJy8nKSB7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcvJykg
ewogICAgICAgICAvLyBob3N0L3BhdGggfHwgaG9zdC8gfHwgLwogICAgICAgICAvLyAgICAgXiAg
ICAgICAgICAgIF4gICAgXgotICAgICAgICByZXR1cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9z
aXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFyc2VQYXRoKHBvc2l0aW9uLCBlbmQs
IHBhdGgpOworICAgICAgICBhdXRvIGhvc3QgPSBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZl
ciB7IGJlZ2luSG9zdCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pOworICAgICAgICBpZiAo
IWhvc3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8g
cGF0aCA9IHBhcnNlUGF0aChwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXRoKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBzb3VyY2UuaG9zdCA9IFdU
Rk1vdmUoKmhvc3QpOworICAgICAgICBzb3VyY2UucGF0aCA9IFdURk1vdmUoKnBhdGgpOworICAg
ICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAq
cG9zaXRpb24gPT0gJzonKSB7Ci0gICAgICAgIGlmIChlbmQgLSBwb3NpdGlvbiA9PSAxKSB7Cisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5n
QnVmZmVyID09ICc6JykgeworICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5p
bmcoKSA9PSAxKSB7CiAgICAgICAgICAgICAvLyBzY2hlbWU6CiAgICAgICAgICAgICAvLyAgICAg
ICBeCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hl
bWUpOworICAgICAgICAgICAgYXV0byBzY2hlbWUgPSBwYXJzZVNjaGVtZShTdHJpbmdQYXJzaW5n
QnVmZmVyIHsgYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSB9KTsKKyAgICAgICAgICAg
IGlmICghc2NoZW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICAgICAgICAgIHNvdXJjZS5zY2hlbWUgPSBXVEZNb3ZlKCpzY2hlbWUpOworICAgICAgICAgICAg
cmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwb3NpdGlvblsxXSA9PSAn
LycpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMV0gPT0gJy8nKSB7CiAgICAgICAgICAg
ICAvLyBzY2hlbWU6Ly9ob3N0IHx8IHNjaGVtZTovLwogICAgICAgICAgICAgLy8gICAgICAgXiAg
ICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAoIXBhcnNlU2NoZW1lKGJlZ2luLCBwb3Np
dGlvbiwgc2NoZW1lKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hhcj4ocG9z
aXRpb24sIGVuZCwgJzonKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hhcj4o
cG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxVQ2hh
cj4ocG9zaXRpb24sIGVuZCwgJy8nKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
ICAgICBhdXRvIHNjaGVtZSA9IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdp
biwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIH0pOworICAgICAgICAgICAgaWYgKCFzY2hlbWUK
KyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocGFyc2luZ0J1
ZmZlciwgJzonKQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
PihwYXJzaW5nQnVmZmVyLCAnLycpCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PENo
YXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIsICcvJykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAgICAgc291cmNl
LnNjaGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7CisKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJU
eXBlLCBpc05vdENvbG9uT3JTbGFzaD4ocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6JykgeworICAgICAgICBp
ZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZm
ZXIgPT0gJzonKSB7CiAgICAgICAgICAgICAvLyBob3N0OnBvcnQgfHwgc2NoZW1lOi8vaG9zdDpw
b3J0CiAgICAgICAgICAgICAvLyAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAg
ICAgIGJlZ2luUG9ydCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgc2tpcFVudGlsPFVDaGFyPihw
b3NpdGlvbiwgZW5kLCAnLycpOworICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcGFyc2luZ0J1ZmZl
ci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGU+KHBhcnNp
bmdCdWZmZXIsICcvJyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBl
bmQgJiYgKnBvc2l0aW9uID09ICcvJykgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLycpIHsKICAgICAgICAgLy8g
c2NoZW1lOi8vaG9zdC9wYXRoIHx8IHNjaGVtZTovL2hvc3Q6cG9ydC9wYXRoCiAgICAgICAgIC8v
ICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgICAgIGlmIChw
b3NpdGlvbiA9PSBiZWdpbkhvc3QpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5Ib3N0KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBiZWdpblBhdGggPSBwb3NpdGlvbjsKKyAg
ICAgICAgYmVnaW5QYXRoID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogICAgIH0KIAotICAg
IGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVnaW5Q
YXRoLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIGJl
Z2luUG9ydCA/IGJlZ2luUG9ydCA6IGJlZ2luUGF0aCB9KTsKKyAgICBpZiAoIWhvc3QpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYmVnaW5Qb3J0KSB7CisgICAgICAg
IGF1dG8gcG9ydCA9IHBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyIHsgYmVnaW5Qb3J0LCBi
ZWdpblBhdGggfSk7CisgICAgICAgIGlmICghcG9ydCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBpZiAoIWJlZ2luUG9ydCkKLSAgICAgICAgcG9ydCA9IFdURjo6bnVs
bG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFwYXJzZVBvcnQoYmVnaW5Qb3J0LCBiZWdp
blBhdGgsIHBvcnQsIHBvcnRIYXNXaWxkY2FyZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHNvdXJjZS5wb3J0ID0gV1RGTW92ZSgqcG9ydCk7CiAgICAgfQogCi0gICAgaWYg
KGJlZ2luUGF0aCAhPSBlbmQpIHsKLSAgICAgICAgaWYgKCFwYXJzZVBhdGgoYmVnaW5QYXRoLCBl
bmQsIHBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChiZWdpblBhdGgg
IT0gcGFyc2luZ0J1ZmZlci5lbmQoKSkgeworICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBhdGgo
U3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luUGF0aCwgcGFyc2luZ0J1ZmZlci5lbmQoKSB9KTsK
KyAgICAgICAgaWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgICAgICBzb3VyY2UucGF0aCA9IFdURk1vdmUoKnBhdGgpOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7CisgICAgcmV0dXJuIHNv
dXJjZTsKIH0KIAogLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rpb24g
ZnJvbSBSRkMgMzk4NgogLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBIQSAvIERJR0lUIC8g
IisiIC8gIi0iIC8gIi4iICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBzY2hlbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxT
dHJpbmc+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBBU1NF
UlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoc2NoZW1lLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKIAot
ICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
Y29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKTsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzQVNDSUlB
bHBoYT4ocG9zaXRpb24sIGVuZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzQVNDSUlBbHBoYT4ocGFyc2luZ0J1ZmZlcikpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2No
ZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBhcnNpbmdCdWZm
ZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbik7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIFN0cmluZyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpIC0gYmVnaW4pOwogfQogCiAvLyBob3N0ICAgICAgICAgICAgICA9IFsgIiouIiBdIDEqaG9z
dC1jaGFyICooICIuIiAxKmhvc3QtY2hhciApCiAvLyAgICAgICAgICAgICAgICAgICAvICIqIgog
Ly8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCiAvLwotYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6Okhvc3Q+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZm
ZXIpCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgQVNTRVJUKGhvc3QuaXNFbXB0
eSgpKTsKLSAgICBBU1NFUlQoIWhvc3RIYXNXaWxkY2FyZCk7CisgICAgQVNTRVJUKHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKIAotICAgIGlmIChiZWdp
biA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgVUNoYXIq
IHBvc2l0aW9uID0gYmVnaW47CisgICAgSG9zdCBob3N0OwogCi0gICAgaWYgKHNraXBFeGFjdGx5
PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnKicpKSB7Ci0gICAgICAgIGhvc3RIYXNXaWxkY2FyZCA9
IHRydWU7CisgICAgaWYgKHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBhcnNpbmdCdWZmZXIs
ICcqJykpIHsKKyAgICAgICAgaG9zdC5oYXNXaWxkY2FyZCA9IHRydWU7CiAKLSAgICAgICAgaWYg
KHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhvc3Q7CiAKLSAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy4nKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
PihwYXJzaW5nQnVmZmVyLCAnLicpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogaG9zdEJlZ2luID0gcG9zaXRpb247CisgICAgYXV0
byBob3N0QmVnaW4gPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICB3aGlsZSAocG9z
aXRpb24gPCBlbmQpIHsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNIb3N0Q2hh
cmFjdGVyPihwb3NpdGlvbiwgZW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAg
aWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBhcnNpbmdC
dWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lw
V2hpbGU8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFyYWN0ZXI+KHBhcnNpbmdCdWZmZXIpOwog
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0
aW9uLCBlbmQsICcuJykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocGFyc2luZ0J1ZmZlciwgJy4nKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCk7Ci0gICAgaG9z
dCA9IFN0cmluZyhob3N0QmVnaW4sIGVuZCAtIGhvc3RCZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgQVNTRVJUKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSk7CisgICAgaG9zdC52YWx1ZSA9IFN0
cmluZyhob3N0QmVnaW4sIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGhvc3RCZWdpbik7Cisg
ICAgcmV0dXJuIGhvc3Q7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5n
JiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8U3RyaW5n
PiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBhdGgoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOwotICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHBhcnNp
bmdCdWZmZXIucG9zaXRpb24oKSA8PSBwYXJzaW5nQnVmZmVyLmVuZCgpKTsKICAgICAKLSAgICBj
b25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzUGF0
aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNQ
YXRoQ29tcG9uZW50Q2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKICAgICAvLyBwYXRoL3RvL2Zp
bGUuanM/cXVlcnk9c3RyaW5nIHx8IHBhdGgvdG8vZmlsZS5qcyNhbmNob3IKICAgICAvLyAgICAg
ICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICBpZiAocG9z
aXRpb24gPCBlbmQpCi0gICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVy
KG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbiksICpwb3NpdGlvbik7
Ci0gICAgCi0gICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmcoYmVnaW4s
IHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAKLSAgICBBU1NFUlQocG9zaXRpb24gPD0gZW5kKTsK
LSAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8ICgqcG9zaXRpb24gPT0gJyMnIHx8ICpwb3Np
dGlvbiA9PSAnPycpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5o
YXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQ
YXRoQ2hhcmFjdGVyKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBwYXJzaW5nQnVmZmVy
LmVuZCgpIC0gYmVnaW4pLCAqcGFyc2luZ0J1ZmZlcik7CisKKyAgICBBU1NFUlQocGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOworICAgIEFTU0VSVChwYXJz
aW5nQnVmZmVyLmF0RW5kKCkgfHwgKCpwYXJzaW5nQnVmZmVyID09ICcjJyB8fCAqcGFyc2luZ0J1
ZmZlciA9PSAnPycpKTsKKworICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3Ry
aW5nVmlldyhiZWdpbiwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4pKTsKIH0KIAog
Ly8gcG9ydCAgICAgICAgICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioiICkKIC8vCi1ib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVn
aW4sIGNvbnN0IFVDaGFyKiBlbmQsIE9wdGlvbmFsPHVpbnQxNl90PiYgcG9ydCwgYm9vbCYgcG9y
dEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6UG9ydD4gQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NF
UlQoIXBvcnQpOwotICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKKyAgICBBU1NFUlQocGFy
c2luZ0J1ZmZlci5wb3NpdGlvbigpIDw9IHBhcnNpbmdCdWZmZXIuZW5kKCkpOwogICAgIAotICAg
IGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KGJlZ2luLCBlbmQsICc6JykpCisgICAgaWYgKCFza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnOicpKQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAqYmVn
aW4gPT0gJyonKSB7Ci0gICAgICAgIHBvcnQgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHBvcnRI
YXNXaWxkY2FyZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwYXJzaW5n
QnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJyonKSB7
CisgICAgICAgIFBvcnQgcG9ydDsKKyAgICAgICAgcG9ydC5oYXNXaWxkY2FyZCA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBwb3J0OwogICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4ocG9zaXRpb24s
IGVuZCk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihwYXJzaW5nQnVmZmVyKTsKICAg
ICAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgCiAgICAgYm9vbCBvazsKLSAgICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0ludFN0
cmljdChiZWdpbiwgZW5kIC0gYmVnaW4sICZvayk7Ci0gICAgaWYgKHBvcnRJbnQgPCAwIHx8IHBv
cnRJbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBwb3J0ID0gcG9ydEludDsKLSAgICByZXR1cm4gb2s7CisgICAgaW50
IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKSAtIGJlZ2luLCAmb2spOworICAgIGlmICghb2sgfHwgcG9ydEludCA8IDAgfHwgcG9y
dEludCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFBvcnQgcG9ydDsKKyAgICBwb3J0LnZhbHVlID0gcG9y
dEludDsKKyAgICByZXR1cm4gcG9ydDsKIH0KIAogLy8gTWF0Y2ggQmxpbmsncyBiZWhhdmlvciBv
ZiBhbGxvd2luZyBhbiBlcXVhbCBzaWduIHRvIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgdmFsdWUg
b2YgdGhlIG5vbmNlCiAvLyBldmVuIHRob3VnaCB0aGlzIGRvZXMgbm90IG1hdGNoIHRoZSBiZWhh
dmlvciBvZiBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZlbCAzIHNwZWMuLAogLy8gPGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtY3NwLz4gKDI5IEZlYnJ1YXJ5IDIwMTYpLgotc3Rh
dGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNOb25jZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMp
CiB7CiAgICAgcmV0dXJuIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXIoYykgfHwgYyA9PSAn
PSc7CiB9CiAKIC8vIG5vbmNlLXNvdXJjZSAgICA9ICInbm9uY2UtIiBub25jZS12YWx1ZSAiJyIK
IC8vIG5vbmNlLXZhbHVlICAgICA9IGJhc2U2NC12YWx1ZQotYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VOb25jZVNvdXJjZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgY29uc3QgdW5z
aWduZWQgbm9uY2VQcmVmaXhMZW5ndGggPSA3OwotICAgIGlmICghU3RyaW5nVmlldyhiZWdpbiwg
ZW5kIC0gYmVnaW4pLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiJ25vbmNlLSIpKQorICAg
IGlmICghc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzaW5nQnVmZmVyLCAiJ25vbmNl
LSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0g
YmVnaW4gKyBub25jZVByZWZpeExlbmd0aDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ob25jZVZh
bHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vbmNlQ2hhcmFjdGVyPihw
b3NpdGlvbiwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gPj0gZW5kIHx8IHBvc2l0aW9uID09IGJl
Z2luTm9uY2VWYWx1ZSB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKworICAgIGF1dG8gYmVnaW5Ob25j
ZVZhbHVlID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0
ZXJUeXBlLCBpc05vbmNlQ2hhcmFjdGVyPihwYXJzaW5nQnVmZmVyKTsKKyAgICBpZiAocGFyc2lu
Z0J1ZmZlci5hdEVuZCgpIHx8IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBiZWdpbk5vbmNl
VmFsdWUgfHwgKnBhcnNpbmdCdWZmZXIgIT0gJ1wnJykKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVnaW5Ob25jZVZhbHVlLCBwb3NpdGlvbiAtIGJlZ2lu
Tm9uY2VWYWx1ZSkpOworICAgIG1fbm9uY2VzLmFkZChTdHJpbmcoYmVnaW5Ob25jZVZhbHVlLCBw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIgaGFzaC1hbGdvcml0aG0gIi0iIGJh
c2U2NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0gInNoYTI1NiIgLyAic2hhMzg0IiAv
ICJzaGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAi
LyIgLyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciog
ZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIGlmIChiZWdpbiA9PSBlbmQpCisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgaWYgKCFza2lwRXhhY3RseTxV
Q2hhcj4ocG9zaXRpb24sIGVuZCwgJ1wnJykpCisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0
ZXJUeXBlPihwYXJzaW5nQnVmZmVyLCAnXCcnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QocG9zaXRpb24sIGVuZCk7
CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3QocGFyc2luZ0J1ZmZl
cik7CiAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChw
b3NpdGlvbiA+PSBlbmQgfHwgKnBvc2l0aW9uICE9ICdcJycpCisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnXCcnKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkgPiBDb250ZW50U2VjdXJpdHlQb2xp
Y3lIYXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAkocmV2
aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUsMzMgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gbV9pc05vbmU7IH0KIAogcHJp
dmF0ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCk7CiAKLSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+
JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhh
c1dpbGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0
SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29u
c3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2ls
ZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBwYXRoKTsKLQotICAgIGJvb2wgcGFyc2VOb25jZVNvdXJjZShjb25z
dCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHN0cnVjdCBIb3N0IHsKKyAg
ICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBib29sIGhhc1dpbGRjYXJkOworICAgIH07Cisg
ICAgc3RydWN0IFBvcnQgeworICAgICAgICBPcHRpb25hbDx1aW50MTZfdD4gdmFsdWU7CisgICAg
ICAgIGJvb2wgaGFzV2lsZGNhcmQ7CisgICAgfTsKKyAgICBzdHJ1Y3QgU291cmNlIHsKKyAgICAg
ICAgU3RyaW5nIHNjaGVtZTsKKyAgICAgICAgSG9zdCBob3N0OworICAgICAgICBQb3J0IHBvcnQ7
CisgICAgICAgIFN0cmluZyBwYXRoOworICAgIH07CiAKICAgICBib29sIGlzUHJvdG9jb2xBbGxv
d2VkQnlTdGFyKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgYm9vbCBwYXJzZUhhc2hTb3VyY2Uo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9u
YWw8U291cmNlPiBwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxTdHJpbmc+
IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEhvc3Q+IHBhcnNlSG9zdChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQb3J0PiBwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gT3B0aW9uYWw8U3RyaW5nPiBwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0
ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJz
ZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIYXNoU291cmNlKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCiAgICAgY29uc3QgQ29udGVudFNlY3Vy
aXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0b3I8Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlPiBtX2xpc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402884</attachid>
            <date>2020-06-26 11:59:40 -0700</date>
            <delta_ts>2020-06-26 12:57:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213631-20200626115939.patch</filename>
            <type>text/plain</type>
            <size>75679</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTI2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IENvbnRlbnRTZWN1cml0
eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAtIEFkb3B0IFN0
cmluZ1BhcnNpbmdCdWZmZXIgYWNyb3NzIENTUCBjb2RlLgorICAgICAgICAtIFJlbW92ZSBVVEYt
MTYgdXBjb252ZXJzaW9ucyBpbiBDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3QsCisgICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5TWVk
aWFMaXN0RGlyZWN0aXZlIGFuZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
a2lwVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2Fz
ZSk6CisgICAgICAgIEFkZCBvdmVybG9hZHMgZm9yIGVhY2ggaGVscGVyIHRoYXQgdGFrZSBhIFN0
cmluZ1BhcnNpbmdCdWZmZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFkdmFu
Y2luZ1Bvc2l0aW9uKToKKyAgICAgICAgQ29udmVydCB0byB1c2UgYW4gT3B0aW9uYWwgcmV0dXJu
IHZhbHVlIHJhdGhlciB0aGFuIG91dHBhcmFtZXRlciArIGJvb2wuCisKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QuaDoKKyAgICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgcmF0aGVyIHRoYW4g
cmF3IHBvaW50ZXJzIGZvciBwYXJzaW5nLgorIAorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3BhY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAgICBVc2UgU3RyaW5n
UGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHJhdGhlciB0aGFuIHJh
dyBwb2ludGVycyBmb3IgcGFyc2luZy4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICBVc2UgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQg
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bwor
ICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAgICAq
IHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBv
cnRVUkkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6c2V0Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1
cmVSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKToK
KyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Lmg6
CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6
OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3aXRjaCB0byB1c2luZyBPcHRpb25hbCBm
b3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBib29s
LiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5seSwgcGFja2FnZSB1cCBuYW1lCisgICAg
ICAgIGFuZCB2YWx1ZSBwYWlyIGludG8gYSBuZXcgUGFyc2VkRGlyZWN0aXZlIHN0cnVjdCB0aGF0
IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG1vcmUgZWFzaWx5LgorCisgICAgICAgICogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzTWVkaWFUeXBlQ2hhcmFjdGVyKTogCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgVXNlIFN0
cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNl
IHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCkuCisKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1BhdGhD
b21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDb250aW51YXRp
b25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xvbk9yU2xhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05vbmNlQ2hhcmFjdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
Tm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVy
IGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxs
IHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3
aXRjaCB0byB1c2luZyBPcHRpb25hbCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIg
dGhhbiBvdXRwYXJhbWV0ZXIgKyBib29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5s
eSwgcGFja2FnZSB1cCBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHZhbHVlcyBpbnRvIHN0cnVjdHMg
dGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgcmV0dXJuZWQgLyBwYXNzZWQgYXJvdW5kLgorCiAyMDIw
LTA2LTI2ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggZm9yIGNyYXNoIGluIGFjY2Vzc2liaWxpdHkvcm9sZXMtZXhwb3NlZC5odG1sIGluIGlz
b2xhdGVkIHRyZWUgbW9kZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Q
YXJzaW5nVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIGJvb2wgaXNOb3RBU0NJSVNw
YWNlKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9v
bCBpc05vdEFTQ0lJU3BhY2UoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJ
SVNwYWNlKGMpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci1ib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQs
IENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5
cGVuYW1lIERlbGltaXRlclR5cGU+IGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUgZGVs
aW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gZGVsaW1p
dGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw4ICs0OCwxNiBAQCBib29sIHNraXBF
eGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5
cGUpPgotYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBD
aGFyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RGVsaW1pdGVyVHlwZT4gYm9vbCBza2lwRXhhY3RseShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+JiBidWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpidWZmZXIgPT0gZGVsaW1pdGVyKSB7
CisgICAgICAgICsrYnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIGNo
YXJhY3RlclByZWRpY2F0ZShDaGFyYWN0ZXJUeXBlKT4gYm9vbCBza2lwRXhhY3RseShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAg
ICBpZiAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpIHsK
ICAgICAgICAgKytwb3NpdGlvbjsKQEAgLTU5LDQ0ICs2Niw4MCBAQCBib29sIHNraXBFeGFjdGx5
KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJhY3Rl
clR5cGUpPiBib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAm
JiBjaGFyYWN0ZXJQcmVkaWNhdGUoKmJ1ZmZlcikpIHsKKyAgICAgICAgKytidWZmZXI7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+IHZvaWQgc2tp
cFVudGlsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKIHsKICAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQgJiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikKICAgICAgICAgKytwb3NpdGlvbjsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENo
YXJUeXBlKT4KLXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0
IENoYXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50aWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiYgYnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICB3aGls
ZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyICE9IGRlbGltaXRl
cikKKyAgICAgICAgKytidWZmZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJhY3RlclR5cGUpPiB2b2lkIHNraXBVbnRp
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgq
cG9zaXRpb24pKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgotdm9pZCBza2lwV2hp
bGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJh
Y3RlclR5cGUpPiB2b2lkIHNraXBVbnRpbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCit7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgqYnVmZmVyKSkKKyAgICAgICAgKytidWZmZXI7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGlj
YXRlKENoYXJhY3RlclR5cGUpPiB2b2lkIHNraXBXaGlsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
cG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRp
b24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCiAgICAgICAgICsrcG9z
aXRpb247CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclBy
ZWRpY2F0ZShDaGFyVHlwZSk+Ci12b2lkIHJldmVyc2VTa2lwV2hpbGUoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIHN0YXJ0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhcmFjdGVyVHlwZSk+IHZvaWQg
c2tpcFdoaWxlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3sK
KyAgICB3aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQ
cmVkaWNhdGUoKmJ1ZmZlcikpCisgICAgICAgICsrYnVmZmVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyYWN0ZXJUeXBl
KT4gdm9pZCByZXZlcnNlU2tpcFdoaWxlKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwg
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0
YXJ0ICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQogICAgICAgICAtLXBvc2l0aW9u
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNh
c2VMZXR0ZXJzTGVuZ3RoPgotYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNhc2VMZXR0ZXJzQXJy
YXlTaXplPiBib29sIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzQXJyYXlTaXplXSkKIHsKKyAgICBjb25z
dGV4cHIgYXV0byBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoID0gbG93ZXJjYXNlTGV0dGVyc0FycmF5
U2l6ZSAtIDE7CisgICAgCiAgICAgaWYgKHBvc2l0aW9uICsgbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEs
IGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9zaXRpb24g
Kz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAot
ICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3Np
dGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0ZXJzTGVuZ3Ro
IC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNBcnJheVNpemU+IGJvb2wgc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzQXJyYXlT
aXplXSkKK3sKKyAgICBjb25zdGV4cHIgYXV0byBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoID0gbG93
ZXJjYXNlTGV0dGVyc0FycmF5U2l6ZSAtIDE7CisKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShidWZmZXIucG9zaXRp
b24oKSwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCwgbG93ZXJjYXNlTGV0dGVycykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBidWZmZXIgKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGgpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcAkocmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwNCArMzAsOTYg
QEAKICNpbmNsdWRlIDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VIYXNoQWxnb3Jp
dGhtQWR2YW5jaW5nUG9zaXRpb24oY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtJiBhbGdvcml0aG0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
T3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0+IHBhcnNlSGFz
aEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIGJ1ZmZlcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBtdWNoIGNsZWFu
ZXIgd2l0aCBhIGxvb2t1cCB0YWJsZSBvZiBwYWlycyBvZiBsYWJlbCAvIGFsZ29yaXRobSBlbnVt
IHZhbHVlcywgYnV0IEkgY2FuJ3QKICAgICAvLyBmaWd1cmUgb3V0IGhvdyB0byBrZWVwIHRoZSBs
YWJlbHMgY29tcGlsZXRpbWUgc3RyaW5ncyBmb3Igc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2Fz
ZS4KIAotICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQs
ICJzaGEyNTYiKSkgewotICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3Q6OkFsZ29yaXRobTo6U0hBMjU2OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTM4
NCIpKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEEzODQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhNTEyIikpIHsK
LSAgICAgICAgYWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0
aG06OlNIQTUxMjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwRXhh
Y3RseUlnbm9yaW5nQVNDSUlDYXNlKGJ1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4g
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShidWZmZXIsICJzaGEzODQiKSkKKyAgICAgICAg
cmV0dXJuIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEzODQ7Cisg
ICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAic2hhNTEyIikpCisg
ICAgICAgIHJldHVybiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hB
NTEyOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9uYWw8UmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09
IGVuZCkKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0
aG07Ci0gICAgaWYgKCFwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlv
biwgZW5kLCBhbGdvcml0aG0pKQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3Jp
dGhtQWR2YW5jaW5nUG9zaXRpb24oYnVmZmVyKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVy
VHlwZT4ocG9zaXRpb24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwg
Jy0nKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luSGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAg
IHNraXBFeGFjdGx5PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tp
cEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJl
Z2luSGFzaFZhbHVlID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3Rl
clR5cGUsIGlzQmFzZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KGJ1ZmZlcik7CisgICAgc2tpcEV4
YWN0bHkoYnVmZmVyLCAnPScpOworICAgIHNraXBFeGFjdGx5KGJ1ZmZlciwgJz0nKTsKIAotICAg
IGlmIChwb3NpdGlvbiA9PSBiZWdpbkhhc2hWYWx1ZSkKKyAgICBpZiAoYnVmZmVyLnBvc2l0aW9u
KCkgPT0gYmVnaW5IYXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBWZWN0b3I8dWludDhfdD4gZGlnZXN0OwotICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJlZ2lu
SGFzaFZhbHVlLCBwb3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKTsKKyAgICBTdHJpbmdWaWV3IGhh
c2hWYWx1ZShiZWdpbkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1
ZSk7CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlk
YXRlUGFkZGluZykpIHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBk
aWdlc3QpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBXVEZNb3ZlKGRp
Z2VzdCkgfTsKKyAgICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29y
aXRobSwgV1RGTW92ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFyKiYgYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVm
ZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2luLCBl
bmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9
CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFw
aGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0
b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwb3NpdGlv
biA9PSBlbmQpCisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtIGFsZ29yaXRobTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0
aW9uKHBvc2l0aW9uLCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJz
ZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihidWZmZXIpOworICAgIGlmICghYWxnb3Jp
dGhtKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFza2lwRXhhY3Rs
eTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQorICAgIGlmICghc2tpcEV4YWN0
bHkoYnVmZmVyLCAnLScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24s
IGVuZCk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0n
KTsKLSAgICBza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOwor
ICAgIGF1dG8gYmVnaW5IYXNoVmFsdWUgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4oYnVmZmVyKTsK
KyAgICBza2lwRXhhY3RseShidWZmZXIsICc9Jyk7CisgICAgc2tpcEV4YWN0bHkoYnVmZmVyLCAn
PScpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChidWZm
ZXIucG9zaXRpb24oKSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsg
YWxnb3JpdGhtLCBTdHJpbmcoYmVnaW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFs
dWUpIH07CisgICAgcmV0dXJuIEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAq
YWxnb3JpdGhtLCBTdHJpbmcoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVn
aW5IYXNoVmFsdWUpIH07CiB9CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRv
Z3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3Qo
Y29uc3QgTENoYXIqJiBiZWdpbiwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPEVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdl
c3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFy
c2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJu
IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKIE9wdGlv
bmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
JiBlbmNvZGVkRGlnZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYzNTcxKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwxMSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlcwogICAgIFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0
IExDaGFyKiBlbmQpOworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJz
ZUNyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlv
bmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0
KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29u
c3QgVUNoYXIqJiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxFbmNvZGVkUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0
KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8RW5jb2Rl
ZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5jb2RlZFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29u
c3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJldmlzaW9uIDI2
MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFjdGVyVHlwZSom
IHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBvcGVyYXRvcigp
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKICAgICB7CiAgICAg
ICAgIC8vIEluaXRpYWxpemUgaGFzaGVzIHRvIGJlIHNvbWV0aGluZyBvdGhlciBXVEY6Om51bGxv
cHQsIHRvIGluZGljYXRlCiAgICAgICAgIC8vIHRoYXQgYXQgbGVhc3Qgb25lIHRva2VuIHdhcyBz
ZWVuLCBhbmQgdGh1cyBzZXR0aW5nIHRoZSBlbXB0eSBmbGFnCkBAIC01OCwxOSArNTksMTkgQEAg
cHVibGljOgogICAgICAgICBpZiAoIW1fZGlnZXN0cykKICAgICAgICAgICAgIG1fZGlnZXN0cyA9
IFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiB7IH07CiAKLSAgICAg
ICAgYXV0byBkaWdlc3QgPSBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBvc2l0aW9u
LCBlbmQpOworICAgICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3QoYnVmZmVyKTsKICAgICAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHNwZWMgYWxsb3dzIGZvciBvcHRpb25zIGZvbGxvd2lu
ZyB0aGUgZGlnZXN0LCBidXQgc28gZmFyLCBubwogICAgICAgICAvLyBzcGVjaWZpYyBvcHRpb25z
IGhhdmUgYmVlbiBzcGVjaWZpZWQuIFRodXMsIHdlIGp1c3QgcGFyc2UgYW5kIGlnbm9yZQogICAg
ICAgICAvLyB0aGVtLiBUaGVpciBzeW50YXggaXMgYSAnPycgZm9sbG93IGJ5IGFueSBudW1iZXIg
b2YgVkNIQVJzLgotICAgICAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRp
b24sIGVuZCwgJz8nKSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZD
SEFSPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwgJz8n
KSkKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihidWZmZXIp
OwogCiAgICAgICAgIC8vIEFmdGVyIHRoZSBiYXNlNjQgdmFsdWUgYW5kIG9wdGlvbnMsIHRoZSBj
dXJyZW50IGNoYXJhY3RlciBwb2ludGVkIHRvIGJ5IHBvc2l0aW9uCiAgICAgICAgIC8vIHNob3Vs
ZCBlaXRoZXIgYmUgdGhlIGVuZCBvciBhIHNwYWNlLgotICAgICAgICBpZiAocG9zaXRpb24gIT0g
ZW5kICYmICFpc0hUTUxTcGFjZSgqcG9zaXRpb24pKQorICAgICAgICBpZiAoIWJ1ZmZlci5hdEVu
ZCgpICYmICFpc0hUTUxTcGFjZSgqYnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBtX2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsKQEAgLTg0LDE3
ICs4NSwxNCBAQCBwcml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2VzKGNv
bnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZ1bmN0
b3ImJiBmdW5jdG9yKQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIsIEZ1bmN0b3ImJiBmdW5jdG9yKQogewot
ICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihidWZmZXIpOwogCi0gICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIHdoaWxlIChw
b3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWZ1bmN0b3IocG9zaXRpb24sIGVuZCkpCi0g
ICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RIVE1MU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOwotCi0gICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkpIHsKKyAgICAgICAgaWYgKCFmdW5jdG9yKGJ1ZmZlcikpCisgICAgICAgICAgICBza2lw
V2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RIVE1MU3BhY2U+KGJ1ZmZlcik7CisgICAgICAgIHNr
aXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4oYnVmZmVyKTsKICAgICB9CiB9CiAK
QEAgLTEwNSwxMSArMTAzLDEwIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291
cmNlQ3IKIAogICAgIE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0Pj4gcmVzdWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwg
PSAqaW50ZWdyaXR5TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgp
KQotICAgICAgICBzcGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5n
SW1wbC5jaGFyYWN0ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRh
dGFQYXJzZXI8TENoYXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNw
YWNlcyhzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigp
ICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsg
cmVzdWx0IH0pOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhpbnRlZ3JpdHlNZXRhZGF0
YSwgWyZyZXN1bHRdIChhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBl
ID0gdHlwZW5hbWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKyAgICAgICAgc3Bs
aXRPblNwYWNlcyhidWZmZXIsIEludGVncml0eU1ldGFkYXRhUGFyc2VyPENoYXJhY3RlclR5cGU+
IHsgcmVzdWx0IH0pOworICAgIH0pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAko
cmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogCkBA
IC0yMTIsMjIgKzIxMywyMyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2
ZUhlCiAgICAgLy8gUkZDMjYxNiwgc2VjdGlvbiA0LjIgc3BlY2lmaWVzIHRoYXQgaGVhZGVycyBh
cHBlYXJpbmcgbXVsdGlwbGUgdGltZXMgY2FuCiAgICAgLy8gYmUgY29tYmluZWQgd2l0aCBhIGNv
bW1hLiBXYWxrIHRoZSBoZWFkZXIgc3RyaW5nLCBhbmQgcGFyc2UgZWFjaCBjb21tYQogICAgIC8v
IHNlcGFyYXRlZCBjaHVuayBhcyBhIHNlcGFyYXRlIGhlYWRlci4KLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KGhlYWRlcikudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29u
c3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24g
PSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyBoZWFkZXIubGVuZ3RoKCk7
Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4o
cG9zaXRpb24sIGVuZCwgJywnKTsKLQotICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVh
ZGVyMQotICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgbV9w
b2xpY2llcy5hcHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRl
KCp0aGlzLCBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9t
KSk7Ci0KLSAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFk
ZXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09
IGVuZCB8fCAqcG9zaXRpb24gPT0gJywnKTsKLSAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBv
c2l0aW9uLCBlbmQsICcsJyk7Ci0gICAgICAgIGJlZ2luID0gcG9zaXRpb247Ci0gICAgfQorICAg
IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIGJ1ZmZlcikgeworICAg
ICAgICBhdXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgCisgICAgICAgIHdoaWxl
IChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBza2lwVW50
aWwoYnVmZmVyLCAnLCcpOworCisgICAgICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVh
ZGVyMQorICAgICAgICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCisgICAgICAg
ICAgICBtX3BvbGljaWVzLmFwcGVuZChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjpjcmVhdGUoKnRoaXMsIFN0cmluZyhiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiks
IHR5cGUsIHBvbGljeUZyb20pKTsKKworICAgICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFu
ZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAg
ICAgICAgIEFTU0VSVChidWZmZXIuYXRFbmQoKSB8fCAqYnVmZmVyID09ICcsJyk7CisgICAgICAg
ICAgICBza2lwRXhhY3RseShidWZmZXIsICcsJyk7CisgICAgICAgICAgICBiZWdpbiA9IGJ1ZmZl
ci5wb3NpdGlvbigpOworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2
MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTYgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJT
ZWN1cml0eUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1l
Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0
aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAg
IHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQogCi1zdGF0aWMg
Ym9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKENo
YXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMpIHx8IChjID49IDB4
MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CkBAIC0zMzMsMjI0ICsz
MzQsMjE4IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDoKICAgICBp
ZiAocG9saWN5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNv
bnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9
IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5k
KSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBvc2l0aW9uOwotICAg
ICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0KLSAgICAgICAgU3Ry
aW5nIG5hbWUsIHZhbHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVn
aW4sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbmFtZS5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5
UG9saWN5OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6dXBncmFkZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlBvbGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVw
b3J0VVJJKQotICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUlu
SFRUUEVxdWl2TWV0YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHBvbGljeSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAg
ICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBhdXRvIGRpcmVjdGl2ZUJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBz
a2lwVW50aWwoYnVmZmVyLCAnOycpOworCisgICAgICAgICAgICBpZiAoYXV0byBkaXJlY3RpdmUg
PSBwYXJzZURpcmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgZGlyZWN0aXZlQmVnaW4sIGJ1
ZmZlci5wb3NpdGlvbigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUt
Pm5hbWUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpI
VFRQRXF1aXZNZXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnNhbmRib3gpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnJlcG9ydFVSSSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZGlyZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGlj
eS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2
ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5
OjpQb2xpY3lGcm9tOjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpyZXBvcnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBhZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAK
LSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAg
ICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAg
ICAgICAgICAgQVNTRVJUKGJ1ZmZlci5hdEVuZCgpIHx8ICpidWZmZXIgPT0gJzsnKTsKKyAgICAg
ICAgICAgIHNraXBFeGFjdGx5KGJ1ZmZlciwgJzsnKTsKKyAgICAgICAgfQorICAgIH0pOwogfQog
CiAvLyBkaXJlY3RpdmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFtZSBbIFdTUCBkaXJl
Y3RpdmUtdmFsdWUgXSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEqKCBBTFBIQSAvIERJR0lU
IC8gIi0iICkKIC8vIGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZDSEFSIGV4Y2VwdCAi
OyI+ICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNl
RGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYXV0
byBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikgLT4gT3B0aW9uYWw8UGFyc2Vk
RGlyZWN0aXZlPgogewotICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHZh
bHVlLmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4oYnVmZmVyKTsKIAogICAgIC8vIEVt
cHR5IGRpcmVjdGl2ZSAoZS5nLiAiOzs7IikuIEV4aXQgZWFybHkuCi0gICAgaWYgKHBvc2l0aW9u
ID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChidWZmZXIuYXRFbmQoKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVn
aW4gPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBuYW1lQmVnaW4gPSBidWZmZXIucG9zaXRp
b24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFj
dGVyPihidWZmZXIpOwogCiAgICAgLy8gVGhlIGRpcmVjdGl2ZS1uYW1lIG11c3QgYmUgbm9uLWVt
cHR5LgotICAgIGlmIChuYW1lQmVnaW4gPT0gcG9zaXRpb24pIHsKLSAgICAgICAgc2tpcFdoaWxl
PFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBtX3BvbGlj
eS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAt
IG5hbWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5hbWVCZWdpbiA9
PSBidWZmZXIucG9zaXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwg
aXNOb3RBU0NJSVNwYWNlPihidWZmZXIpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBv
cnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIG5hbWVC
ZWdpbikpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIG5hbWUg
PSBTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbik7CisgICAgYXV0byBuYW1l
ID0gU3RyaW5nKG5hbWVCZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pOwogCi0g
ICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShu
YW1lKSwgeyB9IH07CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJU3BhY2U+
KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNw
YWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWRE
aXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNB
U0NJSVNwYWNlPihidWZmZXIpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBp
c05vdEFTQ0lJU3BhY2U+KGJ1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9y
dGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIGJ1ZmZlci5wb3NpdGlvbigpIC0gbmFtZUJl
Z2luKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgc2tpcFdo
aWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciog
dmFsdWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byB2YWx1ZUJlZ2luID0gYnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZl
VmFsdWVDaGFyYWN0ZXI+KGJ1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1l
LCBTdHJpbmcodmFsdWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSkgeworICAgICAgICBtX3BvbGljeS5yZXBv
cnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4s
IGJ1ZmZlci5lbmQoKSAtIHZhbHVlQmVnaW4pKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0aXZlLXZhbHVlIG1heSBiZSBlbXB0eS4KLSAg
ICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKHZhbHVlQmVnaW4gPT0gYnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBQYXJz
ZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIHZhbHVlID0gU3RyaW5n
KHZhbHVlQmVnaW4sIHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgYXV0byB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIHZh
bHVlQmVnaW4pOworICAgIHJldHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKHZhbHVlKSB9OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBv
cnRVUkkoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmICghbV9yZXBvcnRV
UklzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3Rp
dmUobmFtZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJl
Y3RpdmUubmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogcG9zaXRpb24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBw
b3NpdGlvbiArIHZhbHVlLmxlbmd0aCgpOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhk
aXJlY3RpdmUudmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0
ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBidWZmZXIucG9z
aXRpb24oKTsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1
ZmZlcik7CiAKLSAgICAgICAgY29uc3QgVUNoYXIqIHVybEJlZ2luID0gcG9zaXRpb247Ci0gICAg
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAg
ICAgICAgICAgIGF1dG8gdXJsQmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAg
ICAgICAgaWYgKHVybEJlZ2luIDwgcG9zaXRpb24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMu
YXBwZW5kKHZhbHVlLnN1YnN0cmluZyh1cmxCZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0g
dXJsQmVnaW4pKTsKLSAgICB9CisgICAgICAgICAgICBpZiAodXJsQmVnaW4gPCBidWZmZXIucG9z
aXRpb24oKSkKKyAgICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52
YWx1ZS5zdWJzdHJpbmcodXJsQmVnaW4gLSBiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSB1cmxC
ZWdpbikpOworICAgICAgICB9CisgICAgfSk7CiB9CiAKIAogdGVtcGxhdGU8Y2xhc3MgQ1NQRGly
ZWN0aXZlVHlwZT4KLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0
Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgc3Rk
Ojp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBkaXJlY3RpdmUpCit2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3Rp
dmUmJiBkaXJlY3RpdmUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZXhpc3Rp
bmdEaXJlY3RpdmUpCiB7Ci0gICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS5y
ZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgaWYgKGV4aXN0aW5nRGlyZWN0aXZl
KSB7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGlyZWN0aXZlID0gbWFrZVVuaXF1
ZTxDU1BEaXJlY3RpdmVUeXBlPigqdGhpcywgbmFtZSwgdmFsdWUpOworICAgIGV4aXN0aW5nRGly
ZWN0aXZlID0gbWFrZVVuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPigqdGhpcywgV1RGTW92ZShkaXJl
Y3RpdmUubmFtZSksIFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSk7CiB9CiAKLXZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzYW5kYm94UG9saWN5KQordm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGlyZWN0
aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKGRpcmVj
dGl2ZS5uYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9oYXZlU2FuZGJv
eFBvbGljeSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFt
ZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUu
bmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXZlU2FuZGJveFBvbGljeSA9
IHRydWU7CiAgICAgU3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xpY3kuZW5mb3JjZVNh
bmRib3hGbGFncyhTZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeShzYW5kYm94UG9s
aWN5LCBpbnZhbGlkVG9rZW5zKSk7CisgICAgbV9wb2xpY3kuZW5mb3JjZVNhbmRib3hGbGFncyhT
ZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1
ZSksIGludmFsaWRUb2tlbnMpKTsKICAgICBpZiAoIWludmFsaWRUb2tlbnMuaXNOdWxsKCkpCiAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7
CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFk
ZUluc2VjdXJlUmVxdWVzdHMoY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWRE
aXJlY3RpdmUmJiBkaXJlY3RpdmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUo
V1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChtX3VwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1
cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRl
RGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX3VwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzID0gdHJ1ZTsKICAgICBtX3BvbGljeS5z
ZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyh0cnVlKTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0
aXZlKQogewogICAgIGlmIChtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50RGlyZWN0aXZlKSB7Ci0g
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50
RGlyZWN0aXZlID0gdHJ1ZTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGREaXJlY3Rp
dmUoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewotICAgIEFTU0VSVCghbmFtZS5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVCghZGlyZWN0aXZlLm5hbWUuaXNFbXB0eSgpKTsKIAotICAgIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpkZWZhdWx0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZGVmYXVs
dFNyYyk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpkZWZhdWx0U3JjKSkgeworICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2RlZmF1bHRTcmMpOwogICAgICAgICBtX3BvbGljeS5h
ZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVNjcmlwdHMobV9kZWZhdWx0U3JjLT5oYXNoQWxnb3Jp
dGhtc1VzZWQoKSk7CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5l
U3R5bGVzaGVldHMobV9kZWZhdWx0U3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzY3JpcHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9z
Y3JpcHRTcmMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3Rp
dmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYykp
IHsKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9zY3JpcHRTcmMpOwogICAgICAgICBt
X3BvbGljeS5hZGRIYXNoQWxnb3JpdGhtc0ZvcklubGluZVNjcmlwdHMobV9zY3JpcHRTcmMtPmhh
c2hBbGdvcml0aG1zVXNlZCgpKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKSkg
ewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fc3R5bGVTcmMpOworICAgIH0gZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKSkgeworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUp
LCBtX3N0eWxlU3JjKTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxp
bmVTdHlsZXNoZWV0cyhtX3N0eWxlU3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpvYmplY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fb2Jq
ZWN0U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNyYykpIHsKKyAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpvYmplY3RTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJl
Y3RpdmUpLCBtX29iamVjdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZy
YW1lU3JjKSkgewogICAgICAgICAvLyBGSVhNRTogTG9nIHRvIGNvbnNvbGUgIlRoZSBmcmFtZS1z
cmMgZGlyZWN0aXZlIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgY2hpbGQtc3JjIGRpcmVjdGl2ZSBp
bnN0ZWFkLiIKICAgICAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1NzczPi4KLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lU3JjKTsKLSAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmltZ1NyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9p
bWdTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvbnRTcmMpKQotICAgICAgICBzZXRDU1BE
aXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwg
dmFsdWUsIG1fZm9udFNyYyk7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVT
cmMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmltZ1NyYykpCisgICAgICAg
IHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
PihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1faW1nU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVOYW1lczo6Zm9udFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9udFNy
Yyk7CiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQotICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6Om1hbmlmZXN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21hbmlmZXN0U3JjKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWFuaWZlc3RTcmMpKQorICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
V1RGTW92ZShkaXJlY3RpdmUpLCBtX21hbmlmZXN0U3JjKTsKICNlbmRpZgotICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6Om1lZGlhU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21lZGlhU3JjKTsK
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0
aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVl
LCBtX2Nvbm5lY3RTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFt
ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKLSAgICAg
ICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmU+KG5hbWUsIHZhbHVlLCBtX2NoaWxkU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3Jt
QWN0aW9uKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Zvcm1BY3Rpb24pOwotICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OmJhc2VVUkkpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fYmFzZVVSSSk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6Om1lZGlhU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZl
KSwgbV9tZWRpYVNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJl
Y3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNvbm5lY3RT
cmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Nvbm5lY3RTcmMpOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCisgICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRp
cmVjdGl2ZSksIG1fY2hpbGRTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpm
b3JtQWN0aW9uKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb3JtQWN0aW9uKTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6YmFzZVVSSSkpCisgICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZN
b3ZlKGRpcmVjdGl2ZSksIG1fYmFzZVVSSSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OmZyYW1lQW5jZXN0b3JzKSkgewogICAgICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAg
ICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShu
YW1lKTsKKyAgICAgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9y
dE9ubHlNb2RlKGRpcmVjdGl2ZS5uYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZnJhbWVBbmNlc3RvcnMpOwotICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6cGx1Z2luVHlwZXMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9wbHVnaW5U
eXBlcyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkpCi0gICAgICAgIGFwcGx5U2Fu
ZGJveFBvbGljeShuYW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJ
KSkKLSAgICAgICAgcGFyc2VSZXBvcnRVUkkobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKSkKLSAgICAgICAgc2V0VXBncmFkZUluc2Vj
dXJlUmVxdWVzdHMobmFtZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6YmxvY2tBbGxNaXhlZENv
bnRlbnQpKQotICAgICAgICBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQobmFtZSk7Cisg
ICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVBbmNlc3RvcnMpOworICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX3BsdWdpblR5cGVzKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6c2FuZGJveCkpCisgICAgICAgIGFwcGx5U2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2
ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAgICAg
ICBwYXJzZVJlcG9ydFVSSShXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAgIHNldFVwZ3Jh
ZGVJbnNlY3VyZVJlcXVlc3RzKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50KSkKKyAgICAgICAgc2V0QmxvY2tB
bGxNaXhlZENvbnRlbnRFbmFibGVkKFdURk1vdmUoZGlyZWN0aXZlKSk7CiAgICAgZWxzZQotICAg
ICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAg
bV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFt
ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdC5oCShyZXZpc2lvbiAyNjM1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE2
ICs4OSwxOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5n
JiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tKTsKIAotICAgIGJvb2wgcGFyc2VE
aXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5h
bWUsIFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUGx1Z2luVHlwZXMo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFkZERp
cmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZv
aWQgYXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
YW5kYm94UG9saWN5KTsKLSAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKGNvbnN0
IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBzdHJ1Y3QgUGFyc2VkRGlyZWN0aXZlIHsKKyAgICAg
ICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICB9OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4gcGFy
c2VEaXJlY3RpdmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdm9p
ZCBwYXJzZVJlcG9ydFVSSShQYXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBhZGREaXJlY3Rp
dmUoUGFyc2VkRGlyZWN0aXZlJiYpOworICAgIHZvaWQgYXBwbHlTYW5kYm94UG9saWN5KFBhcnNl
ZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNl
ZERpcmVjdGl2ZSYmKTsKKyAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChQ
YXJzZWREaXJlY3RpdmUmJik7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlw
ZT4KLSAgICB2b2lkIHNldENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYpOworICAgIHZv
aWQgc2V0Q1NQRGlyZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlVHlwZT4mKTsKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmUqIG9wZXJhdGl2ZURpcmVjdGl2ZShDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGly
ZWN0aXZlLmNwcAkocmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTAgKzMxLDExIEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdC5oIgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzTWVkaWFUeXBl
Q2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0
aWMgYm9vbCBpc01lZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0
dXJuICFpc0FTQ0lJU3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTMsNjEgQEAg
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAg
IGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBi
ZWdpbiArIHZhbHVlLmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1Ig
J3BsdWdpbi10eXBlczsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJl
Y3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAg
ICAgICAvLyBfX19fXyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4K
LSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
ICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVn
aW4gPSBwb3NpdGlvbjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNo
YXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3Rp
dmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwg
cG9zaXRpb24gLSBiZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCk7CisgICAgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBidWZmZXIp
IHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKGJ1ZmZl
cik6OkNoYXJhY3RlclR5cGU7CiAKLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIK
LSAgICAgICAgLy8gICAgICBeCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0
aW9uLCBlbmQsICcvJykpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJ
SVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xp
Y3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJl
Z2luKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAo
YnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgLy8gX19fX18g
T1IgX19fX19taW1lMS9taW1lMQorICAgICAgICAgICAgLy8gXiAgICAgICAgXgorICAgICAgICAg
ICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4oYnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyBeCisg
ICAgICAgICAgICBhdXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihidWZm
ZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVND
SUlTcGFjZT4oYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5
KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgYnVmZmVyLnBvc2l0aW9u
KCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVy
PihidWZmZXIpOworCisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAg
ICAgICAgICAgLy8gICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwg
Jy8nKSkgeworICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFT
Q0lJU3BhY2U+KGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIGJ1ZmZlci5wb3NpdGlv
bigpIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8v
ICAgICAgIF4KKyAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNN
ZWRpYVR5cGVDaGFyYWN0ZXI+KGJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8
Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNwYWNlPihidWZmZXIpOworICAgICAgICAgICAgICAg
IGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5n
KGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KGJ1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIG1pbWUx
L21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgor
ICAgICAgICAgICAgLy8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAg
ICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgJiYgaXNOb3RBU0NJSVNwYWNlKCpidWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tp
cFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4oYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVz
KFN0cmluZyhiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wbHVnaW5UeXBlcy5h
ZGQoU3RyaW5nKGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAKLSAgICAgICAg
Ly8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBp
ZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVu
ZCkpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJ
bnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChidWZmZXIuYXRFbmQoKSB8fCBp
c0FTQ0lJU3BhY2UoKmJ1ZmZlcikpOwogICAgICAgICB9Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIC8vIG1p
bWUxL21pbWUxIG1pbWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJv
cgotICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAg
ICAgICAgICAgICBeCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiBpc05vdEFTQ0lJU3Bh
Y2UoKnBvc2l0aW9uKSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJ
U3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGlj
eSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVn
aW4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2lu
VHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotCi0gICAgICAgIEFT
U0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwotICAgIH0K
KyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdC5jcHAJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw0
OCArNTcsNDEgQEAgc3RhdGljIGJvb2wgaXNDU1BEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cgogICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYyk7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlQ2hh
cmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Ym9vbCBpc1NvdXJjZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFp
c0FTQ0lJU3BhY2UoYyk7CiB9CiAKLXN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihVQ2hhciBj
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hh
cmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJp
YyhjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFj
dGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9v
bCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVy
biBjICE9ICc/JyAmJiBjICE9ICcjJzsKIH0KIAotc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUg
YykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBj
ID09ICctJyB8fCBjID09ICcuJzsKIH0KIAotc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2go
VUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlz
Tm90Q29sb25PclNsYXNoKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnOicg
JiYgYyAhPSAnLyc7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29s
IGlzU291cmNlTGlzdE5vbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZm
ZXIpCiB7Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNr
aXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKLQotICAgIGNvbnN0IFVD
aGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFy
YWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4sICInbm9uZSciKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1ZmZl
cik7CiAKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXNraXBFeGFjdGx5SWdub3JpbmdB
U0NJSUNhc2UoYnVmZmVyLCAiJ25vbmUnIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJ
U3BhY2U+KGJ1ZmZlcik7CisKKyAgICByZXR1cm4gYnVmZmVyLmF0RW5kKCk7CiB9CiAKIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3QoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGly
ZWN0aXZlTmFtZSkKQEAgLTEwOCwxMiArMTAyLDE0IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3Q6OkNvbnRlbnQKIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChpc1NvdXJjZUxpc3ROb25l
KHZhbHVlKSkgewotICAgICAgICBtX2lzTm9uZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgcGFyc2UoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHZhbHVlLmxl
bmd0aCgpKTsKKyAgICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1
ZmZlcikgeworICAgICAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZShidWZmZXIpKSB7CisgICAgICAg
ICAgICBtX2lzTm9uZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBwYXJzZShidWZmZXIpOworICAgIH0pOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OmlzUHJvdG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVSTCYgdXJs
KSBjb25zdApAQCAtMTYwLDQyICsxNTYsMzcgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0OjptYQogLy8gc291cmNlLWxpc3QgICAgICAgPSAqV1NQIFsgc291cmNlICooIDEq
V1NQIHNvdXJjZSApICpXU1AgXQogLy8gICAgICAgICAgICAgICAgICAgLyAqV1NQICInbm9uZSci
ICpXU1AKIC8vCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2Uo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgY29uc3Qg
VUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsK
LSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
ICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQorICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FT
Q0lJU3BhY2U+KGJ1ZmZlcik7CisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBVQ2hhciogYmVnaW5Tb3VyY2UgPSBwb3NpdGlv
bjsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24s
IGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW5Tb3VyY2UgPSBidWZmZXIucG9zaXRpb24oKTsKKyAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFjdGVyPihidWZmZXIp
OwogCi0gICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7Ci0gICAgICAgIE9wdGlvbmFs
PHVpbnQxNl90PiBwb3J0OwotICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZhbHNlOwot
ICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworICAgICAgICBhdXRvIHNvdXJj
ZUJ1ZmZlciA9IFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgYnVmZmVyLnBvc2l0
aW9uKCkgfTsKIAotICAgICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShiZWdpblNvdXJjZSwgcG9z
aXRpb24pKQorICAgICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShzb3VyY2VCdWZmZXIpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHBhcnNlSGFzaFNvdXJjZShiZWdpblNv
dXJjZSwgcG9zaXRpb24pKQorICAgICAgICBpZiAocGFyc2VIYXNoU291cmNlKHNvdXJjZUJ1ZmZl
cikpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGFyc2VTb3VyY2UoYmVn
aW5Tb3VyY2UsIHBvc2l0aW9uLCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxk
Y2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgeworICAgICAgICBpZiAoYXV0byBzb3VyY2UgPSBwYXJz
ZVNvdXJjZShzb3VyY2VCdWZmZXIpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0cyBh
bmQga2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAgICAg
IC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBvbiB0
aGUgc291cmNlCiAgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KLSAgICAgICAgICAgIGlmIChz
Y2hlbWUuaXNFbXB0eSgpICYmIGhvc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKHNvdXJj
ZS0+c2NoZW1lLmlzRW1wdHkoKSAmJiBzb3VyY2UtPmhvc3QudmFsdWUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFt
ZShob3N0KSkKLSAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJj
ZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKLSAgICAgICAgICAgIG1fbGlzdC5h
cHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3Qs
IHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAg
ICAgICBpZiAoaXNDU1BEaXJlY3RpdmVOYW1lKHNvdXJjZS0+aG9zdC52YWx1ZSkpCisgICAgICAg
ICAgICAgICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGly
ZWN0aXZlTmFtZSwgc291cmNlLT5ob3N0LnZhbHVlKTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBl
bmQoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzb3VyY2UtPnNjaGVtZSwg
c291cmNlLT5ob3N0LnZhbHVlLCBzb3VyY2UtPnBvcnQudmFsdWUsIHNvdXJjZS0+cGF0aCwgc291
cmNlLT5ob3N0Lmhhc1dpbGRjYXJkLCBzb3VyY2UtPnBvcnQuaGFzV2lsZGNhcmQpKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVz
c2lvbihtX2RpcmVjdGl2ZU5hbWUsIFN0cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdp
blNvdXJjZSkpOworICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJl
c3Npb24obV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW5Tb3VyY2UsIGJ1ZmZlci5wb3NpdGlv
bigpIC0gYmVnaW5Tb3VyY2UpKTsKIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8
IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5hdEVuZCgp
IHx8IGlzQVNDSUlTcGFjZSgqYnVmZmVyKSk7CiAgICAgfQogICAgIAogICAgIG1fbGlzdC5zaHJp
bmtUb0ZpdCgpOwpAQCAtMjA1LDI3MCArMTk2LDI5NCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAvICggWyBzY2hlbWUgIjov
LyIgXSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIidz
ZWxmJyIKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291
cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUs
IFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJv
b2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdDo6U291cmNlPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJj
ZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsKLSAgICBpZiAo
YmVnaW4gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVm
ZmVyLCAiJ25vbmUnIikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTb3Vy
Y2Ugc291cmNlOwogCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykg
eworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSAmJiAqYnVmZmVyID09ICcq
JykgewogICAgICAgICBtX2FsbG93U3RhciA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInc2VsZiciKSkgeworICAgIGlmIChz
a2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKGJ1ZmZlciwgIidzZWxmJyIpKSB7CiAgICAgICAg
IG1fYWxsb3dTZWxmID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBzb3VyY2U7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGJlZ2luLCBlbmQgLSBiZWdpbiwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKICAg
ICAgICAgbV9hbGxvd0lubGluZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gc291cmNlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKKyAgICBpZiAo
c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZShidWZmZXIsICIndW5zYWZlLWV2YWwnIikpIHsK
ICAgICAgICAgbV9hbGxvd0V2YWwgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHNvdXJjZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBi
ZWdpbjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ib3N0ID0gYmVnaW47Ci0gICAgY29uc3QgVUNo
YXIqIGJlZ2luUGF0aCA9IGVuZDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Qb3J0ID0gbnVsbHB0
cjsKKyAgICBhdXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgYXV0byBiZWdpbkhv
c3QgPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luUGF0aCA9IGJ1ZmZlci5lbmQoKTsKKyAgICBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBiZWdpblBvcnQgPSBudWxscHRyOwogCi0gICAgc2tpcFdoaWxlPFVD
aGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENo
YXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNoPihidWZmZXIpOwogCi0gICAgaWYgKHBvc2l0
aW9uID09IGVuZCkgeworICAgIGlmIChidWZmZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0
CiAgICAgICAgIC8vICAgICBeCi0gICAgICAgIHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBw
b3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKTsKKyAgICAgICAgYXV0byBob3N0ID0gcGFy
c2VIb3N0KFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIGJ1ZmZlci5wb3NpdGlvbigp
IH0pOworICAgICAgICBpZiAoIWhvc3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgICAgIHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7CisgICAgICAgIHJldHVy
biBzb3VyY2U7CiAgICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9
PSAnLycpIHsKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVm
ZmVyID09ICcvJykgewogICAgICAgICAvLyBob3N0L3BhdGggfHwgaG9zdC8gfHwgLwogICAgICAg
ICAvLyAgICAgXiAgICAgICAgICAgIF4gICAgXgotICAgICAgICByZXR1cm4gcGFyc2VIb3N0KGJl
Z2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFyc2VQYXRoKHBv
c2l0aW9uLCBlbmQsIHBhdGgpOworICAgICAgICBhdXRvIGhvc3QgPSBwYXJzZUhvc3QoU3RyaW5n
UGFyc2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgYnVmZmVyLnBvc2l0aW9uKCkgfSk7CisgICAgICAg
IGlmICghaG9zdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAg
YXV0byBwYXRoID0gcGFyc2VQYXRoKGJ1ZmZlcik7CisgICAgICAgIGlmICghcGF0aCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgc291cmNlLmhvc3QgPSBXVEZN
b3ZlKCpob3N0KTsKKyAgICAgICAgc291cmNlLnBhdGggPSBXVEZNb3ZlKCpwYXRoKTsKKyAgICAg
ICAgcmV0dXJuIHNvdXJjZTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBv
c2l0aW9uID09ICc6JykgewotICAgICAgICBpZiAoZW5kIC0gcG9zaXRpb24gPT0gMSkgeworICAg
IGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpidWZmZXIgPT0gJzonKSB7
CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSkgewogICAgICAgICAg
ICAgLy8gc2NoZW1lOgogICAgICAgICAgICAgLy8gICAgICAgXgotICAgICAgICAgICAgcmV0dXJu
IHBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKTsKKyAgICAgICAgICAgIGF1dG8g
c2NoZW1lID0gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBidWZmZXIu
cG9zaXRpb24oKSB9KTsKKyAgICAgICAgICAgIGlmICghc2NoZW1lKQorICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIHNvdXJjZS5zY2hlbWUgPSBXVEZN
b3ZlKCpzY2hlbWUpOworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChwb3NpdGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKGJ1ZmZlclsxXSA9
PSAnLycpIHsKICAgICAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCiAgICAg
ICAgICAgICAvLyAgICAgICBeICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGlmICghcGFy
c2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNr
aXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnOicpCi0gICAgICAgICAgICAgICAgfHwg
IXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpCi0gICAgICAgICAgICAgICAg
fHwgIXNraXBFeGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcG9zaXRp
b247Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3Np
dGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gc2NoZW1lID0gcGFyc2VTY2hlbWUoU3RyaW5n
UGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSB9KTsKKyAgICAgICAgICAg
IGlmICghc2NoZW1lCisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5KGJ1ZmZlciwgJzon
KQorICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseShidWZmZXIsICcvJykKKyAgICAgICAg
ICAgICAgICB8fCAhc2tpcEV4YWN0bHkoYnVmZmVyLCAnLycpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAgICAgc291cmNlLnNj
aGVtZSA9IFdURk1vdmUoKnNjaGVtZSk7CisKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IGJ1ZmZl
ci5wb3NpdGlvbigpOworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90
Q29sb25PclNsYXNoPihidWZmZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBvc2l0aW9u
IDwgZW5kICYmICpwb3NpdGlvbiA9PSAnOicpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgKmJ1ZmZlciA9PSAnOicpIHsKICAgICAgICAgICAgIC8vIGhv
c3Q6cG9ydCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAgICAgIC8vICAgICBeICAgICAg
ICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcG9zaXRpb247Ci0gICAg
ICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJyk7CisgICAgICAgICAg
ICBiZWdpblBvcnQgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBVbnRpbChi
dWZmZXIsICcvJyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQg
JiYgKnBvc2l0aW9uID09ICcvJykgeworICAgIGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpICYmICpidWZmZXIgPT0gJy8nKSB7CiAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QvcGF0
aCB8fCBzY2hlbWU6Ly9ob3N0OnBvcnQvcGF0aAogICAgICAgICAvLyAgICAgICAgICAgICAgXiAg
ICAgICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRpb24gPT0gYmVnaW5I
b3N0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnVmZmVyLnBvc2l0
aW9uKCkgPT0gYmVnaW5Ib3N0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICBiZWdpblBhdGggPSBwb3NpdGlvbjsKKyAgICAgICAgYmVnaW5QYXRoID0gYnVmZmVy
LnBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAgaWYgKCFwYXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdp
blBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGgsIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGhvc3QgPSBwYXJzZUhvc3QoU3RyaW5nUGFy
c2luZ0J1ZmZlciB7IGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVnaW5QYXRo
IH0pOworICAgIGlmICghaG9zdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChiZWdpblBvcnQpIHsKKyAgICAgICAgYXV0byBwb3J0ID0gcGFyc2VQb3J0KFN0cmluZ1Bh
cnNpbmdCdWZmZXIgeyBiZWdpblBvcnQsIGJlZ2luUGF0aCB9KTsKKyAgICAgICAgaWYgKCFwb3J0
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghYmVnaW5Qb3J0
KQotICAgICAgICBwb3J0ID0gV1RGOjpudWxsb3B0OwotICAgIGVsc2UgewotICAgICAgICBpZiAo
IXBhcnNlUG9ydChiZWdpblBvcnQsIGJlZ2luUGF0aCwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc291cmNlLnBvcnQgPSBXVEZNb3Zl
KCpwb3J0KTsKICAgICB9CiAKLSAgICBpZiAoYmVnaW5QYXRoICE9IGVuZCkgewotICAgICAgICBp
ZiAoIXBhcnNlUGF0aChiZWdpblBhdGgsIGVuZCwgcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGJlZ2luUGF0aCAhPSBidWZmZXIuZW5kKCkpIHsKKyAgICAgICAgYXV0
byBwYXRoID0gcGFyc2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBhdGgsIGJ1ZmZl
ci5lbmQoKSB9KTsKKyAgICAgICAgaWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICBzb3VyY2UucGF0aCA9IFdURk1vdmUoKnBhdGgpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7Cisg
ICAgcmV0dXJuIHNvdXJjZTsKIH0KIAogLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+
IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4NgogLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBI
QSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBPcHRpb25hbDxTdHJpbmc+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
U2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAg
IEFTU0VSVChiZWdpbiA8PSBlbmQpOwotICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsKIAotICAgIGlmIChi
ZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnVmZmVyLmF0RW5k
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogcG9z
aXRpb24gPSBiZWdpbjsKKyAgICBhdXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAg
ICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJQWxwaGE+KGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3Np
dGlvbiwgZW5kKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTY2hlbWVDb250aW51
YXRpb25DaGFyYWN0ZXI+KGJ1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgZW5kIC0gYmVn
aW4pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBTdHJpbmcoYmVnaW4sIGJ1ZmZlci5w
b3NpdGlvbigpIC0gYmVnaW4pOwogfQogCiAvLyBob3N0ICAgICAgICAgICAgICA9IFsgIiouIiBd
IDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hhciApCiAvLyAgICAgICAgICAgICAgICAgICAv
ICIqIgogLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCiAvLwotYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxk
Y2FyZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6Okhvc3Q+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZl
cikKIHsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoaG9zdC5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKKyAgICBBU1NFUlQoYnVmZmVyLnBv
c2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsKIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAg
ICBIb3N0IGhvc3Q7CiAKLSAgICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQs
ICcqJykpIHsKLSAgICAgICAgaG9zdEhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICBpZiAoc2tpcEV4
YWN0bHkoYnVmZmVyLCAnKicpKSB7CisgICAgICAgIGhvc3QuaGFzV2lsZGNhcmQgPSB0cnVlOwog
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhvc3Q7CiAK
LSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy4nKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIs
ICcuJykpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGNv
bnN0IFVDaGFyKiBob3N0QmVnaW4gPSBwb3NpdGlvbjsKKyAgICBhdXRvIGhvc3RCZWdpbiA9IGJ1
ZmZlci5wb3NpdGlvbigpOwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAg
IGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBl
LCBpc0hvc3RDaGFyYWN0ZXI+KGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlv
biwgZW5kKTsKKyAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rl
cj4oYnVmZmVyKTsKIAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgIXNraXBFeGFjdGx5
PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLicpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhc2tpcEV4YWN0
bHkoYnVmZmVyLCAnLicpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9
CiAKLSAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kKTsKLSAgICBob3N0ID0gU3RyaW5nKGhvc3RC
ZWdpbiwgZW5kIC0gaG9zdEJlZ2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoYnVm
ZmVyLmF0RW5kKCkpOworICAgIGhvc3QudmFsdWUgPSBTdHJpbmcoaG9zdEJlZ2luLCBidWZmZXIu
cG9zaXRpb24oKSAtIGhvc3RCZWdpbik7CisgICAgcmV0dXJuIGhvc3Q7CiB9CiAKLWJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdp
biwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gT3B0aW9uYWw8U3RyaW5nPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVBhdGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIp
CiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBhdGguaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsKICAgICAK
LSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIs
IGlzUGF0aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdp
biA9IGJ1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1Bh
dGhDb21wb25lbnRDaGFyYWN0ZXI+KGJ1ZmZlcik7CiAgICAgLy8gcGF0aC90by9maWxlLmpzP3F1
ZXJ5PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCiAgICAgLy8gICAgICAgICAgICAg
ICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgaWYgKHBvc2l0aW9uIDwg
ZW5kKQotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3RlcihtX2RpcmVj
dGl2ZU5hbWUsIFN0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pLCAqcG9zaXRpb24pOwotICAgIAot
ICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlv
biAtIGJlZ2luKSk7Ci0gICAgCi0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IGVuZCk7Ci0gICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCB8fCAoKnBvc2l0aW9uID09ICcjJyB8fCAqcG9zaXRpb24gPT0g
Jz8nKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCkpCisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVyKG1f
ZGlyZWN0aXZlTmFtZSwgU3RyaW5nKGJlZ2luLCBidWZmZXIuZW5kKCkgLSBiZWdpbiksICpidWZm
ZXIpOworCisgICAgQVNTRVJUKGJ1ZmZlci5wb3NpdGlvbigpIDw9IGJ1ZmZlci5lbmQoKSk7Cisg
ICAgQVNTRVJUKGJ1ZmZlci5hdEVuZCgpIHx8ICgqYnVmZmVyID09ICcjJyB8fCAqYnVmZmVyID09
ICc/JykpOworCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3
KGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiB9CiAKIC8vIHBvcnQgICAgICAg
ICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBPcHRpb25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3Q6OlBvcnQ+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6
OnBhcnNlUG9ydChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsK
LSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoIXBvcnQpOwotICAgIEFTU0VS
VCghcG9ydEhhc1dpbGRjYXJkKTsKKyAgICBBU1NFUlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0gYnVm
ZmVyLmVuZCgpKTsKICAgICAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5k
LCAnOicpKQorICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAn
KicpIHsKLSAgICAgICAgcG9ydCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcG9ydEhhc1dpbGRj
YXJkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJ1ZmZlci5sZW5ndGhS
ZW1haW5pbmcoKSA9PSAxICYmICpidWZmZXIgPT0gJyonKSB7CisgICAgICAgIFBvcnQgcG9ydDsK
KyAgICAgICAgcG9ydC5oYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgIHJldHVybiBwb3J0Owog
ICAgIH0KICAgICAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lw
V2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdp
biA9IGJ1ZmZlci5wb3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FT
Q0lJRGlnaXQ+KGJ1ZmZlcik7CiAgICAgCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgYm9vbCBvazsKLSAgICBpbnQgcG9ydEludCA9IGNo
YXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVnaW4sICZvayk7Ci0gICAgaWYgKHBv
cnRJbnQgPCAwIHx8IHBvcnRJbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb3J0ID0gcG9ydEludDsKLSAgICByZXR1
cm4gb2s7CisgICAgaW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGJ1
ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4sICZvayk7CisgICAgaWYgKCFvayB8fCBwb3J0SW50IDwg
MCB8fCBwb3J0SW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgUG9ydCBwb3J0OworICAgIHBvcnQudmFs
dWUgPSBwb3J0SW50OworICAgIHJldHVybiBwb3J0OwogfQogCiAvLyBNYXRjaCBCbGluaydzIGJl
aGF2aW9yIG9mIGFsbG93aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFueXdoZXJlIGluIHRo
ZSB2YWx1ZSBvZiB0aGUgbm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9lcyBub3QgbWF0Y2gg
dGhlIGJlaGF2aW9yIG9mIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVsIDMgc3BlYy4sCiAv
LyA8aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkgRmVicnVhcnkgMjAx
NikuCi1zdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKENoYXJhY3Rl
clR5cGUgYykKIHsKICAgICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcihjKSB8
fCBjID09ICc9JzsKIH0KIAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25jZS0iIG5vbmNlLXZh
bHVlICInIgogLy8gbm9uY2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1ib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIGNvbnN0IHVu
c2lnbmVkIG5vbmNlUHJlZml4TGVuZ3RoID0gNzsKLSAgICBpZiAoIVN0cmluZ1ZpZXcoYmVnaW4s
IGVuZCAtIGJlZ2luKS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIidub25jZS0iKSkKKyAg
ICBpZiAoIXNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAiJ25vbmNlLSIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW4g
KyBub25jZVByZWZpeExlbmd0aDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ob25jZVZhbHVlID0g
cG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vbmNlQ2hhcmFjdGVyPihwb3NpdGlv
biwgZW5kKTsKLSAgICBpZiAocG9zaXRpb24gPj0gZW5kIHx8IHBvc2l0aW9uID09IGJlZ2luTm9u
Y2VWYWx1ZSB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKworICAgIGF1dG8gYmVnaW5Ob25jZVZhbHVl
ID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9u
Y2VDaGFyYWN0ZXI+KGJ1ZmZlcik7CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpIHx8IGJ1ZmZlci5w
b3NpdGlvbigpID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAqYnVmZmVyICE9ICdcJycpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX25vbmNlcy5hZGQoU3RyaW5nKGJlZ2luTm9uY2VWYWx1ZSwg
cG9zaXRpb24gLSBiZWdpbk5vbmNlVmFsdWUpKTsKKyAgICBtX25vbmNlcy5hZGQoU3RyaW5nKGJl
Z2luTm9uY2VWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIgaGFzaC1hbGdvcml0
aG0gIi0iIGJhc2U2NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0gInNoYTI1NiIgLyAi
c2hhMzg0IiAvICJzaGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFMUEhBIC8gRElHSVQg
LyAiKyIgLyAiLyIgLyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgaWYgKGJlZ2luID09IGVuZCkK
KyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNv
bnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+
KHBvc2l0aW9uLCBlbmQsICdcJycpKQorICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnXCcn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0
b2dyYXBoaWNEaWdlc3QocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNy
eXB0b2dyYXBoaWNEaWdlc3QoYnVmZmVyKTsKICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wn
JykKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgKmJ1ZmZlciAhPSAnXCcnKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkgPiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lIYXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3QuaAkocmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUs
MzEgQEAgcHVibGljOgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gbV9pc05vbmU7
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCk7Ci0KLSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwg
Y29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8
dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9v
bCYgcG9ydEhhc1dpbGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgcGFyc2VI
b3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBi
b29sJiBob3N0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBw
b3J0SGFzV2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwg
Y29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBwYXRoKTsKLQotICAgIGJvb2wgcGFyc2VOb25jZVNv
dXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHN0cnVjdCBI
b3N0IHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBib29sIGhhc1dpbGRjYXJkIHsg
ZmFsc2UgfTsKKyAgICB9OworICAgIHN0cnVjdCBQb3J0IHsKKyAgICAgICAgT3B0aW9uYWw8dWlu
dDE2X3Q+IHZhbHVlOworICAgICAgICBib29sIGhhc1dpbGRjYXJkIHsgZmFsc2UgfTsKKyAgICB9
OworICAgIHN0cnVjdCBTb3VyY2UgeworICAgICAgICBTdHJpbmcgc2NoZW1lOworICAgICAgICBI
b3N0IGhvc3Q7CisgICAgICAgIFBvcnQgcG9ydDsKKyAgICAgICAgU3RyaW5nIHBhdGg7CisgICAg
fTsKIAogICAgIGJvb2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJikgY29uc3Q7
CiAKLSAgICBib29sIHBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVD
aGFyKiBlbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFy
c2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8U291cmNlPiBwYXJzZVNvdXJjZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBPcHRpb25hbDxTdHJpbmc+IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IE9wdGlvbmFsPEhvc3Q+IHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQb3J0
PiBwYXJzZVBvcnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8U3RyaW5nPiBwYXJzZVBhdGgo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgcGFyc2VIYXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4p
OwogCiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0
b3I8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402889</attachid>
            <date>2020-06-26 12:57:14 -0700</date>
            <delta_ts>2020-06-26 13:58:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213631-20200626125713.patch</filename>
            <type>text/plain</type>
            <size>75667</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA2LTI2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IENvbnRlbnRTZWN1cml0
eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAtIEFkb3B0IFN0
cmluZ1BhcnNpbmdCdWZmZXIgYWNyb3NzIENTUCBjb2RlLgorICAgICAgICAtIFJlbW92ZSBVVEYt
MTYgdXBjb252ZXJzaW9ucyBpbiBDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3QsCisgICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5TWVk
aWFMaXN0RGlyZWN0aXZlIGFuZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBFeGFjdGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
a2lwVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2Fz
ZSk6CisgICAgICAgIEFkZCBvdmVybG9hZHMgZm9yIGVhY2ggaGVscGVyIHRoYXQgdGFrZSBhIFN0
cmluZ1BhcnNpbmdCdWZmZXIuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGFzaEFsZ29yaXRobUFkdmFu
Y2luZ1Bvc2l0aW9uKToKKyAgICAgICAgQ29udmVydCB0byB1c2UgYW4gT3B0aW9uYWwgcmV0dXJu
IHZhbHVlIHJhdGhlciB0aGFuIG91dHBhcmFtZXRlciArIGJvb2wuCisKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VDcnlwdG9ncmFwaGljRGlnZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRW5jb2RlZENy
eXB0b2dyYXBoaWNEaWdlc3QpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QuaDoKKyAgICAgICAgVXNlIFN0cmluZ1BhcnNpbmdCdWZmZXIgcmF0aGVyIHRoYW4g
cmF3IHBvaW50ZXJzIGZvciBwYXJzaW5nLgorIAorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUludGVncml0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGxpdE9uU3BhY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlSW50ZWdyaXR5TWV0YWRhdGEpOgorICAgICAgICBVc2UgU3RyaW5n
UGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHJhdGhlciB0aGFuIHJh
dyBwb2ludGVycyBmb3IgcGFyc2luZy4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICBVc2UgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQg
cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bwor
ICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAgICAq
IHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VEaXJlY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBv
cnRVUkkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6c2V0Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1
cmVSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKToK
KyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Lmg6
CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6
OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3aXRjaCB0byB1c2luZyBPcHRpb25hbCBm
b3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIgdGhhbiBvdXRwYXJhbWV0ZXIgKyBib29s
LiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5seSwgcGFja2FnZSB1cCBuYW1lCisgICAg
ICAgIGFuZCB2YWx1ZSBwYWlyIGludG8gYSBuZXcgUGFyc2VkRGlyZWN0aXZlIHN0cnVjdCB0aGF0
IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG1vcmUgZWFzaWx5LgorCisgICAgICAgICogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzTWVkaWFUeXBlQ2hhcmFjdGVyKTogCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU6OnBhcnNlKToKKyAgICAgICAgVXNlIFN0
cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNl
IHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCkuCisKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzSG9zdENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1BhdGhD
b21wb25lbnRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDb250aW51YXRp
b25DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RDb2xvbk9yU2xhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTb3VyY2VMaXN0Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNjaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6
cGFyc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OnBhcnNlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc05vbmNlQ2hhcmFjdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
Tm9uY2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6cGFyc2VIYXNoU291cmNlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6CisgICAgICAgIFVzZSBTdHJpbmdQYXJzaW5nQnVmZmVy
IGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxs
IHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpLiBBbHNvIHN3
aXRjaCB0byB1c2luZyBPcHRpb25hbCBmb3IgcmV0dXJuIHZhbHVlcworICAgICAgICByYXRoZXIg
dGhhbiBvdXRwYXJhbWV0ZXIgKyBib29sLiBUbyBtYWtlIHRoaW5ncyByZWFkIG1vcmUgY2xlYW5s
eSwgcGFja2FnZSB1cCBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHZhbHVlcyBpbnRvIHN0cnVjdHMg
dGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgcmV0dXJuZWQgLyBwYXNzZWQgYXJvdW5kLgorCiAyMDIw
LTA2LTI2ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggZm9yIGNyYXNoIGluIGFjY2Vzc2liaWxpdHkvcm9sZXMtZXhwb3NlZC5odG1sIGluIGlz
b2xhdGVkIHRyZWUgbW9kZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Q
YXJzaW5nVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIGJvb2wgaXNOb3RBU0NJSVNw
YWNlKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9v
bCBpc05vdEFTQ0lJU3BhY2UoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiAhaXNBU0NJ
SVNwYWNlKGMpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci1ib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQs
IENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5
cGVuYW1lIERlbGltaXRlclR5cGU+IGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUgZGVs
aW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gZGVsaW1p
dGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw4ICs0OCwxNiBAQCBib29sIHNraXBF
eGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5
cGUpPgotYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBD
aGFyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RGVsaW1pdGVyVHlwZT4gYm9vbCBza2lwRXhhY3RseShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+JiBidWZmZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpidWZmZXIgPT0gZGVsaW1pdGVyKSB7
CisgICAgICAgICsrYnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIGNo
YXJhY3RlclByZWRpY2F0ZShDaGFyYWN0ZXJUeXBlKT4gYm9vbCBza2lwRXhhY3RseShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAg
ICBpZiAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpIHsK
ICAgICAgICAgKytwb3NpdGlvbjsKQEAgLTU5LDQ0ICs2Niw4MCBAQCBib29sIHNraXBFeGFjdGx5
KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZT4KLXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJhY3Rl
clR5cGUpPiBib29sIHNraXBFeGFjdGx5KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAm
JiBjaGFyYWN0ZXJQcmVkaWNhdGUoKmJ1ZmZlcikpIHsKKyAgICAgICAgKytidWZmZXI7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+IHZvaWQgc2tp
cFVudGlsKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKIHsKICAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQgJiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikKICAgICAgICAgKytwb3NpdGlvbjsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENo
YXJUeXBlKT4KLXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0
IENoYXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBEZWxpbWl0ZXJUeXBlPgordm9pZCBza2lwVW50aWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiYgYnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICB3aGls
ZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyICE9IGRlbGltaXRl
cikKKyAgICAgICAgKytidWZmZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJhY3RlclR5cGUpPiB2b2lkIHNraXBVbnRp
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCkKIHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgq
cG9zaXRpb24pKQogICAgICAgICArK3Bvc2l0aW9uOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgotdm9pZCBza2lwV2hp
bGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJh
Y3RlclR5cGUpPiB2b2lkIHNraXBVbnRpbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCit7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgqYnVmZmVyKSkKKyAgICAgICAgKytidWZmZXI7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGlj
YXRlKENoYXJhY3RlclR5cGUpPiB2b2lkIHNraXBXaGlsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
cG9zaXRpb24sIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocG9zaXRp
b24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCiAgICAgICAgICsrcG9z
aXRpb247CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclBy
ZWRpY2F0ZShDaGFyVHlwZSk+Ci12b2lkIHJldmVyc2VTa2lwV2hpbGUoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIHN0YXJ0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhcmFjdGVyVHlwZSk+IHZvaWQg
c2tpcFdoaWxlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3sK
KyAgICB3aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBjaGFyYWN0ZXJQ
cmVkaWNhdGUoKmJ1ZmZlcikpCisgICAgICAgICsrYnVmZmVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyYWN0ZXJUeXBl
KT4gdm9pZCByZXZlcnNlU2tpcFdoaWxlKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwg
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3RhcnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0
YXJ0ICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQogICAgICAgICAtLXBvc2l0aW9u
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNh
c2VMZXR0ZXJzTGVuZ3RoPgotYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNhc2VMZXR0ZXJzQXJy
YXlTaXplPiBib29sIHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzQXJyYXlTaXplXSkKIHsKKyAgICBjb25z
dGV4cHIgYXV0byBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoID0gbG93ZXJjYXNlTGV0dGVyc0FycmF5
U2l6ZSAtIDE7CisgICAgCiAgICAgaWYgKHBvc2l0aW9uICsgbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCwgbG93
ZXJjYXNlTGV0dGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwb3NpdGlvbiArPSBs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgYm9vbCBy
ZXN1bHQgPSBXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBsb3dl
cmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNlTGV0dGVycyk7Ci0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgcG9zaXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWdu
ZWQgbG93ZXJjYXNlTGV0dGVyc0FycmF5U2l6ZT4gYm9vbCBza2lwRXhhY3RseUlnbm9yaW5nQVND
SUlDYXNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgY29uc3Qg
Y2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNBcnJheVNpemVdKQorewor
ICAgIGNvbnN0ZXhwciBhdXRvIGxvd2VyY2FzZUxldHRlcnNMZW5ndGggPSBsb3dlcmNhc2VMZXR0
ZXJzQXJyYXlTaXplIC0gMTsKKworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCBs
b3dlcmNhc2VMZXR0ZXJzTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFX
VEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJ1ZmZlci5wb3NpdGlvbigpLCBsb3dl
cmNhc2VMZXR0ZXJzTGVuZ3RoLCBsb3dlcmNhc2VMZXR0ZXJzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJ1ZmZlciArPSBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoOworICAgIHJldHVybiB0
cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcAkocmV2aXNp
b24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwNCArMzAsOTYgQEAKICNpbmNsdWRl
IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5n
UG9zaXRpb24oY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtJiBhbGdvcml0
aG0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8UmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0+IHBhcnNlSGFzaEFsZ29yaXRobUFk
dmFuY2luZ1Bvc2l0aW9uKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZl
cikKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgd2l0aCBhIGxv
b2t1cCB0YWJsZSBvZiBwYWlycyBvZiBsYWJlbCAvIGFsZ29yaXRobSBlbnVtIHZhbHVlcywgYnV0
IEkgY2FuJ3QKICAgICAvLyBmaWd1cmUgb3V0IGhvdyB0byBrZWVwIHRoZSBsYWJlbHMgY29tcGls
ZXRpbWUgc3RyaW5ncyBmb3Igc2tpcEV4YWN0bHlJZ25vcmluZ0FTQ0lJQ2FzZS4KIAotICAgIGlm
IChza2lwRXhhY3RseUlnbm9yaW5nQVNDSUlDYXNlKHBvc2l0aW9uLCBlbmQsICJzaGEyNTYiKSkg
ewotICAgICAgICBhbGdvcml0aG0gPSBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29y
aXRobTo6U0hBMjU2OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UocG9zaXRpb24sIGVuZCwgInNoYTM4NCIpKSB7Ci0gICAg
ICAgIGFsZ29yaXRobSA9IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpT
SEEzODQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgZW5kLCAic2hhNTEyIikpIHsKLSAgICAgICAgYWxn
b3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTUxMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwRXhhY3RseUlnbm9yaW5n
QVNDSUlDYXNlKGJ1ZmZlciwgInNoYTI1NiIpKQorICAgICAgICByZXR1cm4gUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG06OlNIQTI1NjsKKyAgICBpZiAoc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShidWZmZXIsICJzaGEzODQiKSkKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEEzODQ7CisgICAgaWYgKHNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAic2hhNTEyIikpCisgICAgICAgIHJldHVy
biBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobTo6U0hBNTEyOwogCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGNvbnN0IENoYXJhY3RlclR5
cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0SW1wbChTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICBp
ZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYg
KCFwYXJzZUhhc2hBbGdvcml0aG1BZHZhbmNpbmdQb3NpdGlvbihwb3NpdGlvbiwgZW5kLCBhbGdv
cml0aG0pKQorICAgIGF1dG8gYWxnb3JpdGhtID0gcGFyc2VIYXNoQWxnb3JpdGhtQWR2YW5jaW5n
UG9zaXRpb24oYnVmZmVyKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRp
b24sIGVuZCwgJy0nKSkKKyAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJy0nKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGJlZ2lu
SGFzaFZhbHVlID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFz
ZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotICAgIHNraXBFeGFjdGx5
PENoYXJhY3RlclR5cGU+KHBvc2l0aW9uLCBlbmQsICc9Jyk7Ci0gICAgc2tpcEV4YWN0bHk8Q2hh
cmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKKyAgICBhdXRvIGJlZ2luSGFzaFZhbHVl
ID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQmFz
ZTY0T3JCYXNlNjRVUkxDaGFyYWN0ZXI+KGJ1ZmZlcik7CisgICAgc2tpcEV4YWN0bHkoYnVmZmVy
LCAnPScpOworICAgIHNraXBFeGFjdGx5KGJ1ZmZlciwgJz0nKTsKIAotICAgIGlmIChwb3NpdGlv
biA9PSBiZWdpbkhhc2hWYWx1ZSkKKyAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVnaW5I
YXNoVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8dWlu
dDhfdD4gZGlnZXN0OwotICAgIFN0cmluZ1ZpZXcgaGFzaFZhbHVlKGJlZ2luSGFzaFZhbHVlLCBw
b3NpdGlvbiAtIGJlZ2luSGFzaFZhbHVlKTsKKyAgICBTdHJpbmdWaWV3IGhhc2hWYWx1ZShiZWdp
bkhhc2hWYWx1ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbkhhc2hWYWx1ZSk7CiAgICAgaWYg
KCFiYXNlNjREZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykp
IHsKICAgICAgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoaGFzaFZhbHVlLCBkaWdlc3QpKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICByZXR1cm4gUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBXVEZNb3ZlKGRpZ2VzdCkgfTsKKyAg
ICByZXR1cm4gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgKmFsZ29yaXRobSwgV1RGTW92
ZShkaWdlc3QpIH07CiB9CiAKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
cGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IFVDaGFyKiYgYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQogewotICAg
IHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJl
dHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFs
PFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KGNv
bnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5n
QnVmZmVyPExDaGFyPiYgYnVmZmVyKQogewotICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNE
aWdlc3RJbXBsKGJlZ2luLCBlbmQpOworICAgIHJldHVybiBwYXJzZUNyeXB0b2dyYXBoaWNEaWdl
c3RJbXBsKGJ1ZmZlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VF
bmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0
aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdEltcGwoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisg
ICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRo
bTsKLSAgICBpZiAoIXBhcnNlSGFzaEFsZ29yaXRobUFkdmFuY2luZ1Bvc2l0aW9uKHBvc2l0aW9u
LCBlbmQsIGFsZ29yaXRobSkpCisgICAgYXV0byBhbGdvcml0aG0gPSBwYXJzZUhhc2hBbGdvcml0
aG1BZHZhbmNpbmdQb3NpdGlvbihidWZmZXIpOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJU
eXBlPihwb3NpdGlvbiwgZW5kLCAnLScpKQorICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAn
LScpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYmVnaW5IYXNoVmFsdWUgPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
c2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz0nKTsKLSAgICBza2lw
RXhhY3RseTxDaGFyYWN0ZXJUeXBlPihwb3NpdGlvbiwgZW5kLCAnPScpOworICAgIGF1dG8gYmVn
aW5IYXNoVmFsdWUgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVy
VHlwZSwgaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3Rlcj4oYnVmZmVyKTsKKyAgICBza2lwRXhh
Y3RseShidWZmZXIsICc9Jyk7CisgICAgc2tpcEV4YWN0bHkoYnVmZmVyLCAnPScpOwogCi0gICAg
aWYgKHBvc2l0aW9uID09IGJlZ2luSGFzaFZhbHVlKQorICAgIGlmIChidWZmZXIucG9zaXRpb24o
KSA9PSBiZWdpbkhhc2hWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IHsgYWxnb3JpdGhtLCBT
dHJpbmcoYmVnaW5IYXNoVmFsdWUsIHBvc2l0aW9uIC0gYmVnaW5IYXNoVmFsdWUpIH07CisgICAg
cmV0dXJuIEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgeyAqYWxnb3JpdGhtLCBT
dHJpbmcoYmVnaW5IYXNoVmFsdWUsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5IYXNoVmFsdWUp
IH07CiB9CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBh
cnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCkKK09wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNE
aWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgTENoYXIq
JiBiZWdpbiwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gcGFyc2VFbmNvZGVkQ3J5
cHRvZ3JhcGhpY0RpZ2VzdEltcGwoYmVnaW4sIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlRW5jb2Rl
ZENyeXB0b2dyYXBoaWNEaWdlc3RJbXBsKGJ1ZmZlcik7CiB9CiAKIE9wdGlvbmFsPFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBlbmNvZGVkRGln
ZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QuaAkocmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niwx
MSArNjYsMTEgQEAgc3RydWN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlcwogICAg
IFN0cmluZyBkaWdlc3Q7CiB9OwogCi1PcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3Q+IHBhcnNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBVQ2hhciomIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kKTsKLU9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VD
cnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFyKiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQp
OworT3B0aW9uYWw8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUNyeXB0b2dyYXBo
aWNEaWdlc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKK09wdGlvbmFsPFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VDcnlwdG9ncmFwaGljRGlnZXN0KFN0cmluZ1BhcnNp
bmdCdWZmZXI8TENoYXI+Jik7CiAKLU9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgVUNoYXIqJiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7Ci1PcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KGNvbnN0IExDaGFy
KiYgYmVnaW4sIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQ
YXJzaW5nQnVmZmVyPFVDaGFyPiYpOworT3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzdChTdHJpbmdQYXJzaW5n
QnVmZmVyPExDaGFyPiYpOwogCiBPcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3VicmVzb3VyY2VJbnRlZ3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUludGVncml0eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHBvc2l0aW9uLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIC8vIEluaXRp
YWxpemUgaGFzaGVzIHRvIGJlIHNvbWV0aGluZyBvdGhlciBXVEY6Om51bGxvcHQsIHRvIGluZGlj
YXRlCiAgICAgICAgIC8vIHRoYXQgYXQgbGVhc3Qgb25lIHRva2VuIHdhcyBzZWVuLCBhbmQgdGh1
cyBzZXR0aW5nIHRoZSBlbXB0eSBmbGFnCkBAIC01OCwxOSArNTksMTkgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIW1fZGlnZXN0cykKICAgICAgICAgICAgIG1fZGlnZXN0cyA9IFZlY3RvcjxFbmNv
ZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiB7IH07CiAKLSAgICAgICAgYXV0byBkaWdl
c3QgPSBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXN0KHBvc2l0aW9uLCBlbmQpOworICAg
ICAgICBhdXRvIGRpZ2VzdCA9IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlc3QoYnVmZmVy
KTsKICAgICAgICAgaWYgKCFkaWdlc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgLy8gVGhlIHNwZWMgYWxsb3dzIGZvciBvcHRpb25zIGZvbGxvd2luZyB0aGUgZGlnZXN0
LCBidXQgc28gZmFyLCBubwogICAgICAgICAvLyBzcGVjaWZpYyBvcHRpb25zIGhhdmUgYmVlbiBz
cGVjaWZpZWQuIFRodXMsIHdlIGp1c3QgcGFyc2UgYW5kIGlnbm9yZQogICAgICAgICAvLyB0aGVt
LiBUaGVpciBzeW50YXggaXMgYSAnPycgZm9sbG93IGJ5IGFueSBudW1iZXIgb2YgVkNIQVJzLgot
ICAgICAgICBpZiAoc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZT4ocG9zaXRpb24sIGVuZCwgJz8n
KSkKLSAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihwb3NpdGlv
biwgZW5kKTsKKyAgICAgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwgJz8nKSkKKyAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1ZDSEFSPihidWZmZXIpOwogCiAgICAgICAg
IC8vIEFmdGVyIHRoZSBiYXNlNjQgdmFsdWUgYW5kIG9wdGlvbnMsIHRoZSBjdXJyZW50IGNoYXJh
Y3RlciBwb2ludGVkIHRvIGJ5IHBvc2l0aW9uCiAgICAgICAgIC8vIHNob3VsZCBlaXRoZXIgYmUg
dGhlIGVuZCBvciBhIHNwYWNlLgotICAgICAgICBpZiAocG9zaXRpb24gIT0gZW5kICYmICFpc0hU
TUxTcGFjZSgqcG9zaXRpb24pKQorICAgICAgICBpZiAoIWJ1ZmZlci5hdEVuZCgpICYmICFpc0hU
TUxTcGFjZSgqYnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBt
X2RpZ2VzdHMtPmFwcGVuZChXVEZNb3ZlKCpkaWdlc3QpKTsKQEAgLTg0LDE3ICs4NSwxNCBAQCBw
cml2YXRlOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RnVuY3Rvcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdE9uU3BhY2VzKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZ1bmN0b3ImJiBmdW5jdG9y
KQorc3RhdGljIGlubGluZSB2b2lkIHNwbGl0T25TcGFjZXMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiBidWZmZXIsIEZ1bmN0b3ImJiBmdW5jdG9yKQogewotICAgIGNvbnN0IENo
YXJhY3RlclR5cGUqIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5
cGUsIGlzSFRNTFNwYWNlPihidWZmZXIpOwogCi0gICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzSFRNTFNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVu
ZCkgewotICAgICAgICBpZiAoIWZ1bmN0b3IocG9zaXRpb24sIGVuZCkpCi0gICAgICAgICAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RIVE1MU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
Ci0gICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4ocG9zaXRpb24s
IGVuZCk7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAg
ICAgICAgaWYgKCFmdW5jdG9yKGJ1ZmZlcikpCisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFj
dGVyVHlwZSwgaXNOb3RIVE1MU3BhY2U+KGJ1ZmZlcik7CisgICAgICAgIHNraXBXaGlsZTxDaGFy
YWN0ZXJUeXBlLCBpc0hUTUxTcGFjZT4oYnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTEwNSwxMSAr
MTAzLDEwIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8RW5jb2RlZFJlc291cmNlQ3IKIAogICAg
IE9wdGlvbmFsPFZlY3RvcjxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Pj4gcmVz
dWx0OwogICAgIAotICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwgPSAqaW50ZWdyaXR5
TWV0YWRhdGEuaW1wbCgpOwotICAgIGlmIChzdHJpbmdJbXBsLmlzOEJpdCgpKQotICAgICAgICBz
cGxpdE9uU3BhY2VzKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSwgc3RyaW5nSW1wbC5jaGFyYWN0
ZXJzOCgpICsgc3RyaW5nSW1wbC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8TENo
YXI+IHsgcmVzdWx0IH0pOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXRPblNwYWNlcyhzdHJpbmdJ
bXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpICsgc3RyaW5nSW1w
bC5sZW5ndGgoKSwgSW50ZWdyaXR5TWV0YWRhdGFQYXJzZXI8VUNoYXI+IHsgcmVzdWx0IH0pOwor
ICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhpbnRlZ3JpdHlNZXRhZGF0YSwgWyZyZXN1bHRd
IChhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUg
ZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKyAgICAgICAgc3BsaXRPblNwYWNlcyhi
dWZmZXIsIEludGVncml0eU1ldGFkYXRhUGFyc2VyPENoYXJhY3RlclR5cGU+IHsgcmVzdWx0IH0p
OworICAgIH0pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkocmV2aXNpb24gMjYz
NTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogCkBAIC0yMTIsMjIgKzIx
MywyMyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2ZUhlCiAgICAgLy8g
UkZDMjYxNiwgc2VjdGlvbiA0LjIgc3BlY2lmaWVzIHRoYXQgaGVhZGVycyBhcHBlYXJpbmcgbXVs
dGlwbGUgdGltZXMgY2FuCiAgICAgLy8gYmUgY29tYmluZWQgd2l0aCBhIGNvbW1hLiBXYWxrIHRo
ZSBoZWFkZXIgc3RyaW5nLCBhbmQgcGFyc2UgZWFjaCBjb21tYQogICAgIC8vIHNlcGFyYXRlZCBj
aHVuayBhcyBhIHNlcGFyYXRlIGhlYWRlci4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KGhlYWRlcikudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGJl
Z2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyBoZWFkZXIubGVuZ3RoKCk7Ci0gICAgd2hpbGUg
KHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24sIGVu
ZCwgJywnKTsKLQotICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQotICAgICAg
ICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgIF4KLSAgICAgICAgbV9wb2xpY2llcy5hcHBl
bmQoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlLCBwb2xpY3lGcm9tKSk7Ci0KLSAgICAg
ICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUgbmV4dCBoZWFkZXIgZnJvbSB0aGUg
Y3VycmVudCBwb3NpdGlvbi4KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9z
aXRpb24gPT0gJywnKTsKLSAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQs
ICcsJyk7Ci0gICAgICAgIGJlZ2luID0gcG9zaXRpb247Ci0gICAgfQorICAgIHJlYWRDaGFyYWN0
ZXJzRm9yUGFyc2luZyhoZWFkZXIsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICBhdXRvIGJl
Z2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgCisgICAgICAgIHdoaWxlIChidWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBza2lwVW50aWwoYnVmZmVyLCAn
LCcpOworCisgICAgICAgICAgICAvLyBoZWFkZXIxLGhlYWRlcjIgT1IgaGVhZGVyMQorICAgICAg
ICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICBtX3BvbGlj
aWVzLmFwcGVuZChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRo
aXMsIFN0cmluZyhiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbiksIHR5cGUsIHBvbGlj
eUZyb20pKTsKKworICAgICAgICAgICAgLy8gU2tpcCB0aGUgY29tbWEsIGFuZCBiZWdpbiB0aGUg
bmV4dCBoZWFkZXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIEFTU0VS
VChidWZmZXIuYXRFbmQoKSB8fCAqYnVmZmVyID09ICcsJyk7CisgICAgICAgICAgICBza2lwRXhh
Y3RseShidWZmZXIsICcsJyk7CisgICAgICAgICAgICBiZWdpbiA9IGJ1ZmZlci5wb3NpdGlvbigp
OworICAgICAgICB9CisgICAgfSk7CisgICAgCiAKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KQogICAgICAgICBhcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAJKHJldmlzaW9uIDI2MzU3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTYgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eUNvbnRl
eHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKFVD
aGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0Rp
cmVjdGl2ZU5hbWVDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBpc0FT
Q0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOwogfQogCi1zdGF0aWMgYm9vbCBpc0RpcmVj
dGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUg
YykKIHsKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMpIHx8IChjID49IDB4MjEgJiYgYyA8PSAw
eDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CkBAIC0zMzMsMjI0ICszMzQsMjE4IEBAIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDoKICAgICBpZiAocG9saWN5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5n
Vmlldyhwb2xpY3kpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBw
b3NpdGlvbiA9IGNoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsg
cG9saWN5Lmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBkaXJlY3RpdmVCZWdpbiA9IHBvc2l0aW9uOwotICAgICAgICBza2lwVW50
aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUsIHZh
bHVlOwotICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4sIHBvc2l0aW9u
LCBuYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xp
Y3lGcm9tOjpJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6dXBncmFk
ZUluc2VjdXJlUmVxdWVzdHMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBv
bGljeUZyb206OkhUVFBFcXVpdk1ldGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
c2FuZGJveCkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKQotICAg
ICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZUFuY2VzdG9ycykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluSFRUUEVxdWl2TWV0
YShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgcmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHBvbGljeSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGRpcmVj
dGl2ZUJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBza2lwVW50aWwoYnVm
ZmVyLCAnOycpOworCisgICAgICAgICAgICBpZiAoYXV0byBkaXJlY3RpdmUgPSBwYXJzZURpcmVj
dGl2ZShTdHJpbmdQYXJzaW5nQnVmZmVyIHsgZGlyZWN0aXZlQmVnaW4sIGJ1ZmZlci5wb3NpdGlv
bigpIH0pKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFkaXJlY3RpdmUtPm5hbWUuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlBvbGljeUZyb206OkluaGVyaXRlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGlj
eUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tOjpIVFRQRXF1aXZNZXRh
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNhbmRib3gp
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS0+bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVS
SSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGly
ZWN0aXZlLT5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVB
bmNlc3RvcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZh
bGlkRGlyZWN0aXZlSW5IVFRQRXF1aXZNZXRhKGRpcmVjdGl2ZS0+bmFtZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9saWN5RnJvbSA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlBv
bGljeUZyb206OkluaGVyaXRlZEZvclBsdWdpbkRvY3VtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUtPm5hbWUsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpwbHVnaW5UeXBlcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmICFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS0+bmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnJlcG9ydFVSSSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKHBvbGljeUZyb20gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpQb2xpY3lGcm9t
OjpJbmhlcml0ZWRGb3JQbHVnaW5Eb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlmICghZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6cGx1Z2luVHlwZXMpCi0gICAgICAgICAgICAgICAgICAgICYmICFlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBv
cnRVUkkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBh
ZGREaXJlY3RpdmUoV1RGTW92ZSgqZGlyZWN0aXZlKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwotICAgICAgICB9CiAKLSAgICAgICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKLSAgICAgICAgc2tpcEV4
YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc7Jyk7Ci0gICAgfQorICAgICAgICAgICAgQVNT
RVJUKGJ1ZmZlci5hdEVuZCgpIHx8ICpidWZmZXIgPT0gJzsnKTsKKyAgICAgICAgICAgIHNraXBF
eGFjdGx5KGJ1ZmZlciwgJzsnKTsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiAvLyBkaXJlY3Rp
dmUgICAgICAgICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUg
XSBdCiAvLyBkaXJlY3RpdmUtbmFtZSAgICA9IDEqKCBBTFBIQSAvIERJR0lUIC8gIi0iICkKIC8v
IGRpcmVjdGl2ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZDSEFSIGV4Y2VwdCAiOyI+ICkKIC8vCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNv
bnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYXV0byBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShTdHJpbmdQYXJzaW5nQnVm
ZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikgLT4gT3B0aW9uYWw8UGFyc2VkRGlyZWN0aXZlPgog
ewotICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzRW1wdHko
KSk7Ci0KLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8
VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzQVNDSUlTcGFjZT4oYnVmZmVyKTsKIAogICAgIC8vIEVtcHR5IGRpcmVjdGl2
ZSAoZS5nLiAiOzs7IikuIEV4aXQgZWFybHkuCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlv
bjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9zaXRp
b24sIGVuZCk7CisgICAgYXV0byBuYW1lQmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICBz
a2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyPihidWZmZXIp
OwogCiAgICAgLy8gVGhlIGRpcmVjdGl2ZS1uYW1lIG11c3QgYmUgbm9uLWVtcHR5LgotICAgIGlm
IChuYW1lQmVnaW4gPT0gcG9zaXRpb24pIHsKLSAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05v
dEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1
cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5hbWVCZWdpbiA9PSBidWZmZXIucG9z
aXRpb24oKSkgeworICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNOb3RBU0NJSVNw
YWNlPihidWZmZXIpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2
ZShTdHJpbmcobmFtZUJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIG5hbWVCZWdpbikpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIG5hbWUgPSBTdHJpbmcobmFt
ZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbik7CisgICAgYXV0byBuYW1lID0gU3RyaW5nKG5h
bWVCZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBuYW1lQmVnaW4pOwogCi0gICAgaWYgKHBvc2l0
aW9uID09IGVuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgp
KQorICAgICAgICByZXR1cm4gUGFyc2VkRGlyZWN0aXZlIHsgV1RGTW92ZShuYW1lKSwgeyB9IH07
CiAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBl
bmQpKSB7Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlv
biwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3Ry
aW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSVNwYWNlPihi
dWZmZXIpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3Bh
Y2U+KGJ1ZmZlcik7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZl
KFN0cmluZyhuYW1lQmVnaW4sIGJ1ZmZlci5wb3NpdGlvbigpIC0gbmFtZUJlZ2luKSk7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBp
c0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBl
LCBpc0FTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAgICBjb25zdCBVQ2hhciogdmFsdWVCZWdpbiA9
IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3Rl
cj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byB2YWx1ZUJlZ2luID0gYnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0
ZXI+KGJ1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKSB7Ci0gICAgICAgIG1fcG9s
aWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihuYW1lLCBTdHJpbmcodmFs
dWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFidWZmZXIuYXRFbmQoKSkgeworICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkRGly
ZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZhbHVlQmVnaW4sIGJ1ZmZlci5lbmQo
KSAtIHZhbHVlQmVnaW4pKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
ICAgICAvLyBUaGUgZGlyZWN0aXZlLXZhbHVlIG1heSBiZSBlbXB0eS4KLSAgICBpZiAodmFsdWVC
ZWdpbiA9PSBwb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZhbHVlQmVn
aW4gPT0gYnVmZmVyLnBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBQYXJzZWREaXJlY3RpdmUg
eyBXVEZNb3ZlKG5hbWUpLCB7IH0gfTsKIAotICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlQmVnaW4s
IHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byB2YWx1
ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAtIHZhbHVlQmVnaW4pOwor
ICAgIHJldHVybiBQYXJzZWREaXJlY3RpdmUgeyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVl
KSB9OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNl
UmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkoUGFyc2Vk
RGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAgIGlmICghbV9yZXBvcnRVUklzLmlzRW1wdHko
KSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7Cisg
ICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUubmFtZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9z
aXRpb24gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHZh
bHVlLmxlbmd0aCgpOworICAgIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhkaXJlY3RpdmUudmFs
dWUsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlw
ZW5hbWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKIAotICAgIHdoaWxlIChwb3Np
dGlvbiA8IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9z
aXRpb24sIGVuZCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAg
ICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAg
ICAgICAgY29uc3QgVUNoYXIqIHVybEJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBXaGls
ZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIGF1
dG8gdXJsQmVnaW4gPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBXaGlsZTxD
aGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAgICAgICAgaWYgKHVy
bEJlZ2luIDwgcG9zaXRpb24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKHZhbHVl
LnN1YnN0cmluZyh1cmxCZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0gdXJsQmVnaW4pKTsK
LSAgICB9CisgICAgICAgICAgICBpZiAodXJsQmVnaW4gPCBidWZmZXIucG9zaXRpb24oKSkKKyAg
ICAgICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKGRpcmVjdGl2ZS52YWx1ZS5zdWJzdHJp
bmcodXJsQmVnaW4gLSBiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSB1cmxCZWdpbikpOworICAg
ICAgICB9CisgICAgfSk7CiB9CiAKIAogdGVtcGxhdGU8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlwZT4K
LXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRy
PENTUERpcmVjdGl2ZVR5cGU+JiBkaXJlY3RpdmUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZShQYXJzZWREaXJlY3RpdmUmJiBkaXJlY3Rp
dmUsIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYgZXhpc3RpbmdEaXJlY3RpdmUp
CiB7Ci0gICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7CisgICAgaWYgKGV4aXN0aW5nRGlyZWN0aXZlKSB7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUubmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgZGlyZWN0aXZlID0gbWFrZVVuaXF1ZTxDU1BEaXJlY3Rp
dmVUeXBlPigqdGhpcywgbmFtZSwgdmFsdWUpOworICAgIGV4aXN0aW5nRGlyZWN0aXZlID0gbWFr
ZVVuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPigqdGhpcywgV1RGTW92ZShkaXJlY3RpdmUubmFtZSks
IFdURk1vdmUoZGlyZWN0aXZlLnZhbHVlKSk7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6YXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzYW5kYm94UG9saWN5KQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3koUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0
aXZlKQogewogICAgIGlmIChtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0
SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUobmFtZSk7CisgICAgICAgIG1fcG9saWN5
LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKGRpcmVjdGl2ZS5uYW1lKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9oYXZlU2FuZGJveFBvbGljeSkgewot
ICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShkaXJlY3RpdmUubmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXZlU2FuZGJveFBvbGljeSA9IHRydWU7CiAgICAg
U3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xpY3kuZW5mb3JjZVNhbmRib3hGbGFncyhT
ZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeShzYW5kYm94UG9saWN5LCBpbnZhbGlk
VG9rZW5zKSk7CisgICAgbV9wb2xpY3kuZW5mb3JjZVNhbmRib3hGbGFncyhTZWN1cml0eUNvbnRl
eHQ6OnBhcnNlU2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2ZS52YWx1ZSksIGludmFsaWRU
b2tlbnMpKTsKICAgICBpZiAoIWludmFsaWRUb2tlbnMuaXNOdWxsKCkpCiAgICAgICAgIG1fcG9s
aWN5LnJlcG9ydEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7CiB9CiAKLXZvaWQg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0VXBncmFkZUluc2VjdXJlUmVx
dWVzdHMoY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpzZXRVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0cyhQYXJzZWREaXJlY3RpdmUmJiBk
aXJlY3RpdmUpCiB7CiAgICAgaWYgKG1fcmVwb3J0T25seSkgewotICAgICAgICBtX3BvbGljeS5y
ZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsKKyAgICAgICAgbV9w
b2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZUluUmVwb3J0T25seU1vZGUoV1RGTW92ZShkaXJl
Y3RpdmUubmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX3VwZ3JhZGVJ
bnNlY3VyZVJlcXVlc3RzKSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVj
dGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKFdU
Rk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3Vw
Z3JhZGVJbnNlY3VyZVJlcXVlc3RzID0gdHJ1ZTsKICAgICBtX3BvbGljeS5zZXRVcGdyYWRlSW5z
ZWN1cmVSZXF1ZXN0cyh0cnVlKTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRCbG9ja0Fs
bE1peGVkQ29udGVudEVuYWJsZWQoUGFyc2VkRGlyZWN0aXZlJiYgZGlyZWN0aXZlKQogewogICAg
IGlmIChtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50RGlyZWN0aXZlKSB7Ci0gICAgICAgIG1fcG9s
aWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVw
b3J0RHVwbGljYXRlRGlyZWN0aXZlKFdURk1vdmUoZGlyZWN0aXZlLm5hbWUpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX2hhc0Jsb2NrQWxsTWl4ZWRDb250ZW50RGlyZWN0aXZlID0g
dHJ1ZTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGRE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGREaXJlY3RpdmUoUGFyc2VkRGly
ZWN0aXZlJiYgZGlyZWN0aXZlKQogewotICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOworICAg
IEFTU0VSVCghZGlyZWN0aXZlLm5hbWUuaXNFbXB0eSgpKTsKIAotICAgIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpk
ZWZhdWx0U3JjKSkgewotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZGVmYXVsdFNyYyk7CisgICAg
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpkZWZhdWx0U3JjKSkgeworICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShk
aXJlY3RpdmUpLCBtX2RlZmF1bHRTcmMpOwogICAgICAgICBtX3BvbGljeS5hZGRIYXNoQWxnb3Jp
dGhtc0ZvcklubGluZVNjcmlwdHMobV9kZWZhdWx0U3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7
CiAgICAgICAgIG1fcG9saWN5LmFkZEhhc2hBbGdvcml0aG1zRm9ySW5saW5lU3R5bGVzaGVldHMo
bV9kZWZhdWx0U3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpzY3JpcHRTcmMpKSB7Ci0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9zY3JpcHRTcmMpOwor
ICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYykpIHsKKyAgICAgICAg
c2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+
KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9zY3JpcHRTcmMpOwogICAgICAgICBtX3BvbGljeS5hZGRI
YXNoQWxnb3JpdGhtc0ZvcklubGluZVNjcmlwdHMobV9zY3JpcHRTcmMtPmhhc2hBbGdvcml0aG1z
VXNlZCgpKTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnN0eWxlU3JjKSkgewotICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
bmFtZSwgdmFsdWUsIG1fc3R5bGVTcmMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OnN0eWxlU3JjKSkgeworICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX3N0eWxlU3Jj
KTsKICAgICAgICAgbV9wb2xpY3kuYWRkSGFzaEFsZ29yaXRobXNGb3JJbmxpbmVTdHlsZXNoZWV0
cyhtX3N0eWxlU3JjLT5oYXNoQWxnb3JpdGhtc1VzZWQoKSk7Ci0gICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpvYmplY3RTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fb2JqZWN0U3JjKTsKLSAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZU5hbWVzOjpmcmFtZVNyYykpIHsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpvYmplY3RTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX29i
amVjdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUu
bmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lU3JjKSkgewog
ICAgICAgICAvLyBGSVhNRTogTG9nIHRvIGNvbnNvbGUgIlRoZSBmcmFtZS1zcmMgZGlyZWN0aXZl
IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgY2hpbGQtc3JjIGRpcmVjdGl2ZSBpbnN0ZWFkLiIKICAg
ICAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
NzczPi4KLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2ZyYW1lU3JjKTsKLSAgICB9IGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OmltZ1NyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9pbWdTcmMpOwotICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTmFtZXM6OmZvbnRTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZm9u
dFNyYyk7CisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVTcmMpOworICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmltZ1NyYykpCisgICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRp
cmVjdGl2ZSksIG1faW1nU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9u
dFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1fZm9udFNyYyk7CiAjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1hbmlmZXN0
U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21hbmlmZXN0U3JjKTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6bWFuaWZlc3RTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3Rp
dmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJl
Y3RpdmUpLCBtX21hbmlmZXN0U3JjKTsKICNlbmRpZgotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6Om1l
ZGlhU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21lZGlhU3JjKTsKLSAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZU5hbWVzOjpjb25uZWN0U3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Nvbm5lY3RT
cmMpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjKSkKLSAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZh
bHVlLCBtX2NoaWxkU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3JtQWN0aW9uKSkKLSAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Zvcm1BY3Rpb24pOwotICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6
OmJhc2VVUkkpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fYmFzZVVSSSk7Ci0gICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVOYW1lczo6ZnJhbWVBbmNlc3RvcnMpKSB7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6Om1lZGlhU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9tZWRpYVNy
Yyk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNvbm5lY3RTcmMpKQorICAgICAg
ICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBtX2Nvbm5lY3RTcmMpOworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZU5hbWVzOjpjaGlsZFNyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2ZSksIG1f
Y2hpbGRTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZl
Lm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3JtQWN0aW9uKSkK
KyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmU+KFdURk1vdmUoZGlyZWN0aXZlKSwgbV9mb3JtQWN0aW9uKTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6YmFzZVVSSSkpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZNb3ZlKGRpcmVjdGl2
ZSksIG1fYmFzZVVSSSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkaXJl
Y3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5j
ZXN0b3JzKSkgewogICAgICAgICBpZiAobV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlSW5SZXBvcnRPbmx5TW9kZShuYW1lKTsKKyAgICAg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWREaXJlY3RpdmVJblJlcG9ydE9ubHlNb2RlKGRp
cmVjdGl2ZS5uYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBz
ZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4o
bmFtZSwgdmFsdWUsIG1fZnJhbWVBbmNlc3RvcnMpOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
cGx1Z2luVHlwZXMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVudFNlY3VyaXR5UG9s
aWN5TWVkaWFMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9wbHVnaW5UeXBlcyk7Ci0gICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkpCi0gICAgICAgIGFwcGx5U2FuZGJveFBvbGljeShu
YW1lLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6cmVwb3J0VVJJKSkKLSAgICAgICAg
cGFyc2VSZXBvcnRVUkkobmFtZSwgdmFsdWUpOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnVwZ3Jh
ZGVJbnNlY3VyZVJlcXVlc3RzKSkKLSAgICAgICAgc2V0VXBncmFkZUluc2VjdXJlUmVxdWVzdHMo
bmFtZSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6YmxvY2tBbGxNaXhlZENvbnRlbnQpKQotICAg
ICAgICBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQobmFtZSk7CisgICAgICAgIHNldENT
UERpcmVjdGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihXVEZN
b3ZlKGRpcmVjdGl2ZSksIG1fZnJhbWVBbmNlc3RvcnMpOworICAgIH0gZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTmFtZXM6OnBsdWdpblR5cGVzKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRl
bnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4oV1RGTW92ZShkaXJlY3RpdmUpLCBt
X3BsdWdpblR5cGVzKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpcmVj
dGl2ZS5uYW1lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2FuZGJveCkp
CisgICAgICAgIGFwcGx5U2FuZGJveFBvbGljeShXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpyZXBvcnRVUkkpKQorICAgICAgICBwYXJzZVJlcG9y
dFVSSShXVEZNb3ZlKGRpcmVjdGl2ZSkpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoZGlyZWN0aXZlLm5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVz
Ojp1cGdyYWRlSW5zZWN1cmVSZXF1ZXN0cykpCisgICAgICAgIHNldFVwZ3JhZGVJbnNlY3VyZVJl
cXVlc3RzKFdURk1vdmUoZGlyZWN0aXZlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShkaXJlY3RpdmUubmFtZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFt
ZXM6OmJsb2NrQWxsTWl4ZWRDb250ZW50KSkKKyAgICAgICAgc2V0QmxvY2tBbGxNaXhlZENvbnRl
bnRFbmFibGVkKFdURk1vdmUoZGlyZWN0aXZlKSk7CiAgICAgZWxzZQotICAgICAgICBtX3BvbGlj
eS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVw
b3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoV1RGTW92ZShkaXJlY3RpdmUubmFtZSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCShyZXZp
c2lvbiAyNjM1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE2ICs4OSwxOSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJiwgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpQb2xpY3lGcm9tKTsKIAotICAgIGJvb2wgcGFyc2VEaXJlY3RpdmUoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYg
dmFsdWUpOwotICAgIHZvaWQgcGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUGx1Z2luVHlwZXMoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFkZERpcmVjdGl2ZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgYXBwbHlTYW5k
Ym94UG9saWN5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzYW5kYm94UG9saWN5
KTsKLSAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKGNvbnN0IFN0cmluZyYgbmFt
ZSk7Ci0gICAgdm9pZCBzZXRCbG9ja0FsbE1peGVkQ29udGVudEVuYWJsZWQoY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICBzdHJ1Y3QgUGFyc2VkRGlyZWN0aXZlIHsKKyAgICAgICAgU3RyaW5nIG5h
bWU7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPFBhcnNlZERpcmVjdGl2ZT4gcGFyc2VEaXJlY3RpdmUo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdm9pZCBwYXJzZVJlcG9y
dFVSSShQYXJzZWREaXJlY3RpdmUmJik7CisgICAgdm9pZCBhZGREaXJlY3RpdmUoUGFyc2VkRGly
ZWN0aXZlJiYpOworICAgIHZvaWQgYXBwbHlTYW5kYm94UG9saWN5KFBhcnNlZERpcmVjdGl2ZSYm
KTsKKyAgICB2b2lkIHNldFVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzKFBhcnNlZERpcmVjdGl2ZSYm
KTsKKyAgICB2b2lkIHNldEJsb2NrQWxsTWl4ZWRDb250ZW50RW5hYmxlZChQYXJzZWREaXJlY3Rp
dmUmJik7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlwZT4KLSAgICB2b2lk
IHNldENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVUeXBlPiYpOworICAgIHZvaWQgc2V0Q1NQRGly
ZWN0aXZlKFBhcnNlZERpcmVjdGl2ZSYmLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlw
ZT4mKTsKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUqIG9w
ZXJhdGl2ZURpcmVjdGl2ZShDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
KikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAko
cmV2aXNpb24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAg
KzMxLDExIEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5o
IgogI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzTWVkaWFUeXBlQ2hhcmFjdGVyKFVD
aGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc01l
ZGlhVHlwZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJ
U3BhY2UoYykgJiYgYyAhPSAnLyc7CiB9CkBAIC01Miw2MiArNTMsNjEgQEAgYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlYwogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBh
dXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFy
KiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBiZWdpbiArIHZhbHVl
Lmxlbmd0aCgpOwotCiAgICAgLy8gJ3BsdWdpbi10eXBlcyBfX19fOycgT1IgJ3BsdWdpbi10eXBl
czsnCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBkaXJlY3RpdmVMaXN0KCku
cG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKHZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICAvLyBfX19f
XyBPUiBfX19fX21pbWUxL21pbWUxCi0gICAgICAgIC8vIF4gICAgICAgIF4KLSAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAo
cG9zaXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIG1pbWUx
L21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgIC8vIF4KLSAgICAgICAgYmVnaW4gPSBwb3NpdGlv
bjsKLSAgICAgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVND
SUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9s
aWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBi
ZWdpbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2tpcFdo
aWxlPFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgcmVh
ZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBidWZmZXIpIHsKKyAgICAgICAg
dXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKGJ1ZmZlcik6OkNoYXJhY3Rl
clR5cGU7CiAKLSAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8g
ICAgICBeCi0gICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcv
JykpIHsKLSAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJ
bnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAoYnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgLy8gX19fX18gT1IgX19fX19taW1l
MS9taW1lMQorICAgICAgICAgICAgLy8gXiAgICAgICAgXgorICAgICAgICAgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzQVNDSUlTcGFjZT4oYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChi
dWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8v
IG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgICAgICAvLyBeCisgICAgICAgICAgICBh
dXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICBpZiAoIXNraXBFeGFj
dGx5PENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihidWZmZXIpKSB7CisgICAg
ICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4oYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52
YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihidWZmZXIpOwor
CisgICAgICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMgorICAgICAgICAgICAgLy8g
ICAgICBeCisgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJy8nKSkgeworICAg
ICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc05vdEFTQ0lJU3BhY2U+KGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW4p
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgICAgIC8vICAgICAgIF4KKyAg
ICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5cGVDaGFy
YWN0ZXI+KGJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlw
ZSwgaXNOb3RBU0NJSVNwYWNlPihidWZmZXIpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZUxp
c3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBidWZm
ZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KGJ1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUy
L21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgorICAgICAgICAgICAg
Ly8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAg
XgorICAgICAgICAgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNO
b3RBU0NJSVNwYWNlKCpidWZmZXIpKSB7CisgICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJh
Y3RlclR5cGUsIGlzTm90QVNDSUlTcGFjZT4oYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVMaXN0KCkucG9saWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdp
biwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wbHVnaW5UeXBlcy5hZGQoU3RyaW5nKGJl
Z2luLCBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiAKLSAgICAgICAgLy8gbWltZTEvbWlt
ZTEgbWltZTIvbWltZTIKLSAgICAgICAgLy8gICAgICAgXgotICAgICAgICBpZiAoIXNraXBFeGFj
dGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKLSAgICAg
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
LSAgICAgICAgICAgIGRpcmVjdGl2ZUxpc3QoKS5wb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2lu
VHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChidWZmZXIuYXRFbmQoKSB8fCBpc0FTQ0lJU3BhY2Uo
KmJ1ZmZlcikpOwogICAgICAgICB9Ci0gICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNNZWRpYVR5
cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIC8vIG1pbWUxL21pbWUxIG1p
bWUyL21pbWUyIE9SIG1pbWUxL21pbWUxICBPUiBtaW1lMS9taW1lMS9lcnJvcgotICAgICAgICAv
LyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBe
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiBpc05vdEFTQ0lJU3BhY2UoKnBvc2l0aW9u
KSkgewotICAgICAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3BhY2U+KHBvc2l0
aW9uLCBlbmQpOwotICAgICAgICAgICAgZGlyZWN0aXZlTGlzdCgpLnBvbGljeSgpLnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0
cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwotCi0gICAgICAgIEFTU0VSVChwb3NpdGlv
biA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwotICAgIH0KKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAJKHJl
dmlzaW9uIDI2MzU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw0OCArNTcsNDEgQEAg
c3RhdGljIGJvb2wgaXNDU1BEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cgogICAgICAgICB8fCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5h
bWVzOjpzdHlsZVNyYyk7CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFy
IGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NvdXJj
ZUNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2Uo
Yyk7CiB9CiAKLXN0YXRpYyBib29sIGlzSG9zdENoYXJhY3RlcihVQ2hhciBjKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09
ICctJzsKIH0KIAotc3RhdGljIGJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVDaGFyIGMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BhdGhDb21w
b25lbnRDaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBjICE9ICc/JyAm
JiBjICE9ICcjJzsKIH0KIAotc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0
ZXIoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29s
IGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsKICAgICBy
ZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBj
ID09ICcuJzsKIH0KIAotc3RhdGljIGJvb2wgaXNOb3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzTm90Q29sb25PclNs
YXNoKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7
CiB9CiAKLXN0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzU291cmNlTGlz
dE5vbmUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAg
YXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxVQ2hh
ciwgaXNBU0NJSVNwYWNlPihiZWdpbiwgZW5kKTsKLQotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotICAgIHNraXBXaGlsZTxVQ2hhciwgaXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0
aW9uLCBlbmQpOwotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4s
IHBvc2l0aW9uIC0gYmVnaW4sICInbm9uZSciKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1ZmZlcik7CiAKLSAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgaWYgKHBv
c2l0aW9uICE9IGVuZCkKKyAgICBpZiAoIXNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVm
ZmVyLCAiJ25vbmUnIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1ZmZl
cik7CisKKyAgICByZXR1cm4gYnVmZmVyLmF0RW5kKCk7CiB9CiAKIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QoY29uc3QgQ29u
dGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSkK
QEAgLTEwOCwxMiArMTAyLDE0IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OkNv
bnRlbnQKIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHZhbHVlKSkgewot
ICAgICAgICBtX2lzTm9uZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0
byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgcGFyc2UoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpKTsKKyAg
ICByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgeworICAg
ICAgICBpZiAoaXNTb3VyY2VMaXN0Tm9uZShidWZmZXIpKSB7CisgICAgICAgICAgICBtX2lzTm9u
ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwYXJz
ZShidWZmZXIpOworICAgIH0pOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OmlzUHJvdG9jb2xBbGxvd2VkQnlTdGFyKGNvbnN0IFVSTCYgdXJsKSBjb25zdApAQCAt
MTYwLDQyICsxNTYsMzcgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpt
YQogLy8gc291cmNlLWxpc3QgICAgICAgPSAqV1NQIFsgc291cmNlICooIDEqV1NQIHNvdXJjZSAp
ICpXU1AgXQogLy8gICAgICAgICAgICAgICAgICAgLyAqV1NQICInbm9uZSciICpXU1AKIC8vCi12
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0
aW9uID0gYmVnaW47Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAo
cG9zaXRpb24gPT0gZW5kKQorICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJU3BhY2U+KGJ1
ZmZlcik7CisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBjb25zdCBVQ2hhciogYmVnaW5Tb3VyY2UgPSBwb3NpdGlvbjsKLSAgICAgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAg
ICAgIGF1dG8gYmVnaW5Tb3VyY2UgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgc2tpcFdo
aWxlPENoYXJhY3RlclR5cGUsIGlzU291cmNlQ2hhcmFjdGVyPihidWZmZXIpOwogCi0gICAgICAg
IFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7Ci0gICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiBw
b3J0OwotICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZhbHNlOwotICAgICAgICBib29s
IHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworICAgICAgICBhdXRvIHNvdXJjZUJ1ZmZlciA9IFN0
cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblNvdXJjZSwgYnVmZmVyLnBvc2l0aW9uKCkgfTsKIAot
ICAgICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pKQorICAg
ICAgICBpZiAocGFyc2VOb25jZVNvdXJjZShzb3VyY2VCdWZmZXIpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKHBhcnNlSGFzaFNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRp
b24pKQorICAgICAgICBpZiAocGFyc2VIYXNoU291cmNlKHNvdXJjZUJ1ZmZlcikpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGFyc2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBv
c2l0aW9uLCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhh
c1dpbGRjYXJkKSkgeworICAgICAgICBpZiAoYXV0byBzb3VyY2UgPSBwYXJzZVNvdXJjZShzb3Vy
Y2VCdWZmZXIpKSB7CiAgICAgICAgICAgICAvLyBXaWxkY2FyZCBob3N0cyBhbmQga2V5d29yZCBz
b3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5saW5lJywKICAgICAgICAgICAgIC8vIGV0Yy4pIGFy
ZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQgYXMgYXR0cmlidXRlcyBvbiB0aGUgc291cmNlCiAg
ICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4KLSAgICAgICAgICAgIGlmIChzY2hlbWUuaXNFbXB0
eSgpICYmIGhvc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKHNvdXJjZS0+c2NoZW1lLmlz
RW1wdHkoKSAmJiBzb3VyY2UtPmhvc3QudmFsdWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFtZShob3N0KSkKLSAg
ICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24o
bV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKLSAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgs
IGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAgICAgICBpZiAoaXND
U1BEaXJlY3RpdmVOYW1lKHNvdXJjZS0+aG9zdC52YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9w
b2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwg
c291cmNlLT5ob3N0LnZhbHVlKTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzb3VyY2UtPnNjaGVtZSwgc291cmNlLT5ob3N0
LnZhbHVlLCBzb3VyY2UtPnBvcnQudmFsdWUsIHNvdXJjZS0+cGF0aCwgc291cmNlLT5ob3N0Lmhh
c1dpbGRjYXJkLCBzb3VyY2UtPnBvcnQuaGFzV2lsZGNhcmQpKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVj
dGl2ZU5hbWUsIFN0cmluZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOwor
ICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24obV9kaXJl
Y3RpdmVOYW1lLCBTdHJpbmcoYmVnaW5Tb3VyY2UsIGJ1ZmZlci5wb3NpdGlvbigpIC0gYmVnaW5T
b3VyY2UpKTsKIAotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFj
ZSgqcG9zaXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5hdEVuZCgpIHx8IGlzQVNDSUlT
cGFjZSgqYnVmZmVyKSk7CiAgICAgfQogICAgIAogICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwpA
QCAtMjA1LDI3MCArMTk2LDI5NCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhCiAvLyAgICAgICAgICAgICAgICAgICAvICggWyBzY2hlbWUgIjovLyIgXSBob3N0IFsg
cG9ydCBdIFsgcGF0aCBdICkKIC8vICAgICAgICAgICAgICAgICAgIC8gIidzZWxmJyIKIC8vCi1i
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9z
dCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNX
aWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6U291cmNl
PiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsKLSAgICBpZiAoYmVnaW4gPT0gZW5k
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidub25lJyIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAiJ25vbmUn
IikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTb3VyY2Ugc291cmNlOwog
Ci0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgIGlmIChi
dWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSAmJiAqYnVmZmVyID09ICcqJykgewogICAgICAg
ICBtX2FsbG93U3RhciA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gc291cmNlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShiZWdpbiwgZW5kIC0gYmVnaW4sICInc2VsZiciKSkgeworICAgIGlmIChza2lwRXhhY3RseUln
bm9yaW5nQVNDSUlDYXNlKGJ1ZmZlciwgIidzZWxmJyIpKSB7CiAgICAgICAgIG1fYWxsb3dTZWxm
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2U7CiAg
ICAgfQogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQg
LSBiZWdpbiwgIid1bnNhZmUtaW5saW5lJyIpKSB7CisgICAgaWYgKHNraXBFeGFjdGx5SWdub3Jp
bmdBU0NJSUNhc2UoYnVmZmVyLCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKICAgICAgICAgbV9hbGxv
d0lubGluZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gc291
cmNlOwogICAgIH0KIAotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdp
biwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKKyAgICBpZiAoc2tpcEV4YWN0bHlJ
Z25vcmluZ0FTQ0lJQ2FzZShidWZmZXIsICIndW5zYWZlLWV2YWwnIikpIHsKICAgICAgICAgbV9h
bGxvd0V2YWwgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBj
b25zdCBVQ2hhciogYmVnaW5Ib3N0ID0gYmVnaW47Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luUGF0
aCA9IGVuZDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKKyAgICBhdXRv
IGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgYXV0byBiZWdpbkhvc3QgPSBiZWdpbjsK
KyAgICBhdXRvIGJlZ2luUGF0aCA9IGJ1ZmZlci5lbmQoKTsKKyAgICBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBiZWdpblBvcnQgPSBudWxscHRyOwogCi0gICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdENv
bG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzTm90Q29sb25PclNsYXNoPihidWZmZXIpOwogCi0gICAgaWYgKHBvc2l0aW9uID09IGVuZCkg
eworICAgIGlmIChidWZmZXIuYXRFbmQoKSkgewogICAgICAgICAvLyBob3N0CiAgICAgICAgIC8v
ICAgICBeCi0gICAgICAgIHJldHVybiBwYXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9z
dCwgaG9zdEhhc1dpbGRjYXJkKTsKKyAgICAgICAgYXV0byBob3N0ID0gcGFyc2VIb3N0KFN0cmlu
Z1BhcnNpbmdCdWZmZXIgeyBiZWdpbkhvc3QsIGJ1ZmZlci5wb3NpdGlvbigpIH0pOworICAgICAg
ICBpZiAoIWhvc3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7CisgICAgICAgIHJldHVybiBzb3VyY2U7CiAg
ICAgfQogCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnLycpIHsKKyAg
ICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyID09ICcvJykg
ewogICAgICAgICAvLyBob3N0L3BhdGggfHwgaG9zdC8gfHwgLwogICAgICAgICAvLyAgICAgXiAg
ICAgICAgICAgIF4gICAgXgotICAgICAgICByZXR1cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9z
aXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkgJiYgcGFyc2VQYXRoKHBvc2l0aW9uLCBlbmQs
IHBhdGgpOworICAgICAgICBhdXRvIGhvc3QgPSBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZl
ciB7IGJlZ2luSG9zdCwgYnVmZmVyLnBvc2l0aW9uKCkgfSk7CisgICAgICAgIGlmICghaG9zdCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwYXRoID0g
cGFyc2VQYXRoKGJ1ZmZlcik7CisgICAgICAgIGlmICghcGF0aCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgc291cmNlLmhvc3QgPSBXVEZNb3ZlKCpob3N0KTsK
KyAgICAgICAgc291cmNlLnBhdGggPSBXVEZNb3ZlKCpwYXRoKTsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZTsKICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6
JykgewotICAgICAgICBpZiAoZW5kIC0gcG9zaXRpb24gPT0gMSkgeworICAgIGlmIChidWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpidWZmZXIgPT0gJzonKSB7CisgICAgICAgIGlm
IChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSkgewogICAgICAgICAgICAgLy8gc2NoZW1l
OgogICAgICAgICAgICAgLy8gICAgICAgXgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2NoZW1l
KGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKTsKKyAgICAgICAgICAgIGF1dG8gc2NoZW1lID0gcGFy
c2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSB9
KTsKKyAgICAgICAgICAgIGlmICghc2NoZW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgICAgIHNvdXJjZS5zY2hlbWUgPSBXVEZNb3ZlKCpzY2hlbWUp
OworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
b3NpdGlvblsxXSA9PSAnLycpIHsKKyAgICAgICAgaWYgKGJ1ZmZlclsxXSA9PSAnLycpIHsKICAg
ICAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCiAgICAgICAgICAgICAvLyAg
ICAgICBeICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGlmICghcGFyc2VTY2hlbWUoYmVn
aW4sIHBvc2l0aW9uLCBzY2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5PFVD
aGFyPihwb3NpdGlvbiwgZW5kLCAnOicpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5
PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpCi0gICAgICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYmVnaW5Ib3N0ID0gcG9zaXRpb247Ci0gICAgICAg
ICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsK
KyAgICAgICAgICAgIGF1dG8gc2NoZW1lID0gcGFyc2VTY2hlbWUoU3RyaW5nUGFyc2luZ0J1ZmZl
ciB7IGJlZ2luLCBidWZmZXIucG9zaXRpb24oKSB9KTsKKyAgICAgICAgICAgIGlmICghc2NoZW1l
CisgICAgICAgICAgICAgICAgfHwgIXNraXBFeGFjdGx5KGJ1ZmZlciwgJzonKQorICAgICAgICAg
ICAgICAgIHx8ICFza2lwRXhhY3RseShidWZmZXIsICcvJykKKyAgICAgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHkoYnVmZmVyLCAnLycpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAgICAgc291cmNlLnNjaGVtZSA9IFdURk1v
dmUoKnNjaGVtZSk7CisKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IGJ1ZmZlci5wb3NpdGlvbigp
OworICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm90Q29sb25PclNsYXNo
PihidWZmZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpw
b3NpdGlvbiA9PSAnOicpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkgJiYgKmJ1ZmZlciA9PSAnOicpIHsKICAgICAgICAgICAgIC8vIGhvc3Q6cG9ydCB8fCBz
Y2hlbWU6Ly9ob3N0OnBvcnQKICAgICAgICAgICAgIC8vICAgICBeICAgICAgICAgICAgICAgICAg
ICAgXgotICAgICAgICAgICAgYmVnaW5Qb3J0ID0gcG9zaXRpb247Ci0gICAgICAgICAgICBza2lw
VW50aWw8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJyk7CisgICAgICAgICAgICBiZWdpblBvcnQg
PSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIHNraXBVbnRpbChidWZmZXIsICcvJyk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9u
ID09ICcvJykgeworICAgIGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpi
dWZmZXIgPT0gJy8nKSB7CiAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QvcGF0aCB8fCBzY2hlbWU6
Ly9ob3N0OnBvcnQvcGF0aAogICAgICAgICAvLyAgICAgICAgICAgICAgXiAgICAgICAgICAgICAg
ICAgICAgICAgICAgXgotICAgICAgICBpZiAocG9zaXRpb24gPT0gYmVnaW5Ib3N0KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0gYmVn
aW5Ib3N0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBiZWdp
blBhdGggPSBwb3NpdGlvbjsKKyAgICAgICAgYmVnaW5QYXRoID0gYnVmZmVyLnBvc2l0aW9uKCk7
CiAgICAgfQogCi0gICAgaWYgKCFwYXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdp
blBvcnQgOiBiZWdpblBhdGgsIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvIGhvc3QgPSBwYXJzZUhvc3QoU3RyaW5nUGFyc2luZ0J1ZmZlciB7
IGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8gYmVnaW5Qb3J0IDogYmVnaW5QYXRoIH0pOworICAgIGlm
ICghaG9zdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChiZWdpblBv
cnQpIHsKKyAgICAgICAgYXV0byBwb3J0ID0gcGFyc2VQb3J0KFN0cmluZ1BhcnNpbmdCdWZmZXIg
eyBiZWdpblBvcnQsIGJlZ2luUGF0aCB9KTsKKyAgICAgICAgaWYgKCFwb3J0KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghYmVnaW5Qb3J0KQotICAgICAgICBw
b3J0ID0gV1RGOjpudWxsb3B0OwotICAgIGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlUG9ydChi
ZWdpblBvcnQsIGJlZ2luUGF0aCwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc291cmNlLnBvcnQgPSBXVEZNb3ZlKCpwb3J0KTsKICAg
ICB9CiAKLSAgICBpZiAoYmVnaW5QYXRoICE9IGVuZCkgewotICAgICAgICBpZiAoIXBhcnNlUGF0
aChiZWdpblBhdGgsIGVuZCwgcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGJlZ2luUGF0aCAhPSBidWZmZXIuZW5kKCkpIHsKKyAgICAgICAgYXV0byBwYXRoID0gcGFy
c2VQYXRoKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBiZWdpblBhdGgsIGJ1ZmZlci5lbmQoKSB9KTsK
KyAgICAgICAgaWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgICAgICBzb3VyY2UucGF0aCA9IFdURk1vdmUoKnBhdGgpOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHNvdXJjZS5ob3N0ID0gV1RGTW92ZSgqaG9zdCk7CisgICAgcmV0dXJuIHNv
dXJjZTsKIH0KIAogLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rpb24g
ZnJvbSBSRkMgMzk4NgogLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBIQSAvIERJR0lUIC8g
IisiIC8gIi0iIC8gIi4iICkKIC8vCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3Q6OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBzY2hlbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxT
dHJpbmc+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOwotICAgIEFTU0VSVChzY2hlbWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoYnVm
ZmVyLnBvc2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsKIAotICAgIGlmIChiZWdpbiA9PSBlbmQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdp
bjsKKyAgICBhdXRvIGJlZ2luID0gYnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICBpZiAoIXNraXBF
eGFjdGx5PFVDaGFyLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJQWxw
aGE+KGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwV2hp
bGU8VUNoYXIsIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsK
KyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0
ZXI+KGJ1ZmZlcik7CiAKLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHNjaGVtZSA9IFN0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBTdHJpbmcoYmVnaW4sIGJ1ZmZlci5wb3NpdGlvbigpIC0g
YmVnaW4pOwogfQogCiAvLyBob3N0ICAgICAgICAgICAgICA9IFsgIiouIiBdIDEqaG9zdC1jaGFy
ICooICIuIiAxKmhvc3QtY2hhciApCiAvLyAgICAgICAgICAgICAgICAgICAvICIqIgogLy8gaG9z
dC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCiAvLwotYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6Okhvc3Q+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNl
SG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsKLSAgICBB
U1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoaG9zdC5pc0VtcHR5KCkpOwotICAgIEFT
U0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKKyAgICBBU1NFUlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0g
YnVmZmVyLmVuZCgpKTsKIAotICAgIGlmIChiZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBIb3N0IGhvc3Q7
CiAKLSAgICBpZiAoc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcqJykpIHsKLSAg
ICAgICAgaG9zdEhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVy
LCAnKicpKSB7CisgICAgICAgIGhvc3QuaGFzV2lsZGNhcmQgPSB0cnVlOwogCi0gICAgICAgIGlm
IChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGhvc3Q7CiAKLSAgICAgICAgaWYg
KCFza2lwRXhhY3RseTxVQ2hhcj4ocG9zaXRpb24sIGVuZCwgJy4nKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcuJykpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBo
b3N0QmVnaW4gPSBwb3NpdGlvbjsKKyAgICBhdXRvIGhvc3RCZWdpbiA9IGJ1ZmZlci5wb3NpdGlv
bigpOwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghc2tpcEV4
YWN0bHk8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpIHsKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseTxDaGFyYWN0ZXJUeXBlLCBpc0hvc3RDaGFy
YWN0ZXI+KGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIHNraXBXaGlsZTxVQ2hhciwgaXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKyAg
ICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzSG9zdENoYXJhY3Rlcj4oYnVmZmVyKTsK
IAotICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgIXNraXBFeGFjdGx5PFVDaGFyPihwb3Np
dGlvbiwgZW5kLCAnLicpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
YnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhc2tpcEV4YWN0bHkoYnVmZmVyLCAn
LicpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBBU1NF
UlQocG9zaXRpb24gPT0gZW5kKTsKLSAgICBob3N0ID0gU3RyaW5nKGhvc3RCZWdpbiwgZW5kIC0g
aG9zdEJlZ2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoYnVmZmVyLmF0RW5kKCkp
OworICAgIGhvc3QudmFsdWUgPSBTdHJpbmcoaG9zdEJlZ2luLCBidWZmZXIucG9zaXRpb24oKSAt
IGhvc3RCZWdpbik7CisgICAgcmV0dXJuIGhvc3Q7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBwYXRoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
T3B0aW9uYWw8U3RyaW5nPiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBh
dGgoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgQVNT
RVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsKICAgICAKLSAgICBjb25zdCBV
Q2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIsIGlzUGF0aENvbXBv
bmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5w
b3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1BhdGhDb21wb25lbnRD
aGFyYWN0ZXI+KGJ1ZmZlcik7CiAgICAgLy8gcGF0aC90by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8
fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCiAgICAgLy8gICAgICAgICAgICAgICAgXiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kKQotICAgICAg
ICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3RlcihtX2RpcmVjdGl2ZU5hbWUsIFN0
cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pLCAqcG9zaXRpb24pOwotICAgIAotICAgIHBhdGggPSBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7
Ci0gICAgCi0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IGVuZCk7Ci0gICAgQVNTRVJUKHBvc2l0aW9u
ID09IGVuZCB8fCAoKnBvc2l0aW9uID09ICcjJyB8fCAqcG9zaXRpb24gPT0gJz8nKSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisg
ICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVyKG1fZGlyZWN0aXZlTmFt
ZSwgU3RyaW5nKGJlZ2luLCBidWZmZXIuZW5kKCkgLSBiZWdpbiksICpidWZmZXIpOworCisgICAg
QVNTRVJUKGJ1ZmZlci5wb3NpdGlvbigpIDw9IGJ1ZmZlci5lbmQoKSk7CisgICAgQVNTRVJUKGJ1
ZmZlci5hdEVuZCgpIHx8ICgqYnVmZmVyID09ICcjJyB8fCAqYnVmZmVyID09ICc/JykpOworCisg
ICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmdWaWV3KGJlZ2luLCBidWZm
ZXIucG9zaXRpb24oKSAtIGJlZ2luKSk7CiB9CiAKIC8vIHBvcnQgICAgICAgICAgICAgID0gIjoi
ICggMSpESUdJVCAvICIqIiApCiAvLwotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBPcHRp
b25hbDx1aW50MTZfdD4mIHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3Q6OlBvcnQ+IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlUG9ydChT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsKLSAgICBBU1NFUlQo
YmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoIXBvcnQpOwotICAgIEFTU0VSVCghcG9ydEhhc1dp
bGRjYXJkKTsKKyAgICBBU1NFUlQoYnVmZmVyLnBvc2l0aW9uKCkgPD0gYnVmZmVyLmVuZCgpKTsK
ICAgICAKLSAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyPihiZWdpbiwgZW5kLCAnOicpKQorICAg
IGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnOicpKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAKLSAgICBpZiAoYmVnaW4gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIAotICAgIGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKLSAgICAg
ICAgcG9ydCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcG9ydEhhc1dpbGRjYXJkID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9
PSAxICYmICpidWZmZXIgPT0gJyonKSB7CisgICAgICAgIFBvcnQgcG9ydDsKKyAgICAgICAgcG9y
dC5oYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgIHJldHVybiBwb3J0OwogICAgIH0KICAgICAK
LSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKLSAgICBza2lwV2hpbGU8VUNoYXIs
IGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBiZWdpbiA9IGJ1ZmZlci5w
b3NpdGlvbigpOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1
ZmZlcik7CiAgICAgCi0gICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghYnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgCiAgICAgYm9vbCBvazsKLSAgICBpbnQgcG9ydEludCA9IGNoYXJhY3RlcnNUb0lu
dFN0cmljdChiZWdpbiwgZW5kIC0gYmVnaW4sICZvayk7Ci0gICAgaWYgKHBvcnRJbnQgPCAwIHx8
IHBvcnRJbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwb3J0ID0gcG9ydEludDsKLSAgICByZXR1cm4gb2s7CisgICAg
aW50IHBvcnRJbnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGJ1ZmZlci5wb3NpdGlv
bigpIC0gYmVnaW4sICZvayk7CisgICAgaWYgKCFvayB8fCBwb3J0SW50IDwgMCB8fCBwb3J0SW50
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgUG9ydCBwb3J0OworICAgIHBvcnQudmFsdWUgPSBwb3J0SW50
OworICAgIHJldHVybiBwb3J0OwogfQogCiAvLyBNYXRjaCBCbGluaydzIGJlaGF2aW9yIG9mIGFs
bG93aW5nIGFuIGVxdWFsIHNpZ24gdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoZSB2YWx1ZSBvZiB0
aGUgbm9uY2UKIC8vIGV2ZW4gdGhvdWdoIHRoaXMgZG9lcyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9y
IG9mIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IExldmVsIDMgc3BlYy4sCiAvLyA8aHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jc3AvPiAoMjkgRmVicnVhcnkgMjAxNikuCi1zdGF0aWMg
Ym9vbCBpc05vbmNlQ2hhcmFjdGVyKFVDaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc05vbmNlQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUgYykKIHsK
ICAgICByZXR1cm4gaXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcihjKSB8fCBjID09ICc9JzsK
IH0KIAogLy8gbm9uY2Utc291cmNlICAgID0gIidub25jZS0iIG5vbmNlLXZhbHVlICInIgogLy8g
bm9uY2UtdmFsdWUgICAgID0gYmFzZTY0LXZhbHVlCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3Q6OnBhcnNlTm9uY2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIGNvbnN0IHVuc2lnbmVkIG5vbmNl
UHJlZml4TGVuZ3RoID0gNzsKLSAgICBpZiAoIVN0cmluZ1ZpZXcoYmVnaW4sIGVuZCAtIGJlZ2lu
KS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIidub25jZS0iKSkKKyAgICBpZiAoIXNraXBF
eGFjdGx5SWdub3JpbmdBU0NJSUNhc2UoYnVmZmVyLCAiJ25vbmNlLSIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW4gKyBub25jZVByZWZp
eExlbmd0aDsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5Ob25jZVZhbHVlID0gcG9zaXRpb247Ci0g
ICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vbmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAg
ICBpZiAocG9zaXRpb24gPj0gZW5kIHx8IHBvc2l0aW9uID09IGJlZ2luTm9uY2VWYWx1ZSB8fCAq
cG9zaXRpb24gIT0gJ1wnJykKKworICAgIGF1dG8gYmVnaW5Ob25jZVZhbHVlID0gYnVmZmVyLnBv
c2l0aW9uKCk7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTm9uY2VDaGFyYWN0ZXI+
KGJ1ZmZlcik7CisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpIHx8IGJ1ZmZlci5wb3NpdGlvbigpID09
IGJlZ2luTm9uY2VWYWx1ZSB8fCAqYnVmZmVyICE9ICdcJycpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX25vbmNlcy5hZGQoU3RyaW5nKGJlZ2luTm9uY2VWYWx1ZSwgcG9zaXRpb24gLSBi
ZWdpbk5vbmNlVmFsdWUpKTsKKyAgICBtX25vbmNlcy5hZGQoU3RyaW5nKGJlZ2luTm9uY2VWYWx1
ZSwgYnVmZmVyLnBvc2l0aW9uKCkgLSBiZWdpbk5vbmNlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogLy8gaGFzaC1zb3VyY2UgICAgPSAiJyIgaGFzaC1hbGdvcml0aG0gIi0iIGJhc2U2
NC12YWx1ZSAiJyIKIC8vIGhhc2gtYWxnb3JpdGhtID0gInNoYTI1NiIgLyAic2hhMzg0IiAvICJz
aGE1MTIiCiAvLyBiYXNlNjQtdmFsdWUgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLyIg
LyAiLSIgLyAiXyIgKSoyKCAiPSIgKQotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0OjpwYXJzZUhhc2hTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZUhhc2hTb3VyY2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFy
YWN0ZXJUeXBlPiBidWZmZXIpCiB7Ci0gICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICBpZiAoYnVm
ZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBw
b3NpdGlvbiA9IGJlZ2luOwotICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBl
bmQsICdcJycpKQorICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnXCcnKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNEaWdl
c3QocG9zaXRpb24sIGVuZCk7CisgICAgYXV0byBkaWdlc3QgPSBwYXJzZUNyeXB0b2dyYXBoaWNE
aWdlc3QoYnVmZmVyKTsKICAgICBpZiAoIWRpZ2VzdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKHBvc2l0aW9uID49IGVuZCB8fCAqcG9zaXRpb24gIT0gJ1wnJykKKyAgICBpZiAo
YnVmZmVyLmF0RW5kKCkgfHwgKmJ1ZmZlciAhPSAnXCcnKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoZGlnZXN0LT52YWx1ZS5zaXplKCkgPiBDb250ZW50U2VjdXJpdHlQb2xpY3lI
YXNoOjptYXhpbXVtRGlnZXN0TGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaAkocmV2aXNp
b24gMjYzNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUsMzEgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gbV9pc05vbmU7IH0KIAogcHJpdmF0
ZToKLSAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCk7
Ci0KLSAgICBib29sIHBhcnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBzY2hlbWUsIFN0cmluZyYgaG9zdCwgT3B0aW9uYWw8dWludDE2X3Q+JiBw
b3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dp
bGRjYXJkKTsKLSAgICBib29sIHBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpOwotICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVD
aGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFz
V2lsZGNhcmQpOwotICAgIGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3Qg
VUNoYXIqIGVuZCwgT3B0aW9uYWw8dWludDE2X3Q+JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNh
cmQpOwotICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBwYXRoKTsKLQotICAgIGJvb2wgcGFyc2VOb25jZVNvdXJjZShjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHN0cnVjdCBIb3N0IHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlOworICAgICAgICBib29sIGhhc1dpbGRjYXJkIHsgZmFsc2UgfTsKKyAg
ICB9OworICAgIHN0cnVjdCBQb3J0IHsKKyAgICAgICAgT3B0aW9uYWw8dWludDE2X3Q+IHZhbHVl
OworICAgICAgICBib29sIGhhc1dpbGRjYXJkIHsgZmFsc2UgfTsKKyAgICB9OworICAgIHN0cnVj
dCBTb3VyY2UgeworICAgICAgICBTdHJpbmcgc2NoZW1lOworICAgICAgICBIb3N0IGhvc3Q7Cisg
ICAgICAgIFBvcnQgcG9ydDsKKyAgICAgICAgU3RyaW5nIHBhdGg7CisgICAgfTsKIAogICAgIGJv
b2wgaXNQcm90b2NvbEFsbG93ZWRCeVN0YXIoY29uc3QgVVJMJikgY29uc3Q7CiAKLSAgICBib29s
IHBhcnNlSGFzaFNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2UoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gT3B0aW9uYWw8U291cmNlPiBwYXJzZVNvdXJjZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBP
cHRpb25hbDxTdHJpbmc+IHBhcnNlU2NoZW1lKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEhv
c3Q+IHBhcnNlSG9zdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+KTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxQb3J0PiBwYXJzZVBvcnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8U3RyaW5nPiBwYXJzZVBhdGgoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBwYXJzZU5vbmNlU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VI
YXNoU291cmNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4pOwogCiAgICAgY29u
c3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKICAgICBWZWN0b3I8Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlPiBtX2xpc3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>