<?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>163423</bug_id>
          
          <creation_ts>2016-10-13 17:30:18 -0700</creation_ts>
          <short_desc>CSS parsing should use Color not RGBA32</short_desc>
          <delta_ts>2016-10-18 15:38:14 -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>
          <dependson>163448</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1240041</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-13 17:30:18 -0700</bug_when>
    <thetext>CSS parsing should use Color not RGBA32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240043</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-10-13 17:30:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/28766903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240048</commentid>
    <comment_count>2</comment_count>
      <attachid>291547</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-13 17:41:46 -0700</bug_when>
    <thetext>Created attachment 291547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240053</commentid>
    <comment_count>3</comment_count>
      <attachid>291547</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-13 17:56:41 -0700</bug_when>
    <thetext>Comment on attachment 291547
Patch

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

&gt; Source/WebCore/html/canvas/CanvasStyle.cpp:-51
&gt; -    if (equalLettersIgnoringASCIICase(colorString, &quot;currentcolor&quot;))
&gt; -        return ParsedCurrentColor;

Does CSSParser::parseColor() do this part now?

&gt; Source/WebCore/platform/graphics/Color.h:159
&gt; +    explicit Color(WTF::HashTableDeletedValueType)
&gt; +    {
&gt; +        m_colorData.rgbaAndFlags = 0xfffffffffffffffd;
&gt; +        ASSERT(!isExtended());
&gt; +    }
&gt; +
&gt; +    bool isHashTableDeletedValue() const
&gt; +    {
&gt; +        return m_colorData.rgbaAndFlags == 0xfffffffffffffffd;
&gt; +    }
&gt; +
&gt; +    explicit Color(WTF::HashTableEmptyValueType)
&gt; +    {
&gt; +        m_colorData.rgbaAndFlags = 0xffffffffffffffb;
&gt; +        ASSERT(!isExtended());
&gt; +    }

Can you use your bit enums to mask off bits, rather than hardcoding them here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240055</commentid>
    <comment_count>4</comment_count>
      <attachid>291547</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-13 18:03:23 -0700</bug_when>
    <thetext>Comment on attachment 291547
Patch

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

&gt;&gt; Source/WebCore/html/canvas/CanvasStyle.cpp:-51
&gt;&gt; -        return ParsedCurrentColor;
&gt; 
&gt; Does CSSParser::parseColor() do this part now?

It&apos;s down in parseColorOrCurrentColor now.

&gt;&gt; Source/WebCore/platform/graphics/Color.h:159
&gt;&gt; +    }
&gt; 
&gt; Can you use your bit enums to mask off bits, rather than hardcoding them here?

I could, but I&apos;d still need to do some explicit bit-fudging. These are colors that can never really exist. Supposedly valid RGBA32s, so they don&apos;t get deleted as ExtendedColor, but with junk in the spare space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240061</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-13 18:13:34 -0700</bug_when>
    <thetext>Committed r207317: &lt;http://trac.webkit.org/changeset/207317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240275</commentid>
    <comment_count>6</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-10-14 08:28:08 -0700</bug_when>
    <thetext>As EWS predicted, this caused LayoutTest editing/execCommand/query-command-value-background-color.html to start failing on all platforms.

https://build.webkit.org/results/Apple%20Sierra%20Release%20WK1%20(Tests)/r207337%20(650)/results.html
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=editing%2FexecCommand%2Fquery-command-value-background-color.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240299</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 09:18:18 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 163448</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240477</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-14 16:41:39 -0700</bug_when>
    <thetext>Committed r207361: &lt;http://trac.webkit.org/changeset/207361&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240733</commentid>
    <comment_count>9</comment_count>
      <attachid>291547</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-16 10:31:54 -0700</bug_when>
    <thetext>Comment on attachment 291547
Patch

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

&gt; Source/WebCore/html/canvas/CanvasGradient.cpp:60
&gt; +    Color color = parseColorOrCurrentColor(colorString, 0 /*canvas*/);

Should we use nullptr instead of 0 for canvas?

&gt; Source/WebCore/platform/graphics/Color.h:146
&gt; +        m_colorData.rgbaAndFlags = 0xfffffffffffffffd;

I normally use uppercase hex; not sure if it’s a WebKit coding style agree-to thing, but it’s seen just below in createUnchecked.

I suggest a private named constant rather than repeating this three times. Eliminates the possibility that one of the three has a different number of &quot;f&quot; letters.

&gt;&gt;&gt; Source/WebCore/platform/graphics/Color.h:159
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Can you use your bit enums to mask off bits, rather than hardcoding them here?
&gt; 
&gt; I could, but I&apos;d still need to do some explicit bit-fudging. These are colors that can never really exist. Supposedly valid RGBA32s, so they don&apos;t get deleted as ExtendedColor, but with junk in the spare space.

Could use some static_assert to document some of these properties of the magic value.

&gt; Source/WebCore/platform/graphics/Color.h:204
&gt; +    uint64_t asUint64() const { return m_colorData.rgbaAndFlags; }

I would have preferred that you expose a hash function here rather than exposing this so the hash function can use it.

The capitalization of Uint64 seems peculiar.

&gt; Source/WebCore/platform/graphics/ColorHash.h:34
&gt; +    static unsigned hash(const WebCore::Color&amp; key) { return intHash(key.asUint64()); }

When we add support for ExtendedColor, this hash function will no longer be correct. Also seems to me that if we are using asUint64 for the hash, we should also be using it directly in the equal function.

&gt; Source/WebCore/platform/graphics/ColorHash.h:40
&gt; +    typedef ColorHash Hash;

In new code we should use &quot;using&quot; instead of typedef.

    using Hash = ColorHash;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241652</commentid>
    <comment_count>10</comment_count>
      <attachid>291547</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-18 15:38:14 -0700</bug_when>
    <thetext>Comment on attachment 291547
Patch

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

&gt;&gt; Source/WebCore/html/canvas/CanvasGradient.cpp:60
&gt;&gt; +    Color color = parseColorOrCurrentColor(colorString, 0 /*canvas*/);
&gt; 
&gt; Should we use nullptr instead of 0 for canvas?

Done

&gt;&gt; Source/WebCore/platform/graphics/Color.h:146
&gt;&gt; +        m_colorData.rgbaAndFlags = 0xfffffffffffffffd;
&gt; 
&gt; I normally use uppercase hex; not sure if it’s a WebKit coding style agree-to thing, but it’s seen just below in createUnchecked.
&gt; 
&gt; I suggest a private named constant rather than repeating this three times. Eliminates the possibility that one of the three has a different number of &quot;f&quot; letters.

Fixed!

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/Color.h:159
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; Can you use your bit enums to mask off bits, rather than hardcoding them here?
&gt;&gt; 
&gt;&gt; I could, but I&apos;d still need to do some explicit bit-fudging. These are colors that can never really exist. Supposedly valid RGBA32s, so they don&apos;t get deleted as ExtendedColor, but with junk in the spare space.
&gt; 
&gt; Could use some static_assert to document some of these properties of the magic value.

Added some static_asserts. Disappointed I didn&apos;t think of this originally.

&gt;&gt; Source/WebCore/platform/graphics/Color.h:204
&gt;&gt; +    uint64_t asUint64() const { return m_colorData.rgbaAndFlags; }
&gt; 
&gt; I would have preferred that you expose a hash function here rather than exposing this so the hash function can use it.
&gt; 
&gt; The capitalization of Uint64 seems peculiar.

Done. Removed the incorrectly capitalized Uint64() and added the unsigned hash() const.

&gt;&gt; Source/WebCore/platform/graphics/ColorHash.h:34
&gt;&gt; +    static unsigned hash(const WebCore::Color&amp; key) { return intHash(key.asUint64()); }
&gt; 
&gt; When we add support for ExtendedColor, this hash function will no longer be correct. Also seems to me that if we are using asUint64 for the hash, we should also be using it directly in the equal function.

Yep. I made a note of this in Color.h. (Same applies to operator==)

&gt;&gt; Source/WebCore/platform/graphics/ColorHash.h:40
&gt;&gt; +    typedef ColorHash Hash;
&gt; 
&gt; In new code we should use &quot;using&quot; instead of typedef.
&gt; 
&gt;     using Hash = ColorHash;

Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291547</attachid>
            <date>2016-10-13 17:41:46 -0700</date>
            <delta_ts>2016-10-13 17:56:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163423-20161014113817.patch</filename>
            <type>text/plain</type>
            <size>60969</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRiY2E2ZTRkOWQ2Y2U2
NGNlY2Y5ZDA4MDRlZmUyMzQ2ODI3NDE4ZC4uZTM2Yjc5NTA0ZDVlMjBiNzZmNzhlMTY2ZThjZTRm
ZjUwNmExYzljMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxNi0xMC0xMyAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQ1NTIHBhcnNpbmcgc2hvdWxk
IHVzZSBDb2xvciBub3QgUkdCQTMyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM0MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NzY2OTAzPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG9yZGVy
IHRvIGFsbG93IENTUyB0byB1c2UgdGhlIEV4dGVuZGVkQ29sb3IgdmFyaWFudCBvZgorICAgICAg
ICBDb2xvciwgd2UgbmVlZCB0byBzdG9wIHVzaW5nIFJHQkEzMi4gVGhpcyBpcyBhIGZhaXJseSBi
aWcKKyAgICAgICAgY2hhbmdlIHRoYXQgZ29lcyB0aHJvdWdoIGFsbCB0aGUgcGxhY2VzIGluIHRo
ZSBwYXJzZXIKKyAgICAgICAgcmVsYXRlZCB0byBjb2xvcnMsIGFuZCBtb3ZlcyB0aGVtIGZyb20g
UkdCQTMyIHRvIENvbG9yLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBz
byBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgdGhlIG5ldyBDb2xvckhhc2guaCBmaWxlLgorCisgICAg
ICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDogQ1NTUHJpbWl0aXZlVmFsdWUgbm93IGNh
biBob2xkIGEgQ29sb3IqCisgICAgICAgIHJhdGhlciB0aGFuIGFuIHVuc2lnbmVkIGludCBmb3Ig
Y29sb3JzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjbGVhbnVwKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpnZXRSR0JDb2xvclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpmb3JtYXROdW1iZXJGb3JDdXN0
b21DU1NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjbG9uZUZv
ckNTU09NKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjplcXVhbHMpOgor
ICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oOiBNb3ZlIHRvIENvbG9yKiBhbmQgYWxz
byB1c2Ugc29tZQorICAgICAgICBudWxscHRycy4KKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKTogQWRkIGEgbmV3IGlubGluZQorICAgICAgICBjb25zdHJ1Y3Rvci4K
KworICAgICAgICAqIGNzcy9DU1NWYWx1ZVBvb2wuY3BwOiBNb3ZlIHRvIENvbG9yLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpDU1NWYWx1ZVBvb2wpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFs
dWVQb29sLmg6IENoYW5nZSB0aGUgQ29sb3JWYWx1ZUNhY2hlIHRvIGEgbmV3IHR5cGUuCisKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6IE1vdmUgdG8gQ29sb3IuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAg
ICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xv
clZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpmYXN0UGFyc2VDb2xvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
ZmFzdFBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9y
RnJvbVZhbHVlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAq
IGNzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RQYXJzZUNvbG9ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyRmFzdFBh
dGhzOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVDb2xvcik6CisgICAgICAgICogY3NzL3BhcnNlci9TVkdDU1NQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlU1ZHQ29sb3IpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNzc1ZhbHVlVG9Db2xvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0ZXh0Q29sb3JGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6YmFja2dyb3VuZENvbG9y
RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJnYmFCYWNrZ3JvdW5kQ29sb3JJbkVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNUcmFuc3BhcmVudENvbG9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3NzVmFsdWVUb1JHQkEpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJv
cGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3ApOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6IERpdHRvLCBidXQgbGVhdmUgYSBGSVhNRSB0bwor
ICAgICAgICByZW1pbmQgbXlzZWxmIHRvIGNvbWUgYmFjayB3aGVuIGNvbG9yV2l0aE92ZXJyaWRl
QWxwaGEgaGFzIGJlZW4gdXBkYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNDdXJyZW50Q29sb3JTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
dXJyZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvck9yQ3VycmVudENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRl
QWxwaGEpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgICog
c3ZnL1NWR0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbG9yOjpjb2xvckZyb21S
R0JDb2xvclN0cmluZyk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOiBB
ZGQgbmV3IGNvbnN0cnVjdG9ycyBmb3IgdGhlIHNwZWNpYWwKKyAgICAgICAgZW1wdHkgYW5kIGRl
bGV0ZWQgQ29sb3IgdmFsdWVzIHVzZWQgaW4gSGFzaFRhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzVWludDY0KTogTmV3IGFjY2Vz
c29yIHRvIGdldCB0aGUgcmF3IHVpbnQ2NF90IHZhbHVlLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JIYXNoLmg6IEFkZGVkLiBJbXBsZW1lbnQgdGhlIHRyYWl0cyBmb3IgYSBD
b2xvciBIYXNoVGFibGUuCisgICAgICAgIChXVEY6OkNvbG9ySGFzaDo6aGFzaCk6CisgICAgICAg
IChXVEY6OkNvbG9ySGFzaDo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPFdlYkNv
cmU6OkNvbG9yPjo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8V2ViQ29y
ZTo6Q29sb3I+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoVHJh
aXRzPFdlYkNvcmU6OkNvbG9yPjo6aXNEZWxldGVkVmFsdWUpOgorCiAyMDE2LTEwLTExICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDc0N2JhMDUw
MTQzZjg1ZjE5OTQ2M2EwY2JkODg2ZDQxNWZmMWY5Ny4uNTJmYzUzMzg5NDMwOThlMDg4YTYzNjlm
OTY0YWEwMGZlZmJkNWQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI5Nyw2ICsxMjk3LDcgQEAKIAkJMkVGMUJGRUExMjFD
OUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVGMUJGRTgxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJl
YW0uY3BwICovOyB9OwogCQkyRUYxQkZFQjEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVGMUJGRTkx
MjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRUYxQkZGOTEyMUNCMENFMDBDMjc2MjcgLyogRmls
ZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkVGMUJGRjgxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMTAzQjdERjFE
QjAxNTY3MDA4QkI4OTAgLyogQ29sb3JIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzEw
NjAzNkYxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDYwMzZDMTQzMjdEMkUw
MEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgKi87IH07CiAJCTMxMDYwMzcwMTQz
MjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwNjAzNkQxNDMyN0QyRTAwQUJGNEJBIC8q
IFdlYktpdENTU0ZpbHRlclZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzEwNjAzNzQxNDMyODE5QzAwQUJGNEJBIC8qIEpTV2ViS2l0Q1NT
RmlsdGVyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwNjAzNzIxNDMyODE5QzAwQUJGNEJBIC8qIEpTV2ViS2l0Q1NTRmlsdGVyVmFsdWUu
Y3BwICovOyB9OwpAQCAtODI2Miw2ICs4MjYzLDcgQEAKIAkJMkVGMUJGRTgxMjFDOUY0MjAwQzI3
NjI3IC8qIEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkU5
MTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVG
MUJGRjgxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbG9ySGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTA2MDM2QzE0MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA2MDM2RDE0MzI3RDJFMDBBQkY0QkEg
LyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzEwNjAzNkUxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDczNyw2ICsyMDczOSw3IEBACiAJCQkJQ0RERTAyRTkxOEIz
REZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAy
Q0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBD
b2xvci5oICovLAorCQkJCTMxMDNCN0RFMURCMDE1NTYwMDhCQjg5MCAvKiBDb2xvckhhc2guaCAq
LywKIAkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8s
CiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJ
CQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovLApAQCAtMjUzODks
NiArMjUzOTIsNyBAQAogCQkJCUJDRUMwMUMzMEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0UxMkIwM0Y2MTAwM0E1ODNBIC8qIEpTU2NyaXB0
UHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRG
QUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzEwM0I3REYxREIwMTU2NzAwOEJCODkwIC8qIENvbG9ySGFzaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUJEQTY0RDgxQjk3NUNGMjAwOUM0Mzg3IC8qIEpTU2hhZG93Um9vdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0Q5REUxN0IxN0FBQzc1QjAwRUEzODZEIC8qIEpTU291cmNlQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3RDE3QUFDNzVCMDBFQTM4NkQgLyogSlNTb3VyY2VC
dWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwCmluZGV4IDE2OGM5NDI4ODkxMTI2MmY1NTBjMDNjNWU5ZjU2ZTkyY2E0OTMxMTYu
Ljk4NzcxM2M5MWFmOTVkYWU4NTk3OGRhYTIwNDUwMzFlZmE4YzY4NWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAtMzUwLDExICszNTAsMTEgQEAgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBVbml0
VHlwZXMgdHlwZSkKICAgICAgICAgbV92YWx1ZS5zdHJpbmctPnJlZigpOwogfQogCi1DU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUkdCQTMyIGNvbG9yKQorQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICA6IENTU1Zh
bHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIG1fcHJpbWl0aXZlVW5pdFR5cGUgPSBDU1NfUkdC
Q09MT1I7Ci0gICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOworICAgIG1fdmFsdWUuY29sb3Ig
PSBuZXcgQ29sb3IoY29sb3IpOwogfQogCiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZl
VmFsdWUoY29uc3QgTGVuZ3RoJiBsZW5ndGgpCkBAIC01NzQsNiArNTc0LDExIEBAIHZvaWQgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNsZWFudXAoKQogICAgICAgICBkZWxldGUgbV92YWx1ZS5mb250RmFt
aWx5OwogICAgICAgICBtX3ZhbHVlLmZvbnRGYW1pbHkgPSBudWxscHRyOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIENTU19SR0JDT0xPUjoKKyAgICAgICAgQVNTRVJUKG1fdmFsdWUuY29sb3Ip
OworICAgICAgICBkZWxldGUgbV92YWx1ZS5jb2xvcjsKKyAgICAgICAgbV92YWx1ZS5jb2xvciA9
IG51bGxwdHI7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTX05VTUJFUjoKICAgICBjYXNl
IENTU19QQVJTRVJfSU5URUdFUjoKICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgpAQCAtNjA1LDcg
KzYxMCw2IEBAIHZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNsZWFudXAoKQogICAgIGNhc2UgQ1NT
X0RQQ006CiAgICAgY2FzZSBDU1NfRlI6CiAgICAgY2FzZSBDU1NfSURFTlQ6Ci0gICAgY2FzZSBD
U1NfUkdCQ09MT1I6CiAgICAgY2FzZSBDU1NfVU5LTk9XTjoKICAgICBjYXNlIENTU19VTklDT0RF
X1JBTkdFOgogICAgIGNhc2UgQ1NTX1BBUlNFUl9PUEVSQVRPUjoKQEAgLTEwMjgsNyArMTAzMiw3
IEBAIFJlZlB0cjxSR0JDb2xvcj4gQ1NTUHJpbWl0aXZlVmFsdWU6OmdldFJHQkNvbG9yVmFsdWUo
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgfQogCiAgICAgLy8gRklNWEU6IFRoaXMgc2hv
dWxkIG5vdCByZXR1cm4gYSBuZXcgb2JqZWN0IGZvciBlYWNoIGludm9jYXRpb24uCi0gICAgcmV0
dXJuIFJHQkNvbG9yOjpjcmVhdGUobV92YWx1ZS5yZ2Jjb2xvcik7CisgICAgcmV0dXJuIFJHQkNv
bG9yOjpjcmVhdGUobV92YWx1ZS5jb2xvci0+cmdiKCkpOwogfQogCiBQYWlyKiBDU1NQcmltaXRp
dmVWYWx1ZTo6Z2V0UGFpclZhbHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAtMTE3NSwx
MyArMTE3OSwxMyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Zm9y
bWF0TnVtYmVyRm9yQ3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgY2FzZSBDU1NfTEVOR1RIX1JF
UEVBVDoKICAgICAgICAgcmV0dXJuIGdldExlbmd0aFJlcGVhdFZhbHVlKCktPmNzc1RleHQoKTsK
ICNlbmRpZgotICAgIGNhc2UgQ1NTX1JHQkNPTE9SOgogICAgIGNhc2UgQ1NTX1BBUlNFUl9IRVhD
T0xPUjogewotICAgICAgICBSR0JBMzIgcmdiQ29sb3IgPSBtX3ZhbHVlLnJnYmNvbG9yOwotICAg
ICAgICBpZiAobV9wcmltaXRpdmVVbml0VHlwZSA9PSBDU1NfUEFSU0VSX0hFWENPTE9SKQotICAg
ICAgICAgICAgQ29sb3I6OnBhcnNlSGV4Q29sb3IoKFN0cmluZyltX3ZhbHVlLnN0cmluZywgcmdi
Q29sb3IpOwotICAgICAgICByZXR1cm4gQ29sb3IocmdiQ29sb3IpLmNzc1RleHQoKTsKKyAgICAg
ICAgUkdCQTMyIHJnYjsKKyAgICAgICAgQ29sb3I6OnBhcnNlSGV4Q29sb3IoKFN0cmluZyltX3Zh
bHVlLnN0cmluZywgcmdiKTsKKyAgICAgICAgcmV0dXJuIENvbG9yKHJnYikuY3NzVGV4dCgpOwog
ICAgIH0KKyAgICBjYXNlIENTU19SR0JDT0xPUjoKKyAgICAgICAgcmV0dXJuIGNvbG9yKCkuY3Nz
VGV4dCgpOwogICAgIGNhc2UgQ1NTX1BBSVI6CiAgICAgICAgIHJldHVybiBnZXRQYWlyVmFsdWUo
KS0+Y3NzVGV4dCgpOwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTEzNTEsNyAr
MTM1NSw3IEBAIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNsb25l
Rm9yQ1NTT00oKSBjb25zdAogICAgICAgICByZXN1bHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlSWRlbnRpZmllcihtX3ZhbHVlLnZhbHVlSUQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENTU19SR0JDT0xPUjoKLSAgICAgICAgcmVzdWx0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUNvbG9yKG1fdmFsdWUucmdiY29sb3IpOworICAgICAgICByZXN1bHQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKCptX3ZhbHVlLmNvbG9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
U1NfRElNRU5TSU9OOgogICAgIGNhc2UgQ1NTX1VOS05PV046CkBAIC0xNDMwLDcgKzE0MzQsNyBA
QCBib29sIENTU1ByaW1pdGl2ZVZhbHVlOjplcXVhbHMoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
IG90aGVyKSBjb25zdAogICAgICAgICByZXR1cm4gbV92YWx1ZS5sZW5ndGhSZXBlYXQgJiYgb3Ro
ZXIubV92YWx1ZS5sZW5ndGhSZXBlYXQgJiYgbV92YWx1ZS5sZW5ndGhSZXBlYXQtPmVxdWFscygq
b3RoZXIubV92YWx1ZS5sZW5ndGhSZXBlYXQpOwogI2VuZGlmCiAgICAgY2FzZSBDU1NfUkdCQ09M
T1I6Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlLnJnYmNvbG9yID09IG90aGVyLm1fdmFsdWUucmdi
Y29sb3I7CisgICAgICAgIHJldHVybiBjb2xvcigpID09IG90aGVyLmNvbG9yKCk7CiAgICAgY2Fz
ZSBDU1NfUEFJUjoKICAgICAgICAgcmV0dXJuIG1fdmFsdWUucGFpciAmJiBvdGhlci5tX3ZhbHVl
LnBhaXIgJiYgbV92YWx1ZS5wYWlyLT5lcXVhbHMoKm90aGVyLm1fdmFsdWUucGFpcik7CiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaAppbmRleCBkOGQ5Njc5OGZjOWExNjA1MjVjMjhhNjE1MzEwOGY0YTYwM2RhNDJmLi5hOWE2
Nzc4MWVlMGY0NDFkNGM1Yzc4MzYxZDZkZjJhNDk3YWY4ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMjUzLDcgKzI1Myw2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVJZGVudGlmaWVyKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NQcmltaXRpdmVWYWx1ZShwcm9w
ZXJ0eUlEKSk7IH0KICAgICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQYXJz
ZXJPcGVyYXRvcihpbnQgcGFyc2VyT3BlcmF0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUocGFyc2VyT3BlcmF0b3IpKTsgfQogCi0gICAgc3RhdGljIFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3JlYXRlQ29sb3IodW5zaWduZWQgcmdiVmFsdWUpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmdiVmFsdWUpKTsgfQogICAgIHN0YXRpYyBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSk7
IH0KICAgICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSwgVW5pdFR5cGVzIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUsIHR5cGUpKTsgfQogICAgIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNyZWF0ZShjb25zdCBMZW5ndGgmIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHN0eWxlKSk7
IH0KQEAgLTM0MiwyMSArMzQxLDIxIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgZ2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvdW50ZXIq
IGdldENvdW50ZXJWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgQ291bnRlciogZ2V0
Q291bnRlclZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0VHlwZSAhPSBDU1Nf
Q09VTlRFUiA/IDAgOiBtX3ZhbHVlLmNvdW50ZXI7IH0KKyAgICBDb3VudGVyKiBnZXRDb3VudGVy
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRUeXBlICE9IENTU19DT1VOVEVS
ID8gbnVsbHB0ciA6IG1fdmFsdWUuY291bnRlcjsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVj
dCogZ2V0UmVjdFZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBSZWN0KiBnZXRSZWN0
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRUeXBlICE9IENTU19SRUNUID8g
MCA6IG1fdmFsdWUucmVjdDsgfQorICAgIFJlY3QqIGdldFJlY3RWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdFR5cGUgIT0gQ1NTX1JFQ1QgPyBudWxscHRyIDogbV92YWx1ZS5y
ZWN0OyB9CiAKICAgICBRdWFkKiBnZXRRdWFkVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owot
ICAgIFF1YWQqIGdldFF1YWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdFR5
cGUgIT0gQ1NTX1FVQUQgPyAwIDogbV92YWx1ZS5xdWFkOyB9CisgICAgUXVhZCogZ2V0UXVhZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0VHlwZSAhPSBDU1NfUVVBRCA/IG51
bGxwdHIgOiBtX3ZhbHVlLnF1YWQ7IH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAg
ICAgTGVuZ3RoUmVwZWF0KiBnZXRMZW5ndGhSZXBlYXRWYWx1ZShFeGNlcHRpb25Db2RlJikgY29u
c3Q7Ci0gICAgTGVuZ3RoUmVwZWF0KiBnZXRMZW5ndGhSZXBlYXRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdFR5cGUgIT0gQ1NTX0xFTkdUSF9SRVBFQVQgPyAwIDogbV92YWx1
ZS5sZW5ndGhSZXBlYXQ7IH0KKyAgICBMZW5ndGhSZXBlYXQqIGdldExlbmd0aFJlcGVhdFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0VHlwZSAhPSBDU1NfTEVOR1RIX1JFUEVB
VCA/IG51bGxwdHIgOiBtX3ZhbHVlLmxlbmd0aFJlcGVhdDsgfQogI2VuZGlmCiAKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UkdCQ29sb3I+IGdldFJHQkNvbG9yVmFsdWUoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwotICAgIFJHQkEzMiBnZXRSR0JBMzJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJpbWl0aXZlVW5pdFR5cGUgIT0gQ1NTX1JHQkNPTE9SID8gMCA6IG1fdmFsdWUucmdiY29sb3I7
IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IEFTU0VSVChtX3ByaW1pdGl2ZVVu
aXRUeXBlID09IENTU19SR0JDT0xPUik7IHJldHVybiAqbV92YWx1ZS5jb2xvcjsgfQogCiAgICAg
UGFpciogZ2V0UGFpclZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBQYWlyKiBnZXRQ
YWlyVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRUeXBlICE9IENTU19QQUlS
ID8gbnVsbHB0ciA6IG1fdmFsdWUucGFpcjsgfQpAQCAtNDA0LDcgKzQwMyw3IEBAIHByaXZhdGU6
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTUHJvcGVydHlJRCk7CiAgICAgLy8gRklYTUU6IGlu
dCB2cy4gdW5zaWduZWQgb3ZlcmxvYWRpbmcgaXMgdG9vIHN1YnRsZSB0byBkaXN0aW5ndWlzaCB0
aGUgY29sb3IgYW5kIG9wZXJhdG9yIGNhc2VzLgogICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBw
YXJzZXJPcGVyYXRvcik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWduZWQgY29sb3IpOyAv
LyBSR0IgdmFsdWUKKyAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBDb2xvciYpOwogICAgIENT
U1ByaW1pdGl2ZVZhbHVlKGNvbnN0IExlbmd0aCYpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNv
bnN0IExlbmd0aCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUo
Y29uc3QgTGVuZ3RoU2l6ZSYsIGNvbnN0IFJlbmRlclN0eWxlJik7CkBAIC00NjQsNyArNDYzLDcg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBMZW5ndGhS
ZXBlYXQqIGxlbmd0aFJlcGVhdDsKICNlbmRpZgotICAgICAgICB1bnNpZ25lZCByZ2Jjb2xvcjsK
KyAgICAgICAgY29uc3QgQ29sb3IqIGNvbG9yOwogICAgICAgICBQYWlyKiBwYWlyOwogICAgICAg
ICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKICAgICAgICAgQ1NTQmFzaWNTaGFwZSogc2hhcGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAppbmRl
eCA1ZWZkYWJiMDJmNTMzYzM0ODhiMjIyYmU3M2E2NjA1ZmJlOTlkNmI2Li4yZWJmMzIyYzNiNTg2
OTdjZGFjM2VlOTZmNzlhMTU0MmNmMDVjNzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKQEAgLTQ5MzksNiArNDkzOSwxMyBAQCB0ZW1wbGF0
ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgU1ZHV3JpdGluZ01vZGUoKSBj
b25zdAogICAgIHJldHVybiBXTV9MUlRCOwogfQogCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIDog
Q1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCit7CisgICAgbV9wcmltaXRpdmVVbml0VHlwZSA9IENT
U19SR0JDT0xPUjsKKyAgICBtX3ZhbHVlLmNvbG9yID0gbmV3IENvbG9yKGNvbG9yKTsKK30KKwog
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKENT
U0ZvbnRGYW1pbHkgZm9udEZhbWlseSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAppbmRleCBlNzY3Mzc3NGMxZjFhZDA3ZjI0
YWFkYzNmMzgxYmRjMzVmNDVhYjNjLi4yNDE4Y2E5ZTBhMjY4OTc0NjU2MTAxYjcyYjVlNDJjZTdi
NjkyYTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtNDgsOSArNDgsOSBA
QCBDU1NWYWx1ZVBvb2w6OkNTU1ZhbHVlUG9vbCgpCiAgICAgbV91bnNldFZhbHVlLmNvbnN0cnVj
dCgpOwogICAgIG1fcmV2ZXJ0VmFsdWUuY29uc3RydWN0KCk7CiAKLSAgICBtX3RyYW5zcGFyZW50
Q29sb3IuY29uc3RydWN0KENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgbV93aGl0ZUNvbG9yLmNv
bnN0cnVjdChDb2xvcjo6d2hpdGUpOwotICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ29sb3I6
OmJsYWNrKTsKKyAgICBtX3RyYW5zcGFyZW50Q29sb3IuY29uc3RydWN0KENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCkpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ29sb3IoQ29sb3I6Ondo
aXRlKSk7CisgICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDb2xvcihDb2xvcjo6YmxhY2spKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DU1NWYWx1ZUtleXdvcmRzOyArK2kp
CiAgICAgICAgIG1faWRlbnRpZmllclZhbHVlc1tpXS5jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVJRD4oaSkpOwpAQCAtNzMsMTUgKzczLDE1IEBAIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4g
Q1NTVmFsdWVQb29sOjpjcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTUHJvcGVydHlJRCBpZGVudCkK
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWRlbnQpOwog
fQogCi1SZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlQ29sb3JWYWx1
ZSh1bnNpZ25lZCByZ2JWYWx1ZSkKK1JlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29s
OjpjcmVhdGVDb2xvclZhbHVlKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBUaGVzZSBh
cmUgdGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlcyBvZiB0aGUgaGFzaCB0YWJsZS4KLSAgICBp
ZiAocmdiVmFsdWUgPT0gQ29sb3I6OnRyYW5zcGFyZW50KQorICAgIGlmIChjb2xvciA9PSBDb2xv
cjo6dHJhbnNwYXJlbnQpCiAgICAgICAgIHJldHVybiBtX3RyYW5zcGFyZW50Q29sb3IuZ2V0KCk7
Ci0gICAgaWYgKHJnYlZhbHVlID09IENvbG9yOjp3aGl0ZSkKKyAgICBpZiAoY29sb3IgPT0gQ29s
b3I6OndoaXRlKQogICAgICAgICByZXR1cm4gbV93aGl0ZUNvbG9yLmdldCgpOwogICAgIC8vIEp1
c3QgYmVjYXVzZSBpdCBpcyBjb21tb24uCi0gICAgaWYgKHJnYlZhbHVlID09IENvbG9yOjpibGFj
aykKKyAgICBpZiAoY29sb3IgPT0gQ29sb3I6OmJsYWNrKQogICAgICAgICByZXR1cm4gbV9ibGFj
a0NvbG9yLmdldCgpOwogCiAgICAgLy8gUmVtb3ZlIG9uZSBlbnRyeSBhdCByYW5kb20gaWYgdGhl
IGNhY2hlIGdyb3dzIHRvbyBsYXJnZS4KQEAgLTg5LDkgKzg5LDkgQEAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdiVmFsdWUp
CiAgICAgaWYgKG1fY29sb3JWYWx1ZUNhY2hlLnNpemUoKSA+PSBtYXhpbXVtQ29sb3JDYWNoZVNp
emUpCiAgICAgICAgIG1fY29sb3JWYWx1ZUNhY2hlLnJlbW92ZShtX2NvbG9yVmFsdWVDYWNoZS5i
ZWdpbigpKTsKIAotICAgIENvbG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xv
clZhbHVlQ2FjaGUuYWRkKHJnYlZhbHVlLCBudWxscHRyKTsKKyAgICBDb2xvclZhbHVlQ2FjaGU6
OkFkZFJlc3VsdCBlbnRyeSA9IG1fY29sb3JWYWx1ZUNhY2hlLmFkZChjb2xvciwgbnVsbHB0cik7
CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7CisgICAgICAgIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoY29sb3IpOwog
ICAgIHJldHVybiAqZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWVQb29sLmgKaW5kZXggZDFjYjQyNGNkZGNhYTAzYTY5NDU2NzFkY2FiNzM3MTY1OTQ2ZjMwMS4u
NjM1NDFlZDM3MGIwYmU0MWUwODVmYjg3YWE3MjI3MTQ3NmI4MjBmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZVBvb2wuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNTU1JldmVydFZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVW5zZXRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKKyNpbmNsdWRlICJDb2xvckhhc2guaCIKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC02
MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBSZWY8Q1NTUmV2ZXJ0VmFsdWU+IGNyZWF0ZVJldmVy
dFZhbHVlKCkgeyByZXR1cm4gbV9yZXZlcnRWYWx1ZS5nZXQoKTsgfQogICAgIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSUQgaWRlbnRpZmllcik7
CiAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTUHJv
cGVydHlJRCBpZGVudGlmaWVyKTsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUNv
bG9yVmFsdWUodW5zaWduZWQgcmdiVmFsdWUpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y3JlYXRlQ29sb3JWYWx1ZShjb25zdCBDb2xvciYpOwogICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
KTsKICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkgeyByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7IH0KICAgICBSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNyZWF0ZVZhbHVlKGNvbnN0IExlbmd0aCYgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkgeyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgc3R5bGUp
OyB9CkBAIC03Miw3ICs3Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ1NTVmFsdWVQb29s
KCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4+IENvbG9yVmFsdWVDYWNoZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29sb3IsIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4+IENvbG9yVmFsdWVDYWNoZTsKICAgICBDb2xvclZhbHVlQ2Fj
aGUgbV9jb2xvclZhbHVlQ2FjaGU7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8Q1NTVmFsdWVMaXN0Pj4gRm9udEZhY2VWYWx1ZUNhY2hlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGRmY2I3ZWUzMDNkZTVjYjQxYzg0ODExM2UyODgzYTg1
NjI2YmQ0MGUuLjlmN2RjMzM0MjVlNGFmNmZhNTA4NTk4YWZkNjEwNjA0MTIzMDM3ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTE4MzEsNyArMTgzMSw3IEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVu
dChjb25zdCBDU1NQcmltaXRpCiBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExp
bmspIGNvbnN0CiB7CiAgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yKHZhbHVlLmdldFJHQkEzMlZhbHVlKCkpOworICAgICAgICByZXR1cm4gdmFsdWUuY29s
b3IoKTsKIAogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgQ1NTVmFsdWVJ
RCBpZGVudCA9IHZhbHVlLmdldFZhbHVlSUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcAppbmRleCA3ZWYyYjZmZTFhODNmNjYwMjlmMmRiZjFkMWExMTBiZDJmM2QzNTI2
Li4zZTA2Zjg1MjI3MzQzZjlkNjliNzhhMjU3MDgzOTExY2U5ZmNhOGZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC00OTQsOCArNDk0LDggQEAgc3RhdGljIENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VDb2xvclZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmIGRlY2xhcmF0aW8KICAgICAgICAgYXV0byB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwogICAgICAgICByZXR1cm4gZGVj
bGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgV1RGTW92
ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6
IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKICAgICB9Ci0gICAgUkdCQTMyIGNv
bG9yOwotICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBz
dHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCisgICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6
OmZhc3RQYXJzZUNvbG9yKHN0cmluZywgc3RyaWN0ICYmIHN0cmluZ1swXSAhPSAnIycpOworICAg
IGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJl
c3VsdDo6RXJyb3I7CiAKICAgICBhdXRvIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKQEAgLTEzNzAsMzYgKzEzNzAsMzQgQEAgQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYgZGVjbGFyYXRpb24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0vLyBUaGUgY29sb3Ig
d2lsbCBvbmx5IGJlIGNoYW5nZWQgd2hlbiBzdHJpbmcgY29udGFpbnMgYSB2YWxpZCBDU1MgY29s
b3IsIHNvIGNhbGxlcnMKLS8vIGNhbiBzZXQgaXQgdG8gYSBkZWZhdWx0IGNvbG9yIGFuZCBpZ25v
cmUgdGhlIGJvb2xlYW4gcmVzdWx0LgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMy
JiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RyaWN0KQorQ29sb3IgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKIHsKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKIAogICAgIC8vIEZpcnN0IHRyeSBjcmVhdGluZyBhIGNvbG9yIHNwZWNp
ZmllZCBieSBuYW1lLCByZ2JhKCksIHJnYigpIG9yICIjIiBzeW50YXguCi0gICAgaWYgKGZhc3RQ
YXJzZUNvbG9yKGNvbG9yLCBzdHJpbmcsIHN0cmljdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIENvbG9yIGNvbG9yID0gZmFzdFBhcnNlQ29sb3Ioc3RyaW5nLCBzdHJpY3QpOworICAgIGlm
IChjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIENTU1BhcnNl
ciBwYXJzZXIoSFRNTFN0YW5kYXJkTW9kZSk7CiAKICAgICAvLyBJbiBjYXNlIHRoZSBmYXN0LXBh
dGggcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kIHRoZSBjb2xvciwgdHJ5IHRoZSBmdWxsIHBhcnNl
ci4KLSAgICBpZiAoIXBhcnNlci5wYXJzZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXBhcnNlci5wYXJzZUNvbG9yRnJvbVN0cmluZyhzdHJpbmcpKQorICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKIAogICAgIENTU1ZhbHVlJiB2YWx1ZSA9ICpwYXJzZXIubV9w
YXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENv
bG9yKCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNS
R0JDb2xvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDb2xvcigp
OwogCi0gICAgY29sb3IgPSBwcmltaXRpdmVWYWx1ZS5nZXRSR0JBMzJWYWx1ZSgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOwogfQogCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0cmluZykKK2Jvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBz
ZXR1cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7Y29sb3I6Iiwgc3RyaW5nLCAifSAiKTsKICAgICBj
c3N5eXBhcnNlKHRoaXMpOwpAQCAtMTQwOCwyMyArMTQwNiwxOCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICByZXR1cm4gIW1fcGFyc2VkUHJv
cGVydGllcy5pc0VtcHR5KCkgJiYgbV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkuaWQoKSA9PSBD
U1NQcm9wZXJ0eUNvbG9yOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihS
R0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50KQor
Q29sb3IgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBh
Z2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAog
ICAgIENTU1BhcnNlclN0cmluZyBjc3NDb2xvcjsKICAgICBjc3NDb2xvci5pbml0KHN0cmluZyk7
CiAgICAgQ1NTVmFsdWVJRCBpZCA9IGNzc1ZhbHVlS2V5d29yZElEKGNzc0NvbG9yKTsKICAgICBp
ZiAoIXZhbGlkUHJpbWl0aXZlVmFsdWVDb2xvcihpZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICBDb2xvciBwYXJzZWRDb2xvciA9IGRvY3Vt
ZW50LT5wYWdlKCktPnRoZW1lKCkuc3lzdGVtQ29sb3IoaWQpOwotICAgIGlmICghcGFyc2VkQ29s
b3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb2xvciA9IHBhcnNl
ZENvbG9yLnJnYigpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkb2N1bWVudC0+cGFn
ZSgpLT50aGVtZSgpLnN5c3RlbUNvbG9yKGlkKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnBhcnNl
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JM
aXN0KQpAQCAtNzQ4MSwxNyArNzQ3NCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJH
Qihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGZh
c3RQYXJzZUNvbG9ySW50ZXJuYWwoUkdCQTMyJiByZ2IsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCAsIGJvb2wgc3RyaWN0KQorc3RhdGljIGlubGluZSBD
b2xvciBmYXN0UGFyc2VDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCAsIGJvb2wgc3RyaWN0KQogewogICAgIENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOwot
ICAgIAorCiAgICAgaWYgKCFzdHJpY3QgJiYgbGVuZ3RoID49IDMpIHsKKyAgICAgICAgUkdCQTMy
IHJnYjsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPT0gJyMnKSB7CiAgICAgICAgICAgICBp
ZiAoQ29sb3I6OnBhcnNlSGV4Q29sb3IoY2hhcmFjdGVycyArIDEsIGxlbmd0aCAtIDEsIHJnYikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIENv
bG9yKHJnYik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoQ29sb3I6OnBhcnNl
SGV4Q29sb3IoY2hhcmFjdGVycywgbGVuZ3RoLCByZ2IpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcihyZ2IpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC03NTA1LDE3ICs3NDk5LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYXN0UGFy
c2VDb2xvckludGVybmFsKFJHQkEzMiYgcmdiLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyCiAg
ICAgICAgIGludCBhbHBoYTsKICAgICAgICAgCiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9y
UGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVl
bikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwg
JywnLCBleHBlY3QsIGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQs
IGVuZCwgJyknLCBhbHBoYSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZ2IgPSBtYWtlUkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CisgICAgICAgIHJldHVybiBDb2xvcihtYWtlUkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSkpOwogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50YXguCkBAIC03NTI2LDQ1ICs3NTE5
LDM5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYXN0UGFyc2VDb2xvckludGVybmFsKFJHQkEzMiYg
cmdiLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyCiAgICAgICAgIGludCBncmVlbjsKICAgICAg
ICAgaW50IGJsdWU7CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJy
ZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9y
UGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAgaWYg
KCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmdiID0gbWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIENv
bG9yKG1ha2VSR0IocmVkLCBncmVlbiwgYmx1ZSkpOwogICAgIH0KIAotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gQ29sb3IoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZT4KLWJvb2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3Ry
aW5nVHlwZSYgbmFtZSwgYm9vbCBzdHJpY3QpCitDb2xvciBDU1NQYXJzZXI6OmZhc3RQYXJzZUNv
bG9yKGNvbnN0IFN0cmluZ1R5cGUmIG5hbWUsIGJvb2wgc3RyaWN0KQogewogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgYm9vbCBwYXJzZVJlc3VsdDsKIAogICAgIGlm
ICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDb2xvcigp
OwogCisgICAgQ29sb3IgY29sb3I7CiAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgIHBh
cnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChyZ2IsIG5hbWUuY2hhcmFjdGVyczgo
KSwgbGVuZ3RoLCBzdHJpY3QpOworICAgICAgICBjb2xvciA9IGZhc3RQYXJzZUNvbG9ySW50ZXJu
YWwobmFtZS5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIHN0cmljdCk7CiAgICAgZWxzZQotICAgICAg
ICBwYXJzZVJlc3VsdCA9IGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwocmdiLCBuYW1lLmNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgsIHN0cmljdCk7CisgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChuYW1lLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHN0cmljdCk7CiAKLSAgICBpZiAo
cGFyc2VSZXN1bHQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChjb2xvci5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIC8vIFRyeSBuYW1lZCBjb2xvcnMuCi0g
ICAgQ29sb3IgdGM7Ci0gICAgdGMuc2V0TmFtZWRDb2xvcihuYW1lKTsKLSAgICBpZiAodGMuaXNW
YWxpZCgpKSB7Ci0gICAgICAgIHJnYiA9IHRjLnJnYigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGNvbG9yLnNldE5hbWVkQ29sb3IobmFtZSk7
CisgICAgcmV0dXJuIGNvbG9yOwogfQogICAgIAogaW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBh
cnNlZERvdWJsZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCkBA
IC03NjgwLDYxICs3NjY3LDU4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBkb3VibGUqIGNvbG9yQXJyYXksIGJvCiAKIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKENTU1BhcnNlclZhbHVlKiB2
YWx1ZSkKIHsKLSAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBpZiAoIXBh
cnNlQ29sb3JGcm9tVmFsdWUodmFsdWUgPyAqdmFsdWUgOiAqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgYykpCisgICAgQ29sb3IgY29sb3IgPSBwYXJzZUNvbG9yRnJvbVZhbHVlKHZhbHVlID8gKnZh
bHVlIDogKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKGMpOworICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOwogfQogCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VDb2xvckZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJHQkEzMiYgYykKK0Nv
bG9yIENTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIKICAgICAgICAgJiYgdmFsdWUuZlZhbHVlID49IDAuICYmIHZhbHVl
LmZWYWx1ZSA8IDEwMDAwMDAuKSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6OmZvcm1h
dCgiJTA2ZCIsIHN0YXRpY19jYXN0PGludD4oKHZhbHVlLmZWYWx1ZSsuNSkpKTsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHN0cmljdCBwYXJzaW5nIGZvciBTVkcgYXMgd2VsbC4K
LSAgICAgICAgaWYgKCFmYXN0UGFyc2VDb2xvcihjLCBzdHIsIGluU3RyaWN0TW9kZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhc3RQYXJzZUNvbG9yKHN0
ciwgaW5TdHJpY3RNb2RlKCkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUgogICAgICAgICB8fCB2YWx1ZS51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQKICAgICAgICAgfHwgKGluUXVpcmtzTW9kZSgp
ICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKSB7Ci0g
ICAgICAgIGlmICghZmFzdFBhcnNlQ29sb3IoYywgdmFsdWUuc3RyaW5nLCBpblN0cmljdE1vZGUo
KSAmJiB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZmFzdFBhcnNlQ29sb3IodmFsdWUu
c3RyaW5nLCBpblN0cmljdE1vZGUoKSAmJiB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpOwogICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24KICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKICAgICAgICAgJiYg
dmFsdWUuZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8K
ICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJyZ2IoIikpIHsKICAgICAgICAgaW50IGNvbG9yVmFsdWVzWzNdOwogICAgICAgICBp
ZiAoIXBhcnNlUkdCUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIGZhbHNlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYyA9IG1ha2VSR0IoY29sb3JWYWx1ZXNbMF0s
IGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7CisgICAgICAgICAgICByZXR1cm4gQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yKG1ha2VSR0IoY29sb3JWYWx1ZXNbMF0sIGNvbG9y
VmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFy
Z3MKICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA3IC8qIHJnYmEg
KyB0aHJlZSBjb21tYXMgKi8KICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZ2JhKCIpKSB7CiAgICAgICAgIGludCBjb2xvclZh
bHVlc1s0XTsKICAgICAgICAgaWYgKCFwYXJzZVJHQlBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFs
dWVzLCB0cnVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYyA9IG1ha2VS
R0JBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9y
VmFsdWVzWzNdKTsKKyAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICByZXR1cm4g
Q29sb3IobWFrZVJHQkEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVl
c1syXSwgY29sb3JWYWx1ZXNbM10pKTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uCiAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCiAg
ICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiBoc2wgKyB0d28g
Y29tbWFzICovCiAgICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAiaHNsKCIpKSB7CiAgICAgICAgIGRvdWJsZSBjb2xvclZhbHVlc1sz
XTsKICAgICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCBm
YWxzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGMgPSBtYWtlUkdCQUZy
b21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIDEu
MCk7CisgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yKG1h
a2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVl
c1syXSwgMS4wKSk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbgogICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncwogICAgICAgICAmJiB2
YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDcgLyogaHNsYSArIHRocmVlIGNvbW1hcyAq
LwogICAgICAgICAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgImhzbGEoIikpIHsKICAgICAgICAgZG91YmxlIGNvbG9yVmFsdWVzWzRdOwogICAg
ICAgICBpZiAoIXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjID0gbWFrZVJHQkFGcm9tSFNMQShj
b2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVl
c1szXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBDb2xvcigpOworICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQkFGcm9tSFNMQShjb2xv
clZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVlc1sz
XSkpOworICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDb2xvcigpOwogfQog
CiAvLyBUaGlzIGNsYXNzIHRyYWNrcyBwYXJzaW5nIHN0YXRlIGZvciBzaGFkb3cgdmFsdWVzLiAg
SWYgaXQgZ29lcyBvdXQgb2Ygc2NvcGUgKGUuZy4sIGR1ZSB0byBhbiBlYXJseSByZXR1cm4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAppbmRleCBkMmM4ODAzZDEyNDJhN2ZiZDgz
ODkzZWIxOTBiOGY2ZDFjNWU3Mjc0Li5mYzlmZjQzYTdiYmYyZWUyOThhZWUxNGViNjViODM2YjRj
NjgxYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTEzNCw5ICsx
MzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1w
b3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKik7CiAg
ICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0
cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVl
dENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUNv
bG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwor
ICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0g
ZmFsc2UpOwogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKENTU1ZhbHVl
SUQpOwotICAgIHN0YXRpYyBib29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29u
c3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xv
cihjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQs
IFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAKQEAgLTI3OCwxMSArMjc4LDExIEBAIHB1YmxpYzoK
ICAgICBib29sIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYsIGludCogY29sb3JW
YWx1ZXMsIGJvb2wgcGFyc2VBbHBoYSk7CiAgICAgYm9vbCBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NT
UGFyc2VyVmFsdWUmLCBkb3VibGUqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEpOwogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb2xvcihDU1NQYXJzZXJWYWx1ZSogPSBu
dWxscHRyKTsKLSAgICBib29sIHBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmLCBS
R0JBMzImKTsKKyAgICBDb2xvciBwYXJzZUNvbG9yRnJvbVZhbHVlKENTU1BhcnNlclZhbHVlJik7
CiAgICAgdm9pZCBwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIENTU1NlbGVjdG9yTGlzdCYp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLSAgICBzdGF0aWMgYm9vbCBm
YXN0UGFyc2VDb2xvcihSR0JBMzImLCBjb25zdCBTdHJpbmdUeXBlJiwgYm9vbCBzdHJpY3QpOwor
ICAgIHN0YXRpYyBDb2xvciBmYXN0UGFyc2VDb2xvcihjb25zdCBTdHJpbmdUeXBlJiwgYm9vbCBz
dHJpY3QpOwogCiAgICAgYm9vbCBwYXJzZUxpbmVIZWlnaHQoYm9vbCBpbXBvcnRhbnQpOwogICAg
IGJvb2wgcGFyc2VGb250U2l6ZShib29sIGltcG9ydGFudCk7CkBAIC02MTgsNyArNjE4LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0Jik7CiAg
ICAgYm9vbCBwYXJzZUZvbnRGYWNlU3JjTG9jYWwoQ1NTVmFsdWVMaXN0Jik7CiAKLSAgICBib29s
IHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBwYXJzZUNvbG9yRnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKIAogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgYm9v
bCBwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIGdy
aWRMaW5lTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckZhc3RQYXRocy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZh
c3RQYXRocy5jcHAKaW5kZXggMmI0NDA2OTZmNGMxMmY5YmM4NzNjNmRlMWNiYTI0ODc2OWUyMWM4
MC4uY2QzMzQwYTgyODZjMjVjMzEzZmU2NGZiNmJkYjdjYzdkZWQ4NjU3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcApAQCAtNDExLDE2
ICs0MTEsMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoUkdC
QTMyJiByZ2IsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCwgYm9vbCBxdWlya3NNb2RlKQorc3RhdGljIENvbG9yIGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIHF1
aXJrc01vZGUpCiB7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBleHBlY3QgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzOjpDU1NfVU5LTk9XTjsKIAotICAgIGlmIChsZW5n
dGggPj0gNCAmJiBjaGFyYWN0ZXJzWzBdID09ICcjJykKLSAgICAgICAgcmV0dXJuIENvbG9yOjpw
YXJzZUhleENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpOworICAgIGlmIChs
ZW5ndGggPj0gNCAmJiBjaGFyYWN0ZXJzWzBdID09ICcjJykgeworICAgICAgICAvLyBGSVhNRTog
V2h5IGRvZXNuJ3QgdGhpcyBjaGVjayBpZiB0aGUgcGFyc2Ugd29ya2VkPyBJcyB0aGUgZmFsbGJh
Y2sgYmxhY2s/CisgICAgICAgIFJHQkEzMiByZ2I7CisgICAgICAgIENvbG9yOjpwYXJzZUhleENv
bG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpOworICAgICAgICByZXR1cm4gQ29s
b3IocmdiKTsKKyAgICB9CiAKICAgICBpZiAocXVpcmtzTW9kZSAmJiAobGVuZ3RoID09IDMgfHwg
bGVuZ3RoID09IDYpKSB7CisgICAgICAgIFJHQkEzMiByZ2I7CiAgICAgICAgIGlmIChDb2xvcjo6
cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDb2xvcihyZ2IpOwogICAgIH0KIAogICAgIC8v
IFRyeSByZ2JhKCkgc3ludGF4LgpAQCAtNDMzLDE3ICs0MzgsMTYgQEAgc3RhdGljIGJvb2wgZmFz
dFBhcnNlQ29sb3JJbnRlcm5hbChSR0JBMzImIHJnYiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hh
cmFjdGVycywKICAgICAgICAgaW50IGFscGhhOwogCiAgICAgICAgIGlmICghcGFyc2VDb2xvcklu
dE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlm
ICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBn
cmVlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ29s
b3IoKTsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVu
ZCwgJywnLCBleHBlY3QsIGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJl
bnQsIGVuZCwgJyknLCBhbHBoYSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZ2IgPSBtYWtlUkdCQShyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisgICAgICAgIHJldHVybiBDb2xvcihtYWtlUkdCQShyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSkpOwogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50YXguCkBAIC00NTQsMTggKzQ1
OCwxNyBAQCBzdGF0aWMgYm9vbCBmYXN0UGFyc2VDb2xvckludGVybmFsKFJHQkEzMiYgcmdiLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLAogICAgICAgICBpbnQgZ3JlZW47CiAgICAg
ICAgIGludCBibHVlOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3Vy
cmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgcmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIGlm
ICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcpJywgZXhwZWN0LCBi
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJnYiA9IG1ha2VSR0IocmVkLCBncmVlbiwgYmx1ZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiBD
b2xvcihtYWtlUkdCKHJlZCwgZ3JlZW4sIGJsdWUpKTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIENvbG9yKCk7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
RmFzdFBhdGhzOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUpCkBAIC00NzgsMTYgKzQ4MSwxNSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2Vy
TQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFs
dWVJRCk7CiAgICAgfQogCi0gICAgUkdCQTMyIGNvbG9yOwogICAgIGJvb2wgcXVpcmtzTW9kZSA9
IGlzUXVpcmtzTW9kZUJlaGF2aW9yKHBhcnNlck1vZGUpOwogCiAgICAgLy8gRmFzdCBwYXRoIGZv
ciBoZXggY29sb3JzIGFuZCByZ2IoKS9yZ2JhKCkgY29sb3JzCi0gICAgYm9vbCBwYXJzZVJlc3Vs
dDsKKyAgICBDb2xvciBjb2xvcjsKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBw
YXJzZVJlc3VsdCA9IGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoY29sb3IsIHN0cmluZy5jaGFyYWN0
ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHF1aXJrc01vZGUpOworICAgICAgICBjb2xvciA9IGZh
c3RQYXJzZUNvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSwgcXVpcmtzTW9kZSk7CiAgICAgZWxzZQotICAgICAgICBwYXJzZVJlc3VsdCA9IGZhc3RQYXJz
ZUNvbG9ySW50ZXJuYWwoY29sb3IsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0
aCgpLCBxdWlya3NNb2RlKTsKLSAgICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICBjb2xvciA9
IGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVu
Z3RoKCksIHF1aXJrc01vZGUpOworICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVDb2xvclZhbHVlKGNvbG9yKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCAxY2Q5YjM2YzE1Y2ZiNGYz
OWUyMDJhZWEyYjUzNmIxMzkwYjIwNjE3Li5iZGRmMDE2YzdjMDlmNGQ5YzZmYzdhNTkyOTZjMTg4
ZDAyY2YzYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC01MDksNyArNTA5LDcgQEAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUKICAgICBSR0JBMzIgY29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAg
aWYgKCFwYXJzZUhleENvbG9yKHJhbmdlLCBjb2xvciwgYWNjZXB0UXVpcmt5Q29sb3JzKSAmJiAh
cGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb2xvcikpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IoY29sb3IpOworICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKENvbG9yKGNvbG9yKSk7CiB9CiAKIHN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9TVkdDU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9TVkdDU1NQ
YXJzZXIuY3BwCmluZGV4IGY1MTQzYzk3MTEwZTBkODc5MTZiYzE2MzFkNmQ5Y2I1MWMyMzhhZGUu
LjhhYTQ5Y2UzOWM1ZWE1ZjAwNDgyN2NmZTM0OGZhMjMwYjQ3NzQ1Y2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvU1ZHQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL1NWR0NTU1BhcnNlci5jcHAKQEAgLTEzMSwxMCArMTMxLDEwIEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JW
YWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQogICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9yKFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
c3lzdGVtQ29sb3IoaWQpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAg
ICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJz
ZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nLCBjKTsKKyAgICAgICAgICAgICAgICAg
ICAgQ29sb3IgY29sb3IgPSBwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9y
KHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nLCBjb2xvcik7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVl
Tm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNy
ZWF0ZVVSSUFuZE5vbmUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTI4NiwxOCArMjg2LDE4IEBAIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IENTU1BhcnNlcjo6cGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKQogCiBSZWZQdHI8U1ZHUGFpbnQ+
IENTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiB7Ci0gICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJh
bnNwYXJlbnQ7Ci0gICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpLCBjKSkKKyAgICBDb2xvciBjb2xvciA9IHBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9yKENvbG9yKGMp
KTsKKyAgICByZXR1cm4gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9yKGNvbG9yKTsKIH0KIAogUmVmUHRy
PFNWR0NvbG9yPiBDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IoKQogewotICAgIFJHQkEzMiBjID0g
Q29sb3I6OnRyYW5zcGFyZW50OwotICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSgqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSwgYykpCisgICAgQ29sb3IgY29sb3IgPSBwYXJzZUNvbG9yRnJvbVZh
bHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNWR0NvbG9yOjpjcmVhdGVGcm9t
Q29sb3IoQ29sb3IoYykpOworICAgIHJldHVybiBTVkdDb2xvcjo6Y3JlYXRlRnJvbUNvbG9yKGNv
bG9yKTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVBhaW50T3Jk
ZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDc3OGZiMTQ5
N2FhYjY3Mjg0OGUwZDA5OTYxMTg5OTdkMWZiY2M5MWQuLmY3MTc3Y2JlYjEwZTczMjc2N2Y3YWI2
OWNhY2Q5N2Q0NDZlMjRjMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKQEAgLTM4MiwzNSArMzgyLDMzIEBAIEVkaXRpbmdTdHlsZTo6fkVkaXRpbmdTdHlsZSgpCiB7
CiB9CiAKLXN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUp
CitzdGF0aWMgQ29sb3IgY3NzVmFsdWVUb0NvbG9yKENTU1ZhbHVlKiBjb2xvclZhbHVlKQogewog
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGNvbG9yVmFsdWUpKQogICAgICAgICByZXR1
cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVDb2xvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY29sb3JWYWx1ZSk7CiAg
ICAgaWYgKHByaW1pdGl2ZUNvbG9yLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZUNvbG9yLmdldFJHQkEzMlZhbHVlKCk7CisgICAgICAgIHJldHVybiBwcmltaXRpdmVDb2xv
ci5jb2xvcigpOwogICAgIAotICAgIFJHQkEzMiByZ2JhID0gMDsKLSAgICBDU1NQYXJzZXI6OnBh
cnNlQ29sb3IocmdiYSwgY29sb3JWYWx1ZS0+Y3NzVGV4dCgpKTsKLSAgICByZXR1cm4gcmdiYTsK
KyAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yVmFsdWUtPmNzc1RleHQoKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29s
b3JGcm9tU3R5bGUoVCYgc3R5bGUpCitzdGF0aWMgaW5saW5lIENvbG9yIHRleHRDb2xvckZyb21T
dHlsZShUJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVUb1JHQkEoZXh0cmFjdFByb3Bl
cnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKKyAgICByZXR1cm4gY3Nz
VmFsdWVUb0NvbG9yKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9y
KS5nZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEz
MiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCYgc3R5bGUpCitzdGF0aWMgaW5saW5lIENvbG9y
IGJhY2tncm91bmRDb2xvckZyb21TdHlsZShUJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFs
dWVUb1JHQkEoZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKS5nZXQoKSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9Db2xvcihleHRyYWN0UHJvcGVy
dHlWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdldCgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBSR0JBMzIgcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUqIG5v
ZGUpCitzdGF0aWMgaW5saW5lIENvbG9yIHJnYmFCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChOb2Rl
KiBub2RlKQogewotICAgIHJldHVybiBjc3NWYWx1ZVRvUkdCQShiYWNrZ3JvdW5kQ29sb3JJbkVm
ZmVjdChub2RlKS5nZXQoKSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9Db2xvcihiYWNrZ3JvdW5k
Q29sb3JJbkVmZmVjdChub2RlKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBpbnQgdGV4dEFsaWduUmVz
b2x2aW5nU3RhcnRBbmRFbmQoaW50IHRleHRBbGlnbiwgaW50IGRpcmVjdGlvbikKQEAgLTEwOTYs
NyArMTA5NCw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2hvdWxkUHJlc2VydmVXcml0CiAgICAgICAgIG1fbXV0YWJsZVN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAogICAgIGlmIChoYXNUcmFu
c3BhcmVudEJhY2tncm91bmRDb2xvcihtX211dGFibGVTdHlsZS5nZXQoKSkKLSAgICAgICAgfHwg
Y3NzVmFsdWVUb1JHQkEobV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdldCgpKSA9PSByZ2JhQmFja2dyb3VuZENvbG9ySW5FZmZl
Y3QocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkKKyAgICAgICAgfHwgY3NzVmFsdWVUb0NvbG9y
KG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKS5nZXQoKSkgPT0gcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0KHBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKSkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHVuaWNvZGVCaWRpLmdldCgpKSkgewpAQCAtMTg0MCw3ICsxODM4LDcgQEAgYm9vbCBpc1Ry
YW5zcGFyZW50Q29sb3JWYWx1ZShDU1NWYWx1ZSogY3NzVmFsdWUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmNzc1ZhbHVlKTsKICAgICBpZiAodmFsdWUuaXNSR0JDb2xvcigpKQotICAgICAg
ICByZXR1cm4gIWFscGhhQ2hhbm5lbCh2YWx1ZS5nZXRSR0JBMzJWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmNvbG9yKCkuaGFzQWxwaGEoKTsKICAgICByZXR1cm4gdmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlVHJhbnNwYXJlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCA0YWVjOTc0NTZmNjk1MDA3Njc0Zjg1
ZDI2YjA3NzBiMjdlM2U4OGI4Li5lNDJmY2U2YzBiMDU2MmEwNThjN2FhZjZiYzVhYmY4NmVhZGI4
NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
CkBAIC05ODksMTMgKzk4OSwxMyBAQCBDb2xvciBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb2xvclBy
b3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5SUQgcAogICAgIEVsZW1l
bnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwg
cHJvcGVydHlJZCkpIHsKICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
ICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJv
cGVydHlDb2xvcik7CisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmNvbG9yKCkucmdiKCkpLCBwcm9wZXJ0
eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZh
bHNlOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkQ29sb3IoQ29s
b3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSks
IHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CisgICAgICAgICAgICByZXR1cm4gbm9y
bWFsaXplZENvbG9yKENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmNv
bG9yKCkucmdiKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBp
ZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVyaXQgPSB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAppbmRleCA4YTFj
NjBkNGRiNGJjNWFjMGEzZTYyMjYzYTk2MWI3MmFhZmQwN2I2Li5mZGNmMzk5ZDM2ZTZhMmU4MjVk
ZGI4NWY5YTIzNDFlYzkwMjQ5NTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxCb2R5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCkBAIC0xNTgsOCArMTU4LDggQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLnJlc2V0QWN0aXZlTGlua0Nv
bG9yKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAg
ICAgICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCB2YWx1ZSwgIWRvY3VtZW50
KCkuaW5RdWlya3NNb2RlKCkpKSB7CisgICAgICAgICAgICBDb2xvciBjb2xvciA9IENTU1BhcnNl
cjo6cGFyc2VDb2xvcih2YWx1ZSwgIWRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOworICAgICAg
ICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIGlmIChuYW1lID09
IGxpbmtBdHRyKQogICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLnNldExpbmtDb2xvcihj
b2xvcik7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSB2bGlua0F0dHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKaW5kZXggZDRhNDZl
ODY3M2VlMzJjZjM5YTVjNDM0ZTZjYTljMzg0OTE2MzRlNS4uYjdiNjU0MDkxMGNiYjI5Y2ExMTlh
YWU2MDlkZDQ1YTk3NzFhZGZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcApAQCAtNTAsMTUgKzUwLDE1IEBAIENhbnZhc0dyYWRpZW50OjpDYW52
YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9p
bnQmCiB7CiB9CiAKLXZvaWQgQ2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBjb2xvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENhbnZhc0dy
YWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0cmluZyYgY29sb3JTdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghKHZhbHVlID49IDAgJiYgdmFsdWUg
PD0gMS4wZikpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJHQkEzMiByZ2JhID0gMDsKLSAgICBpZiAoIXBhcnNlQ29sb3JPckN1
cnJlbnRDb2xvcihyZ2JhLCBjb2xvciwgMCAvKmNhbnZhcyovKSkgeworICAgIENvbG9yIGNvbG9y
ID0gcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKGNvbG9yU3RyaW5nLCAwIC8qY2FudmFzKi8pOwor
ICAgIGlmICghY29sb3IuaXNWYWxpZCgpKSB7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQogICAgICAgICBpZiAoIW1fZGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpCiAgICAgICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ2FudmFzR3JhZGllbnQ6
OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvciwgRXhjZXB0aW9u
Q29kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0
b3AodmFsdWUsIENvbG9yKHJnYmEpKTsKKyAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFs
dWUsIGNvbG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDc5OTZk
YmE1MzQzMjQ3MWU2Mzg3NmY0MTZhZmVlMTcyNWY5NTIyOGMuLjZjOGI4NTI5NmVkOTI4YjUzNzI5
NWYyMjY2MzUzZTZkMzNkZTQzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtNDA0LDkgKzQwNCwxMCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5
bGUgc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xv
cigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpCi0gICAgICAgICAg
ICBzdHlsZSA9IENhbnZhc1N0eWxlKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY3VycmVudENvbG9y
KGNhbnZhcygpKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgaWYgKHN0eWxlLmhhc092ZXJyaWRlQWxwaGEoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBub3QgdXNlIFJHQkEzMiBoZXJlLgorICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNT
dHlsZShjb2xvcldpdGhPdmVycmlkZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXMoKSkucmdiKCks
IHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN0
eWxlID0gQ2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhcygpKSk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKSk7CkBAIC00MzAsOSArNDMx
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoQ2FudmFz
U3R5bGUgc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRD
b2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpCi0gICAgICAg
ICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY3VycmVudENv
bG9yKGNhbnZhcygpKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgaWYgKHN0eWxlLmhhc092ZXJyaWRlQWxwaGEoKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCBub3QgdXNlIFJHQkEzMiBoZXJlLgorICAgICAgICAgICAgc3R5bGUgPSBDYW52
YXNTdHlsZShjb2xvcldpdGhPdmVycmlkZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXMoKSkucmdi
KCksIHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHN0eWxlID0gQ2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhcygpKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKSk7CkBAIC01NzgsMTUg
KzU4MCwxNSBAQCBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dDb2xvcigp
IGNvbnN0CiAgICAgcmV0dXJuIENvbG9yKHN0YXRlKCkuc2hhZG93Q29sb3IpLnNlcmlhbGl6ZWQo
KTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd0NvbG9yKGNv
bnN0IFN0cmluZyYgY29sb3IpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hh
ZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKIHsKLSAgICBSR0JBMzIgcmdiYTsK
LSAgICBpZiAoIXBhcnNlQ29sb3JPckN1cnJlbnRDb2xvcihyZ2JhLCBjb2xvciwgY2FudmFzKCkp
KQorICAgIENvbG9yIGNvbG9yID0gcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKGNvbG9yU3RyaW5n
LCBjYW52YXMoKSk7CisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoc3RhdGUoKS5zaGFkb3dDb2xvciA9PSByZ2JhKQorICAgIGlmIChzdGF0ZSgpLnNo
YWRvd0NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm47CiAgICAgcmVhbGl6ZVNhdmVzKCk7
Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkuc2hhZG93Q29sb3IgPSByZ2JhOworICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAgYXBwbHlTaGFkb3coKTsKIH0KIApA
QCAtMTI0OCwxMiArMTI1MCwxNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaAogICAgIH0KIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxm
bG9hdD4gYWxwaGEpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3JT
dHJpbmcsIE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkKIHsKLSAgICBSR0JBMzIgcmdiYSA9IENvbG9y
Ojp0cmFuc3BhcmVudDsKLSAgICBpZiAoIWNvbG9yLmlzTnVsbCgpICYmICFwYXJzZUNvbG9yT3JD
dXJyZW50Q29sb3IocmdiYSwgY29sb3IsIGNhbnZhcygpKSkKKyAgICBDb2xvciBjb2xvciA9IHBh
cnNlQ29sb3JPckN1cnJlbnRDb2xvcihjb2xvclN0cmluZywgY2FudmFzKCkpOworICAgIGlmICgh
Y29sb3JTdHJpbmcuaXNOdWxsKCkgJiYgIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yV2l0
aE92ZXJyaWRlQWxwaGEocmdiYSwgYWxwaGEpKTsKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkK
KyAgICAgICAgY29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgLy8gRklYTUU6IFNob3Vs
ZCBub3QgdXNlIFJHQkEzMiBoZXJlLgorICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhl
aWdodCksIGJsdXIsIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIGFscGhhKSk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBo
YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAppbmRleCBiOWY3
YWVjODBmMzBmYzU1NTIzMmIwZThjMGM4YzIwNDMxZDAyYmYxLi45YWEwYTA1MmY0NjFhZDZiMmM1
ZWFjNmFmZWMzMjMxNTY1ZTAyMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCkBAIC00Myw0NCArNDMsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIENvbG9yUGFyc2VSZXN1bHQgeyBQYXJzZWRSR0JBLCBQYXJzZWRDdXJyZW50Q29sb3Is
IFBhcnNlZFN5c3RlbUNvbG9yLCBQYXJzZUZhaWxlZCB9Oworc3RhdGljIGJvb2wgaXNDdXJyZW50
Q29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKK3sKKyAgICByZXR1cm4gZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29sb3JTdHJpbmcsICJjdXJyZW50Y29sb3IiKTsK
K30KIAotc3RhdGljIENvbG9yUGFyc2VSZXN1bHQgcGFyc2VDb2xvcihSR0JBMzImIHBhcnNlZENv
bG9yLCBjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQgPSBudWxs
cHRyKQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cikKIHsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoY29sb3JTdHJpbmcsICJjdXJyZW50Y29sb3IiKSkKLSAgICAgICAgcmV0
dXJuIFBhcnNlZEN1cnJlbnRDb2xvcjsKLSAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHBh
cnNlZENvbG9yLCBjb2xvclN0cmluZykpCi0gICAgICAgIHJldHVybiBQYXJzZWRSR0JBOwotICAg
IGlmIChDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IocGFyc2VkQ29sb3IsIGNvbG9yU3RyaW5n
LCBkb2N1bWVudCkpCi0gICAgICAgIHJldHVybiBQYXJzZWRTeXN0ZW1Db2xvcjsKLSAgICByZXR1
cm4gUGFyc2VGYWlsZWQ7CisgICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3Io
Y29sb3JTdHJpbmcpOworICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBj
b2xvcjsKKworICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29sb3JTdHJp
bmcsIGRvY3VtZW50KTsKIH0KIAotUkdCQTMyIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzKQorQ29sb3IgY3VycmVudENvbG9yKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMp
CiB7CiAgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+aW5Eb2N1bWVudCgpIHx8ICFjYW52YXMt
PmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Ci0gICAgUkdCQTMy
IHJnYmEgPSBDb2xvcjo6YmxhY2s7Ci0gICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNh
bnZhcy0+aW5saW5lU3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7
Ci0gICAgcmV0dXJuIHJnYmE7CisgICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29s
b3IoY2FudmFzLT5pbmxpbmVTdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29s
b3IpKTsKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yOjpi
bGFjazsKKyAgICByZXR1cm4gY29sb3I7CiB9CiAKLWJvb2wgcGFyc2VDb2xvck9yQ3VycmVudENv
bG9yKFJHQkEzMiYgcGFyc2VkQ29sb3IsIGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMpCitDb2xvciBwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IoY29u
c3QgU3RyaW5nJiBjb2xvclN0cmluZywgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKIHsKLSAg
ICBDb2xvclBhcnNlUmVzdWx0IHBhcnNlUmVzdWx0ID0gcGFyc2VDb2xvcihwYXJzZWRDb2xvciwg
Y29sb3JTdHJpbmcsIGNhbnZhcyA/ICZjYW52YXMtPmRvY3VtZW50KCkgOiAwKTsKLSAgICBzd2l0
Y2ggKHBhcnNlUmVzdWx0KSB7Ci0gICAgY2FzZSBQYXJzZWRSR0JBOgotICAgIGNhc2UgUGFyc2Vk
U3lzdGVtQ29sb3I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgUGFyc2VkQ3VycmVu
dENvbG9yOgotICAgICAgICBwYXJzZWRDb2xvciA9IGN1cnJlbnRDb2xvcihjYW52YXMpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFBhcnNlRmFpbGVkOgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKGlzQ3VycmVudENvbG9yU3RyaW5nKGNv
bG9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2xvcihjYW52YXMpOworCisgICAg
cmV0dXJuIHBhcnNlQ29sb3IoY29sb3JTdHJpbmcsIGNhbnZhcyA/ICZjYW52YXMtPmRvY3VtZW50
KCkgOiBudWxscHRyKTsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKENvbG9yIGNvbG9y
KQpAQCAtMTMzLDM5ICsxMjUsMjggQEAgQ2FudmFzU3R5bGU6On5DYW52YXNTdHlsZSgpCiAgICAg
ICAgIGRlbGV0ZSBtX2NteWthOwogfQogCi1DYW52YXNTdHlsZSBDYW52YXNTdHlsZTo6Y3JlYXRl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yLCBEb2N1bWVudCogZG9jdW1lbnQpCitDYW52
YXNTdHlsZSBDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9y
U3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgUkdCQTMyIHJnYmE7Ci0gICAgQ29s
b3JQYXJzZVJlc3VsdCBwYXJzZVJlc3VsdCA9IHBhcnNlQ29sb3IocmdiYSwgY29sb3IsIGRvY3Vt
ZW50KTsKLSAgICBzd2l0Y2ggKHBhcnNlUmVzdWx0KSB7Ci0gICAgY2FzZSBQYXJzZWRSR0JBOgot
ICAgIGNhc2UgUGFyc2VkU3lzdGVtQ29sb3I6Ci0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZShy
Z2JhKTsKLSAgICBjYXNlIFBhcnNlZEN1cnJlbnRDb2xvcjoKKyAgICBpZiAoaXNDdXJyZW50Q29s
b3JTdHJpbmcoY29sb3JTdHJpbmcpKQogICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGUoQ29uc3Ry
dWN0Q3VycmVudENvbG9yKTsKLSAgICBjYXNlIFBhcnNlRmFpbGVkOgotICAgICAgICByZXR1cm4g
Q2FudmFzU3R5bGUoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7Ci0gICAgfQorCisgICAgQ29sb3IgY29s
b3IgPSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nLCBkb2N1bWVudCk7CisgICAgaWYgKGNvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlKGNvbG9yKTsKKworICAgIHJldHVy
biBDYW52YXNTdHlsZSgpOwogfQogCi1DYW52YXNTdHlsZSBDYW52YXNTdHlsZTo6Y3JlYXRlRnJv
bVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhh
KQorQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVB
bHBoYShjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBSR0JB
MzIgcmdiYTsKLSAgICBDb2xvclBhcnNlUmVzdWx0IHBhcnNlUmVzdWx0ID0gcGFyc2VDb2xvcihy
Z2JhLCBjb2xvcik7Ci0gICAgc3dpdGNoIChwYXJzZVJlc3VsdCkgewotICAgIGNhc2UgUGFyc2Vk
UkdCQToKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
cmdiYSwgYWxwaGEpKTsKLSAgICBjYXNlIFBhcnNlZEN1cnJlbnRDb2xvcjoKKyAgICBpZiAoaXND
dXJyZW50Q29sb3JTdHJpbmcoY29sb3JTdHJpbmcpKQogICAgICAgICByZXR1cm4gQ2FudmFzU3R5
bGUoQ3VycmVudENvbG9yV2l0aE92ZXJyaWRlQWxwaGEsIGFscGhhKTsKLSAgICBjYXNlIFBhcnNl
RmFpbGVkOgotICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGUoKTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7
Ci0gICAgfQorCisgICAgQ29sb3IgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKKyAg
ICBpZiAoY29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGUoY29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgYWxwaGEpKTsKKworICAgIHJldHVybiBDYW52
YXNTdHlsZSgpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25z
dCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuaAppbmRleCAzOTA4ZTg1NjYzMzk0Nzc2NTRiZTFlZTZmNjk4MTdmZGRmN2U2MjQz
Li41NjkxMTFmYmUxYzQzZDJhNmE0MzQxOWYyMjZjMGI3NzE3YjNjZjY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKQEAgLTExMyw4ICsxMTMsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgIH07CiAKLSAgICBSR0JBMzIg
Y3VycmVudENvbG9yKEhUTUxDYW52YXNFbGVtZW50Kik7Ci0gICAgYm9vbCBwYXJzZUNvbG9yT3JD
dXJyZW50Q29sb3IoUkdCQTMyJiBwYXJzZWRDb2xvciwgY29uc3QgU3RyaW5nJiBjb2xvclN0cmlu
ZywgSFRNTENhbnZhc0VsZW1lbnQqKTsKKyAgICBDb2xvciBjdXJyZW50Q29sb3IoSFRNTENhbnZh
c0VsZW1lbnQqKTsKKyAgICBDb2xvciBwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IoY29uc3QgU3Ry
aW5nJiBjb2xvclN0cmluZywgSFRNTENhbnZhc0VsZW1lbnQqKTsKIAogICAgIGlubGluZSBDYW52
YXNTdHlsZTo6Q2FudmFzU3R5bGUoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggOGZhOGU0YzlmZThiZTg5MzQ3
MWMwMzYwYTg5OWE1MzA4MmY4OGFlYi4uNTA0MzZjNjM4NWJlNzg3YzZkYTc4YmRjOTg3MTMyYzhk
YWM2OWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC0x
NDEsNiArMTQxLDIzIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBDb2xv
cihjb25zdCBTdHJpbmcmKTsKICAgICBleHBsaWNpdCBDb2xvcihjb25zdCBjaGFyKik7CiAKKyAg
ICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgewor
ICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAweGZmZmZmZmZmZmZmZmZmZmQ7Cisg
ICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbG9yRGF0
YS5yZ2JhQW5kRmxhZ3MgPT0gMHhmZmZmZmZmZmZmZmZmZmZkOworICAgIH0KKworICAgIGV4cGxp
Y2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBt
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAweGZmZmZmZmZmZmZmZmZmYjsKKyAgICAgICAgQVNT
RVJUKCFpc0V4dGVuZGVkKCkpOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBBZGQgY29uc3RydWN0
b3IgZm9yIEV4dGVuZGVkQ29sb3IgdHlwZS4KIAogICAgIENvbG9yKFJHQkEsIENvbG9yU3BhY2Up
OwpAQCAtMTg0LDYgKzIwMSw3IEBAIHB1YmxpYzoKICAgICBSR0JBMzIgcmdiKCkgY29uc3QgeyBB
U1NFUlQoIWlzRXh0ZW5kZWQoKSk7IHJldHVybiBzdGF0aWNfY2FzdDxSR0JBMzI+KG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA+PiAzMik7IH0KICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcs
IGludCBiKSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJH
QkEzMik7CisgICAgdWludDY0X3QgYXNVaW50NjQoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yRGF0
YS5yZ2JhQW5kRmxhZ3M7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShmbG9h
dCYgciwgZmxvYXQmIGcsIGZsb2F0JiBiLCBmbG9hdCYgYSkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRvdWJs
ZSYgYSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFz
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg4YzFhN2NjMDQyMzBmZDlkMTgzODM5MDg5MWU1MGIyODIyNzIwNGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckhhc2guaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK3N0cnVjdCBDb2xvckhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiBrZXkpIHsgcmV0dXJuIGludEhhc2goa2V5LmFzVWludDY0KCkpOyB9Cisg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGEsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb2xvcj4geworICAgIHR5cGVkZWYgQ29sb3JIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkNvbG9y
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkNvbG9yPiB7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBXZWJDb3JlOjpDb2xv
ciBlbXB0eVZhbHVlKCkgeyByZXR1cm4gV2ViQ29yZTo6Q29sb3IoSGFzaFRhYmxlRW1wdHlWYWx1
ZSk7IH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpD
b2xvciYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90KSBXZWJDb3JlOjpDb2xvcihIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpOyB9Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9y
LmNwcAppbmRleCA0MGRjNGFkNGJjNjY3MWQ3YThhOGRhMzBmZDgyN2IyNzYwNmM0YjIzLi4xZDAx
M2IxZmRjOWQzNDY3ZjQ3Y2ZjNDUyNDU0OWVlZDBkZmFhNjc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDb2xv
ci5jcHAKQEAgLTUxLDEwICs1MSw3IEBAIENvbG9yIFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xv
clN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogICAgIC8vIEZJWE1FOiBSZXdvcmsg
Q1NTIHBhcnNlciBzbyBpdCBleGFjdGx5IG1hdGNoZXMgd2hhdCB0aGUgU1ZHIHNwZWNpZmljYXRp
b24gcmVxdWlyZXM/CiAgICAgLy8gRklYTUU6IE1vdmUgdGhpcyBvdXQgb2YgdGhlIFNWR0NvbG9y
IGNsYXNzPwogICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gZG8gc3RyaXBXaGl0ZXNw
YWNlIGhlcmUgaW5zdGVhZCBvZiBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXM/Ci0g
ICAgUkdCQTMyIGNvbG9yOwotICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIGNv
bG9yU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKSkKLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAg
IHJldHVybiBDb2xvcigpOworICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3JT
dHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkpOwogfQogCiB2b2lkIFNWR0NvbG9yOjpzZXRSR0JDb2xv
cihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykK
</data>
<flag name="review"
          id="314679"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>